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.d
SysVinit(CentOS 6以下):デーモンを実行する前に呼び出されるようにサービスの初期化スクリプト(通常は常駐する場所)を編集し、ulimit
サービスを再起動します。Systemd(CentOS ≥7)の場合:編集サービス単位ファイル
/etc/systemd/system/my_game_server.service
そしてディレクティブを追加してくださいLimitNOFILE=16384
次に、実行
systemctl daemon-reload
して設定を再ロードし、サービスを再起動します。