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

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

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して設定を再ロードし、サービスを再起動します。

おすすめ記事