如何检查其他用户的 ulimit 并更改打开的文件?

如何检查其他用户的 ulimit 并更改打开的文件?

我有一个以 gearman 用户身份运行的进程,我想进行更改open files以避免出现这个令人讨厌的错误:

错误 2014-09-12 17:49:14.000000 [main] 接受(打开文件过多)-> libgearman-server/gearmand.cc:788

如何在 Ubuntu 上以其他用户身份运行 ulimit 并更改打开的文件?我目前没有以 gearman 身份登录,但我有 root 访问权限。我尝试这样做:

su gearman --shell /bin/bash --command "ulimit -n"

按建议这里但没有任何输出:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$

答案1

重新回顾这一点只是因为我在谷歌搜索时偶然发现了它,并发现托尼的评论很有用:虽然限制确实是放在流程级别,但确定特定用户的限制的方法是找到他们启动的流程,然后检查proc/${id}/limits

具体来说:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID

答案2

当您运行该ulimit命令时,它只会影响正在运行的进程ulimit(shell)和所有子进程。因此,当您运行 时bash --command "ulimit -n",它只会影响该 bash 实例的打开文件数,然后 bash 退出,因此未来的进程不会受到影响。

因此,为了实现您想要的目标(增加实际流程的打开文件限制),编辑limits.conf以增加特定 gearman 用户的打开文件限制可能更有意义。

参见其他地方的 limits.conf 示例或这里

答案3

尝试使用su - <USERNAME> -c ulimit' -Hn'。我刚刚在 CEntOS 7 上测试过,可以正常工作。

相关内容