如何检查另一个用户的ulimit并更改打开的文件?


18

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

错误2014-09-12 17:49:14.000000 [主要]接受(打开的文件太多)-> 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: 
$

Answers:


25

只是因为我在Google搜索中偶然发现它,并发现Tony的注释很有用:虽然确实在流程级别设置了限制,但是确定特定用户的限制的方法是:找到他们已经开始的流程,然后检查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
这应该是可接受的答案,用它来为Debian上的redis用户找出当前的ulimit。
tholu 2016年

6

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

因此,要完成您想要的操作(增加实际过程的打开文件限制),可能需要进行更多编辑limits.conf以提高特定齿轮工用户的打开文件限制。

在其他地方或此处查看limits.conf的示例。


这也是我发现的,但我很希望能够检查它是否“起作用”。我没有遇到的问题了,所以我确定确实是这样
Tony

10
这就是您检查的方式more /proc/<proc_id>/limits ...也许值得补充一下
Tony

5
值得一提的是limits.conf的位置:/etc/security/limits.conf
UpTheCreek

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.