Linuxカーネル調整

システムがより大きな同時接続をサポートできるようにするためには、必ずイベント拡張をインストールした上で、Linuxカーネルの最適化も非常に重要です。以下の最適化各項目は非常に重要なので、必ず順番に実施してください。

パラメーターの説明:

max-file: システム全体で開くことができるファイルハンドルの数を示します。これはOS全体に対してのものであり、ユーザー単位ではありません。

ulimit -n: プロセスレベルで開くことができるファイルハンドルの数を制御します。現在のshellの現在のユーザー及びその起動したプロセスの有効なファイルハンドルを制御します。

システムレベルで開くことができるファイルハンドルの数を確認する: cat /proc/sys/fs/file-max

ファイル /etc/sysctl.conf を開き、以下の設定を追加します。

#このパラメーターはシステムのTIME_WAITの数を設定します。デフォルトの値を超えると即座にクリアされます。
net.ipv4.tcp_max_tw_buckets = 20000
#システム内の各ポートの最大リスニングキューの長さを定義します。これはグローバルパラメーターです。
net.core.somaxconn = 65535
#まだ相手の確認を得ていない接続リクエストで、キューに保存できる最大数
net.ipv4.tcp_max_syn_backlog = 262144
#各ネットワークインターフェースがデータパケットを受信する速度がカーネルがこれらのパケットを処理する速度よりも速い場合、キューに送られるデータパケットの最大数を許可します。
net.core.netdev_max_backlog = 30000
#このオプションによってNATネットワークのクライアントがタイムアウトします。値は0を推奨します。Linuxは4.12カーネルから tcp_tw_recycle 設定を削除しました。エラー"No such file or directory"が表示された場合は無視してください。
net.ipv4.tcp_tw_recycle = 0
#システムのすべてのプロセスが開くことができるファイルの総数
fs.file-max = 6815744
#ファイアウォールのトラッキングテーブルのサイズ。注意:ファイアウォールが起動していない場合は、error: "net.netfilter.nf_conntrack_max" is an unknown keyと表示されますが、無視してください。
net.netfilter.nf_conntrack_max = 2621440
net.ipv4.ip_local_port_range = 10240 65000

sysctl -pを実行すると、すぐに有効になります。

説明:

/etc/sysctl.confで設定可能なオプションは多数あり、他のオプションは自身の環境に応じて設定できます。

開いているファイル数

システムの開いているファイル数の設定を行い、高い同時接続による too many open files 問題を解決します。このオプションは、単一のプロセスが保持できるクライアント接続数に直接影響します。

Soft open filesはLinuxシステムのパラメーターで、システムの単一プロセスが開くことができる最大のファイルハンドルの数に影響します。この値は、チャットなどの長期接続アプリケーションが単一プロセスで維持できるユーザー接続数に影響します。ulimit -nを実行すると、このパラメーターの値が表示されます。もし1024であれば、単一のプロセスが同時に維持できるのは最大1024、場合によってはそれ以下(他のファイルハンドルがオープンされているため)です。4つのプロセスがユーザー接続を維持する場合、アプリケーション全体で同時に維持できる接続数は4*1024を超えることはなく、つまり最大でも4x1024のユーザーがオンラインであることをサポートできます。この設定を増やすことで、サービスがより多くのTCP接続を維持できるようになります。

Soft open filesを変更する3つの方法:

第一の方法:ターミナルで直接 ulimit -HSn 102400 を実行し、その後workermanを再起動します。

これは現在のターミナルにのみ有効で、終了するとopen filesはデフォルト値に戻ります。

第二の方法:/etc/profileファイルの末尾に ulimit -HSn 102400 を追加します。これにより、毎回ターミナルにログインする際に自動的に実行されます。変更後はworkermanを再起動する必要があります。

第三の方法:open filesの値を永久に有効にするには、設定ファイル/etc/security/limits.confを変更する必要があります。このファイルの最後に次を追加します。

* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000

この方法は、サーバーを再起動する必要があります。