すべてのプロセスのオープンファイル制限を増やす:ソフト/ハード制限を設定する必要がありますか?

すべてのプロセスのオープンファイル制限を増やす:ソフト/ハード制限を設定する必要がありますか?

1日2日ほどゲームサーバーを実行した後、以下のようなエラーが発生することを解決しようとします。

2017/12/13 12:08:35 http: Accept error: accept tcp [::]:8081: accept4: too many open files; retrying in 1s

/etc/sysctl.confに「fs.file-max=2000000」を追加して実行しました。

sysctl -w fs.file-max=2000000
sysctl -p

これでグローバル制限は更新されましたが(再起動する必要がありますか?)、ソフト制限とハード制限はまだ1024と4096です。

また、root ユーザーの「ファイルを開く」を確認するときは、次のコマンドを使用します。

su - root -c 'ulimit -aHS' -s '/bin/bash'

私も1024を受け取りました。

ソフト制限とハード制限の機能は何ですか?グローバル制限を適用するにはこれを変更する必要がありますか?ユーザー(ルート)の制限はどうですか?

ありがとうございます!

答え1

設定した制限は、sysctlシステム全体に適用されるシステム設定です。これは単一プロセスに適用される制限ではありません。

各プロセスは最大N個のファイルを開くことができます。ここで、NはプロセスのNOFILEソフト制限であり、ハード制限を超えないように独自のソフト制限を変更できます。ルートとして実行されるプロセスのみがハード制限を増やすことができます。プロセスは親プロセスの制限を継承します。

個々のサービスの制限を変更する方法(ユーザーが実行する必要がある作業)は、初期化システムによって異なります。

  • /etc/rc.d/init.dSysVinit(CentOS 6以下):デーモンを実行する前に呼び出されるようにサービスの初期化スクリプト(通常は常駐する場所)を編集し、ulimitサービスを再起動します。
  • Systemd(CentOS ≥7)の場合:編集サービス単位ファイル /etc/systemd/system/my_game_server.serviceそしてディレクティブを追加してください

    LimitNOFILE=16384
    

    次に、実行systemctl daemon-reloadして設定を再ロードし、サービスを再起動します。

答え2

で制限を変更できます/etc/security/limits.conf。適用するには、ログアウトして再度ログインしてください。

Hardlimit:特定のユーザーの境界 - 実行時にユーザーを増やすことはできず、減少のみが可能ですulimit -Hu 2000。ハード制限リスト:ulimit -Ha

ソフト制限:ユーザーが実行時に変更できるハード制限内の「ソフト」境界:ulimit -Su 10000ソフト制限リスト:ulimit -Sa

実行中のプロセスのulimitを変更しますprlimit -p $$ --nproc=1200:。これにより、現在のシェルのプロセス数が1200に変わります$$

答え3

次のように追加する必要があるファイルの制限番号/etc/security/limits.conf(特定のユーザーまたは全員)を変更できます。

username               soft    nofile          4096
username               hard    nofile          5120

これにより、開いているファイルの数が4096(ソフトリミット)に設定され、最大5120に設定されます。

この編集を行った後は、再度ログインしてサービスを再起動する必要があります。

私が覚えている限り、ulimitそのユーザーからログアウトするまで変更は適用されません。

関連情報