我有一个以 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 上测试过,可以正常工作。