从root su到普通用户,报su: cannot set user id: Resource temporarily unavailable :
查看之下大意是说用户资源使用超过了限制,但查看/etc/security/limits.conf和/etc/security/limits.d并没有看到对目标用户的限制,检查用户使用的资源似乎也都不多,判断不出是什么资源出了问题。直接对最常用的文件打开数、进程打开数和堆栈大小在/etc/security/limits.conf末尾追加了对目录用户的限制(之后分析应该是文件打开数问题)):
vi /etc/security/limits.conf 加如下:
weblogic soft nofile 10240
weblogic hard nofile 65536
weblogic soft nproc 10000
weblogic hard nproc 16384
weblogic soft stack 10240
weblogic hard stack 32768
保存后正常,可以su 了
通过 哪下命令可以查看系统资源限制:
ulimit -a #查看当前用户资源限制,可以看到 nofile 只有默认的1024,很小
ps -ef |grep weblogic | wc -l #统计用户进程开启数 ,我实际情况是只有3个JAVA进程
lsof | grep username | wc -l #统计用户文件打开数,查看了1400多个打开文件数了,所以报错
光设置/etc/security/limits.conf,有可能不生效,因为redhat 6版本引入了:/etc/security/limits.d/90-nproc.conf用于限制用户打开进程数,与limits.conf的关系是:
如果90-nproc.conf与limits.conf存在相同条目的配置那么90-nproc覆盖limits.conf的配置;但是如果90-nproc.conf用的是*
没有指定用户而limits.conf指定用户那么90-nproc的限制不生效;其实90-nproc.conf除了限制nproc其他资源一样可以限制,生效原则与nproc一样.
其实在/etc/security/limit.d目录下你还可以创建其他任意名字的.conf文件,如果/etc/security/limits.d/目录下还有配置文件的话,也读进来,一起分析。这就意味/etc/security/limits.d/里面的文件里面的配置会覆盖/etc/security/limits.conf的配置。
三、limis.conf格式说明
/etc/security/limits.conff配置格式如下:<domain> <type> <item> <value>
domain代表限制的用户对象,可以是:用户名、@用户组名、*(表示所所有用户的默认配置)、%
type代表限制的资源类型,可以是:
hard--硬限制,受限用户不可自己通过ulimit动态修改此项的值
soft--软限制,用户自己可以自己使用ulimit加资源对应的参数动态修改此项的值(但其范围要在hard限制范围以内不然无效)
- --代表软硬两种限制
说明:所谓动态修改,就是如使徦ulimt -n 10240来将nofile临时修改为10240而不是通过修改limits.conf来修改,当然重启之后配置失效。使用ulimit -a来查看资源限制时有各资源对应的配置选项
item代表限制的具体资源,value代表该资源的限制值:
说明:
1.关于资源限制/etc/security/limits.conf文件本身就有说明,也可查看帮助文件的说明:man limits.conf
2.除了priority和nice,其他项都支持使用-1、unlimited、infinity表示无限制
3.可以看到只有memlock、nofile、stack、nproc、sigpending等几项默认值不是unlimited,所以资源问题一般只关注这几项