それは変更することは可能です-ソフトとハードリミットの特定のプロセスを?
私の場合、私のプロセスはそうでmongod
あり、多くのWebリソースが単純に実行するように言っています:
ulimit -n <my new value>
私の現在の考え:
- 変更するプロセスの制限をコマンドはどのように知るのですか?これはシステム全体のオープンファイル制限を変更しませんか?
- このコマンドはソフト制限のみを変更すると推測しています。それで、ハード制限を増やす方法はありますか?
それは変更することは可能です-ソフトとハードリミットの特定のプロセスを?
私の場合、私のプロセスはそうでmongod
あり、多くのWebリソースが単純に実行するように言っています:
ulimit -n <my new value>
私の現在の考え:
回答:
プロセスは、setrlimit(2)
システムコールを介して制限を変更できます。実行ulimit -n
すると、数字が表示されます。これは、プロセスの開いているファイル記述子(ファイル、ソケット、パイプなどを含む)の現在の制限です。このulimit
コマンドは、getrlimit(2)
システムコールを実行して、現在の値を調べます。
重要な点は次のとおりです。プロセスは、親プロセスから現在の制限を継承します。したがって、実行したulimit -n 64
場合、シェルのオープンファイル記述子の制限を64に設定します。シェルが開始するプロセスは、その新しいプロセスがsetrlimit()
適切に呼び出さない限り、同じ制限になります。
mongodb's
開いているファイル記述子の制限を変更するにulimit -n 2048
は、シェルで(またはカーネルで許可されている多数の)実行します。次に、そのシェルを使用して起動しmongodb
ます。子プロセスとして、mongodb
開いているファイル記述子の(大きな)制限を継承します。
システムのオープンファイル制限を変更するには、すべてのプロセスのオープンファイル記述子制限の合計に近いように見えるため/etc/sysctl.conf
、modify およびrun などの操作を行う必要がありますsysctl -p
。のfs.file-max
パラメータの値を見てください/etc/sysctl.conf
。
実行中のプロセスの制限を変更するには、ユーティリティコマンドを使用できますprlimit
。
prlimit --pid 12345 --nofile=1024:1024
内部で行うことはを呼び出すことsetrlimit(2)
です。prlimitのマニュアルページには、有用な呼び出し例が含まれている必要があります。
ソース:https : //sig-io.nl/posts/run-time-editing-of-limits-in-linux/
too many files open
エラーを生成していたPythonプロセスが長時間実行されていました。あなたの答えは、プロセスを停止することなく私の問題を解決しました。
少なくともLinuxでは、ほとんどのディストリビューションは認証にpamを使用しているようです。PAMに付属するモジュールの1つに制限モジュールがあります。pam_limitsのREADMEから引用:
The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. Users of uid=0 are affected by this limits, too.
その結果、ユーザーごと、グループごと、およびデフォルトの制限を、ハード制限(ルートはこれを設定し、プロセスはそれ以上要求できない)とソフト制限の両方で設定できます。通常、ソフト制限はハード制限よりも低く設定されており、アプリはハード制限に達するまで上に引き上げることができます。
あなたの場合、プロセスを制限したい場合、通常のユーザーとして実行の制限を増やして、そのユーザーまたはグループの制限を増やすことができます。例として、追加のファイルハンドルを開く必要がある一部のサーバーにmysql cronジョブがあるため、これを設定します。
$ cat /etc/security/limits.d/mysql.conf
@mysql soft nofile 100000
@mysql hard nofile 200000
再起動する必要があるものはありません。そのユーザーにsuすると、新しい制限が有効になることがすぐにわかります。
典型的なRedHat派生システムを使用している場合にできるもう1つのことは、必要なulimit呼び出しを/ etc / sysconfig / $ SERVICEスクリプトに入れることです。例として、Apacheのinitスクリプトは/etc/init.d/httpdと名付けられ、/ etc / sysconfig / httpd構成ファイルが見つかった場合はそのソースとなります。rpmがアップグレードされると初期化スクリプトが更新されるため、初期化スクリプト自体を編集する代わりにこれを行うことで管理が容易になりましたが、sysconfigファイルはデフォルトから変更されていない場合にのみ更新されます。