最終的に最大オープンファイル制限に達する長期実行プロセスがあります。それが失敗した後でそれを変更する方法を知っていますが、コマンドラインから実行中のプロセスに対してそれを変更する方法はありますか?
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
文書化されている here のように、util-linux 2.21で導入されたprlimit
コマンドを使用すると、実行中のプロセスの制限を読み取り、変更できます。
これは、メインラインカーネルに統合されていなかった、書き込み可能な_/proc/<pid>/limits
_のフォローアップです。このソリューションは機能するはずです。
prlimit(1)
がまだない場合は、 prlimit(2)
のマンページ で最小限のバージョンのコードを見つけることができます。
Util-linux-ngの新しいバージョンでは、prlimitコマンドを使用できます。詳細については、このリンクを参照してください https://superuser.com/questions/404239/setting-ulimit-on-a-running-process =
-nオプションを使用してulimit man ulimit
を試すことができますが、magページではほとんどのOSでこれを設定できません。
sysctl -w fs.file-max=N
を使用してシステム全体のファイル記述制限を設定し、/etc/sysctl.conf
で起動後に変更を永続化できます。
ただし、プロセスを調べて、一度に非常に多くのファイルを開く必要があるかどうか、実際にいくつかのファイルを閉じてプロセスをより効率的にできるかどうかを確認することもお勧めします。
そのようにプログラムされている場合(またはハッキングした場合)、プロセスは独自のソフト制限を変更できますが、CAP_SYS_RESOURCE機能がない場合、ハード制限を引き上げることはできません。 /proc/$pid/limits
で実行時に制限を検査できます。