実行中のプロセスのリソース制限の変更 (ulimit/rlimit)

実行中のプロセスのリソース制限の変更 (ulimit/rlimit)

最大オープンファイル数などのリソース制限に達した長期実行プロセスがあります。

私はそれを殺したくありません。

通常、次のことを行います。

(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 -ninvalid argument- これがないと、エラーが発生します。

上記の方法が常に動作するわけではないので

別のオプションはprlimitutil-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     

おすすめ記事