如果 ulimit 值不是你想要的,cat /proc/$pid/status 找到它的父进程(也可以用 pstree -p),看父进程的 ulimit 对不对。如果父进程是 init,一般说明这个进程是系统服务(daemon),这时找找启动这个服务的脚本,在启动服务之前加入 ulimit 命令。注意 ulimit 跟 cd 一样是 bash 内部命修改令,也就是不会启动新进程去修改 ulimit,ulimit 命令修改的是当前 bash 进程的设置(如果改大,需要 root 权限),后续启动的子进程会继承修改后的 ulimit。
另外请关注 /proc/sys/fs/file-nr,如果已打开的文件描述符接近最大限制,就要提高系统内所有进程打开的文件描述符总数限制:/proc/sys/fs/file-max。
SJ Zhu <zsj9...@gmail.com>编写:
>在rhel 6.5上,对比了几个节点的/etc/security /etc/init /etc/init.t /etc/pam.d
>几个文件夹grep limit内容都是一样的,可是其中有一个节点ulimit值却还是不对。。。
>
如 Zhang Cheng 所说,ulimit 不是节点的,而是进程的。首先找到出现 too many open files 的进程的 PID,cat /proc/$pid/limits 看 ulimit 值是否是你想要的。注意 ulimit 有两个值,生效的是 soft limit,可以自己调整到的最大值是 hard limit,有点像 uid 与 euid 的关系,具体可以 man ulimit。
我遇到的问题如张成师兄所说,无法定位到引入ulimit -l为64的设置的配置。
几个节点可以说是理论上一模一样的,但有一个节点却在ulimit -l的值上出现了差异。
(Sent from my mobile device.)
--
需要检查max mem lock值的进程是intel mpi。
intel mpi在选择通信设备为ofa时,发现启动失败。开启intel mpi debug模式后发现是max mem lock值过小。从文档上看应该至少32M,结果有一个节点却是64K。
mpi是从bash启动的,应该是继承bash的ulimit值
(Sent from my mobile device.)
--