web-dev-qa-db-ja.com

実行中のプロセスに最大ファイル制限を設定する

最終的に最大オープンファイル制限に達する長期実行プロセスがあります。それが失敗した後でそれを変更する方法を知っていますが、コマンドラインから実行中のプロセスに対してそれを変更する方法はありますか?

29
kāgii

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                    
29
Sig-IO

文書化されている here のように、util-linux 2.21で導入されたprlimitコマンドを使用すると、実行中のプロセスの制限を読み取り、変更できます。

これは、メインラインカーネルに統合されていなかった、書き込み可能な_/proc/<pid>/limits_のフォローアップです。このソリューションは機能するはずです。

prlimit(1)がまだない場合は、 prlimit(2)のマンページ で最小限のバージョンのコードを見つけることができます。

29
Sig-IO

Util-linux-ngの新しいバージョンでは、prlimitコマンドを使用できます。詳細については、このリンクを参照してください https://superuser.com/questions/404239/setting-ulimit-on-a-running-process =

4
c4f4t0r

-nオプションを使用してulimit man ulimitを試すことができますが、magページではほとんどのOSでこれを設定できません。

sysctl -w fs.file-max=Nを使用してシステム全体のファイル記述制限を設定し、/etc/sysctl.confで起動後に変更を永続化できます。

ただし、プロセスを調べて、一度に非常に多くのファイルを開く必要があるかどうか、実際にいくつかのファイルを閉じてプロセスをより効率的にできるかどうかを確認することもお勧めします。

2
Oneiroi

そのようにプログラムされている場合(またはハッキングした場合)、プロセスは独自のソフト制限を変更できますが、CAP_SYS_RESOURCE機能がない場合、ハード制限を引き上げることはできません。 /proc/$pid/limitsで実行時に制限を検査できます。

0
Tobu