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

Ton*_*ony 19 shell 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"
Run Code Online (Sandbox Code Playgroud)

正如这里推荐的那样但没有得到输出:

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$
Run Code Online (Sandbox Code Playgroud)

小智 27

重新审视这个只是因为我在谷歌搜索中偶然发现了它并发现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
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,用它来找出 Debian 上 redis 用户的当前 ulimit。 (2认同)

BIO*_*MOS 7

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

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

请参阅其他地方或此处的limits.conf 示例。

  • 这就是你如何检查`more /proc/<proc_id>/limits` ...也许值得添加回答 (10认同)
  • 也值得一提limits.conf的位置:`/etc/security/limits.conf` (5认同)