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


27

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

回答:


28

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                    

そのルール!制限ファイルに書き込むことができるとは思いもしませんでした。
クリー

4
ubuntu 12.04
Poma

5
これは3.2カーネルでは動作しません。カーネルのfs / proc / base.cこのパッチの痕跡が見られないため、ディストリビューションにはこのための特定の非公式パッチがあると思います。
トーター

可能性があります... RHEL / CentOSカーネルに存在することを知っています。Debianカーネルには存在しないようです。
Sig-IO

2
「setprlimitは、」次の答えを参照、将来性と推奨される方法です
SIG-IO

26

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

これは、/proc/<pid>/limitsメインラインカーネルに統合されていなかったwritableのフォローアップです。このソリューションは動作するはずです。

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


2
マンページの最小限のバージョンの+1!
トーター

警告:制限に達した後、プロセスの「nolimit」を変更すると、「memcached」はセグメンテーション違反になります。書き込み可能な制限を使用することは必ずしも良い考えではありません
ジョン


2

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

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

ただし、プロセスを見て、特定の時間に非常に多くのファイルを開く必要があるかどうか、実際にいくつかのファイルを閉じてプロセスを効率化できるかどうかを確認することもお勧めします。


ファイルを開くことはバグですが、私はそれを理解することができませんでした。私はそうしたいのですが、生産は日中に定期的にクラッシュします。
kāgii

ulimit実行中のプロセスに設定を適用しません。
try-catch-finally

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.