首先声明一下环境
我们所用的用户及其操作都是通过远程登录,也就是通过 sshd 这个程序
最近生产服务器的Java程序总是报 Too many open files
发现启动程序的用户 weblogic ulimit 设置并没有生效,执行 ulimit -n 看到的还是 1024.
但是系统的配置文件 设置的是 10240,自己的配置文件 .bash_profile 下设置的也是 10240
于是试着重新执行 source ./.bash_profile
竟然报错!!
[weblogic@bogon ~]$ source ./.bash_profile
-bash: ulimit: open files: cannot modify limit: Operation not permitted
ulimits.conf 文件是要PAM模块使用的,于是找一切关于pam模块的信息,最后找到问题的原因:
由于用户都是用 远程登录的,sshd的配置文件中有个设置项被注释了
[root@bogon ~]# grep -n UsePAM /etc/ssh/sshd_config
108:# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
111: #UsePAM yes
1. 解决办法是去掉此行注释,重启sshd服务
2. 重新登录 weblogic 用户,执行 ulimit -n 验证无误,重启应用程序,使其生效。
3.最后利用下面的脚本来继续验证
for pid in $(ps -aux |grep 程序名|grep -v grep |awk '{print $2}' )
do
cat /proc/${pid}/limits |grep 'Max open files'
done
补充:
其实还有一个办法,先把系统配置文件 limits.conf 设置好,之后再用任意一个账户通过远程登录方式登录到服务器上,这种情况下是走的 sshd 服务;登录之后,在用
su - weblogic
改变用户,此时这个改变的用户 会不走 sshd 服务,而会重新读取自己的环境变量配置文件,假如有就按自己配置文件的设置,假如没有设置则用系统的 limits.conf 文件的设置。
只是这样你每次都要手工输密码。希望你是管理员或者有此用户的权限。
反正我们是没有。最好选择第一种了。