web-dev-qa-db-ja.com

作業プロセスの「最大オープンファイル」

作業プロセスの「Max open files」パラメータを増やすことは可能ですか?私はこのパラメータを意味します:

cat /proc/<pid>/limits | grep files

あなたのアドバイスをありがとう

18
wako

システム管理者として/etc/security/limits.conf ファイルは、ほとんどのLinuxインストールでこれを制御します。ユーザーごとの制限を設定できます。 myuser - nofile 1000のような行が必要です。

プロセス内getrlimitおよびsetrlimit呼び出し ほとんどのプロセスごとのリソース割り当て制限を制御します。 RLIMIT_NOFILEは、ファイル記述子の最大数を制御します。これを呼び出すには、適切な権限が必要です。

22
user79758

もう1つのオプションは、prutilコマンド(util-linuxパッケージから)を使用することです。たとえば、実行中のプロセスのオープンファイルの最大数を4096に設定する場合は、次のようにします。

prlimit -n4096 -p pid_of_process

18
rkachach

Gdbを使用し、プロセスに割り込んで、前述のsyscallsを呼び出して関心のある制限を引き上げ、ジョブを続行してgdbを終了することができます。この方法で何度かその場で編集しました。

アプリはダウンしませんが、コールを実行している間はしばらくフリーズします。素早い(またはスクリプトで記述した)場合は、おそらく目立たないでしょう。

6
lornix
echo -n "Max open files=20:20" > /proc/$pid/limits

... RHEL5.5およびRHEL6.7で動作します。

「-n」は必須です。末尾の改行は、無効な引数に関する問題を生成します。

5

はい、実行時に/proc/<pid>/limitsの制限を増やすことができます。 pidを見つけて以下のコマンドを実行してください:

echo -n "Max open files=20:20" > /proc/$pid/limits
5
Gaurav KS

このリンク これを変更する方法の詳細システム全体またはユーザーごと

OracleデータベースやApache Webサーバーなどの多くのアプリケーションでは、この範囲をかなり高くする必要があります。そのため、次のようにカーネル変数/ proc/sys/fs/file-maxに新しい値を設定することにより、オープンファイルの最大数を増やすことができます(ルートとしてログイン)。

$ sysctl -w fs.file-max = 100000

/etc/sysctl.confファイルを編集し、次の行を追加して、再起動後に設定がそのまま残るようにする必要があります

5
Brian Agnew

次のコマンドは、デフォルトの制限(それぞれソフトとハード)で許容されるプロセスごとの最大オープンファイル数を示します。

ulimit -Sa
ulimit -Ha

これらの制限を変更するには、プログラムまたはコマンドを使用できます。 ulimit(man ulimit)を見てください。

4
Ravi

Ubuntu 16.04では、rethinkdbプロセスが実行されているため、これらのソリューションはどれも機能しませんでした。

error: accept() failed: Too many open files.を取得し続けました

最終的に機能したのは、これが/etc/security/limits.confファイルにあります。 nofileに加えてnprocに注意してください。私が理解しているように、ルートは個別に指定する必要があります。

*                soft    nofile          200000
*                hard    nofile          1048576
root             soft    nofile          200000
root             hard    nofile          1048576
*                soft    nproc           200000
*                hard    nproc           1048576
root             soft    nproc           200000
root             hard    nproc           1048576

cat /proc/sys/fs/file-maxを実行すると、システムの最大ファイル数を確認できます。私はサーバーのサイズの理由から、私の最大値を十分に高く設定しました。

cat /proc/{your-pid}/limitsを実行すると、プロセスで許可されている最大オープンファイルを確認できます。

役立つ記事: https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a

0
Nick Woodhams