设置正在运行的进程的最大文件限制


27

我有一个长期运行的过程,最终将达到最大打开文件数限制。我知道如何在失败后进行更改,但是有没有办法从命令行更改正在运行的进程?

Answers:


28

在CentOS / RHEL的较新内核(2.6.32+)上,您可以在运行时使用/ proc / <pid> / limits进行更改:

cd /proc/7671/
[root@host 7671]# cat limits  | grep nice
Max nice priority         0                    0                    
[root@host 7671]# echo -n "Max nice priority=5:6" > limits
[root@host 7671]# cat limits  | grep nice
Max nice priority         5                    6                    

那个规则!不知道您可以写入限制文件。
2012年

4
在ubuntu 12.04上对我不起作用
Poma

5
这在我的3.2内核上不起作用。我猜您的发行版对此有一个特定的非正式补丁,因为我在内核的fs / proc / base.c中看不到该补丁踪迹
Totor

可能是...我知道它存在于RHEL / CentOS内核中。它似乎在Debian内核中不存在。
Sig-IO 2015年

2
“ setprlimit”是面向未来的推荐方法,请参见下一个答案
Sig-IO

26

作为记录在这里prlimit命令,用的util-linux的2.21介绍可以读取和修改正在运行的进程的限制。

这是writable的后续版本/proc/<pid>/limits,该版本未集成在主线内核中。此解决方案应该起作用。

如果还prlimit(1)没有的话,可以在手册prlimit(2)页中找到该代码的最低版本。


2
+1为手册页中的简约版本!
Totor

警告:如果在遇到限制后,在进程中更改“ nolimit”,则“ memcached”将出现段错误。使用可写限制并不总是一个好主意
约翰


2

您可以man ulimit使用-n选项尝试ulimit ,但是mag页面并不是大多数操作系统都不允许设置的。

您可以使用以下方式设置系统范围的文件描述限制sysctl -w fs.file-max=N,并在启动后保留更改:/etc/sysctl.conf

但是,我还建议您查看该过程,以查看它是否确实确实需要在给定时间打开这么多文件,并且是否可以关闭某些文件并在此过程中提高效率。


打开文件的东西是一个错误,但我一直无法弄清楚。虽然我很乐意这样做,但生产会在中午定期崩溃。
卡吉

ulimit不会将设置应用于正在运行的进程
试试,最终

0

如果进行了编程(或者如果您设法对其进行破解),则该进程可以更改其自身的软限制,但是除非具有CAP_SYS_RESOURCE功能,否则它无法提高其硬限制。您可以在中在运行时检查限制/proc/$pid/limits

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.