作業プロセスの「Max open files」パラメータを増やすことは可能ですか?私はこのパラメータを意味します:
cat /proc/<pid>/limits | grep files
あなたのアドバイスをありがとう
システム管理者として: /etc/security/limits.conf
ファイルは、ほとんどのLinuxインストールでこれを制御します。ユーザーごとの制限を設定できます。 myuser - nofile 1000
のような行が必要です。
プロセス内: getrlimitおよびsetrlimit呼び出し ほとんどのプロセスごとのリソース割り当て制限を制御します。 RLIMIT_NOFILE
は、ファイル記述子の最大数を制御します。これを呼び出すには、適切な権限が必要です。
もう1つのオプションは、prutilコマンド(util-linuxパッケージから)を使用することです。たとえば、実行中のプロセスのオープンファイルの最大数を4096に設定する場合は、次のようにします。
prlimit -n4096 -p pid_of_process
Gdbを使用し、プロセスに割り込んで、前述のsyscallsを呼び出して関心のある制限を引き上げ、ジョブを続行してgdbを終了することができます。この方法で何度かその場で編集しました。
アプリはダウンしませんが、コールを実行している間はしばらくフリーズします。素早い(またはスクリプトで記述した)場合は、おそらく目立たないでしょう。
echo -n "Max open files=20:20" > /proc/$pid/limits
... RHEL5.5およびRHEL6.7で動作します。
「-n」は必須です。末尾の改行は、無効な引数に関する問題を生成します。
はい、実行時に/proc/<pid>/limits
の制限を増やすことができます。 pidを見つけて以下のコマンドを実行してください:
echo -n "Max open files=20:20" > /proc/$pid/limits
このリンク これを変更する方法の詳細システム全体またはユーザーごと。
OracleデータベースやApache Webサーバーなどの多くのアプリケーションでは、この範囲をかなり高くする必要があります。そのため、次のようにカーネル変数/ proc/sys/fs/file-maxに新しい値を設定することにより、オープンファイルの最大数を増やすことができます(ルートとしてログイン)。
$ sysctl -w fs.file-max = 100000
/etc/sysctl.confファイルを編集し、次の行を追加して、再起動後に設定がそのまま残るようにする必要があります
次のコマンドは、デフォルトの制限(それぞれソフトとハード)で許容されるプロセスごとの最大オープンファイル数を示します。
ulimit -Sa
ulimit -Ha
これらの制限を変更するには、プログラムまたはコマンドを使用できます。 ulimit(man ulimit)を見てください。
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