Bart Asked: 2019-08-16 00:54:44 +0800 CST2019-08-16 00:54:44 +0800 CST 2019-08-16 00:54:44 +0800 CST 更改正在运行的进程的资源限制(ulimit / rlimit) 772 我有一个长时间运行的进程正在达到资源限制,例如打开文件的最大数量。 我不想杀了它。 通常,你会这样做: (stop service) ulimit -n <new limit> (start service) 有没有办法避免停止和启动服务并增加限制? linux ulimit 1 个回答 Voted Best Answer Bart 2019-08-16T03:56:41+08:002019-08-16T03:56:41+08:00 我已经想通了。 在某些内核(例如 2.6.32+)上,至少在 CentOS/RHEL 上,您可以使用 更改正在运行的进程的资源限制/proc/<pid>/limits,例如: $ grep "open files" /proc/23052/limits Limit Soft Limit Hard Limit Units Max open files 1024 4096 files 要将最大打开文件数更改为软限制 4096,硬限制 8192: echo -n "Max open files=4096:8192" > /proc/23052/limits 这给出了: $ grep "open files" /proc/23052/limits Limit Soft Limit Hard Limit Units Max open files 4096 8192 files 注意-nin echo -n- 没有它,你会得到一个 " invalid argument" 错误。 以上并不总是有效,所以 另一个选项是prlimit命令,它的引入util-linux 2.21允许您读取和更改正在运行的进程的限制。 这是 writable 的后续/proc/<pid>/limits,它没有集成到主线内核中。该解决方案应该有效。 $ prlimit --nofile --output RESOURCE,SOFT,HARD --pid 23052 RESOURCE SOFT HARD NOFILE 1024 4096 设置限制: $ prlimit --nofile=4096:8192 --pid 23052 确认: $ prlimit --nofile --output RESOURCE,SOFT,HARD --pid 23052RESOURCE SOFT HARD NOFILE 4096 8192 $ grep "open files" /proc/23052/limits Limit Soft Limit Hard Limit Units Max open files 4096 8192 files
我已经想通了。
在某些内核(例如 2.6.32+)上,至少在 CentOS/RHEL 上,您可以使用 更改正在运行的进程的资源限制
/proc/<pid>/limits
,例如:要将最大打开文件数更改为软限制 4096,硬限制 8192:
这给出了:
注意
-n
inecho -n
- 没有它,你会得到一个 "invalid argument
" 错误。以上并不总是有效,所以
另一个选项是
prlimit
命令,它的引入util-linux 2.21
允许您读取和更改正在运行的进程的限制。这是 writable 的后续
/proc/<pid>/limits
,它没有集成到主线内核中。该解决方案应该有效。设置限制:
确认: