最大オープンファイル数などのリソース制限に達した長期実行プロセスがあります。
私はそれを殺したくありません。
通常、次のことを行います。
(stop service)
ulimit -n <new limit>
(start service)
サービスを停止して開始し、制限を増やすのを防ぐ方法はありますか?
答え1
私はそれを見つけた。
一部のカーネル(例: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
注意-n
してくださいecho -n
invalid argument
- これがないと、エラーが発生します。
上記の方法が常に動作するわけではないので
別のオプションはprlimit
util-linux 2.21
実行中のプロセスの制限を読み込んで変更できるコマンドが導入されました。
/proc/<pid>/limits
これはメインラインカーネルに統合されていないwritableの後続バージョンです。このソリューションは効果があるでしょう。
$ 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