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