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

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

在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 

如此处所述,util-linux 2.21引入的prlimit命令允许您读取和更改运行进程的限制。

这是可写/proc/<pid>/limits一个后续,它没有集成在主线内核中。 这个解决scheme应该可行

如果您还没有prlimit(1) ,则可以在prlimit(2)联机帮助页中find简约版的代码。

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

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

不过,我也会build议看一下这个过程,看它是否真的需要在给定的时间打开这么多的文件,如果事实上可以closures一些文件,并且在这个过程中效率更高。

在较新版本的util-linux-ng中,您可以使用prlimit命令,了解更多信息,请阅读此链接https://superuser.com/questions/404239/setting-ulimit-on-a-running-process

这个过程可以改变自己的软限制(如果编程这么做的话),但是除非它具有CAP_SYS_RESOURCEfunction,否则不能提高硬限制。 您可以在运行时检查/proc/$pid/limits