ネットワーク開発の注意事項
2265 ワード
自分でserverを実現する時、必ずカーネルTCPに関するパラメータを調整してこそ、システムのスループットを最適にすることができます。接続を確立するスループット、ネットワークIOスループット、および接続をオフにする処理が必要です。
接続を確立
私達は性能テストをする時、機械のハードウェアの配置がとても良いことを発見するかもしれませんが、合併数をどのように調整しても、マシンのロードは全然上がりません。このような場合は、オペレーティングシステムが接続を確立してボトルネックになります。接続を確立する3回の握手の間、Linuxカーネルは2つのキューに使用される:未完成の列はSYN_にあります。RECV状態のsocketキュー はすでにキューを完成しました。ESTABLISHEDにありますが、acceptが適用されていません。
二つのパラメータを調整したいです。 net.ipv 4.tcp_max_syn_backlog キューの最大長さが未完成で、20480に設定することが推奨されています。 net.co re.somaxconn 完了した列の最大長さは20480に設定することを推奨します。 システムは上の二つの構成についての標準値が小さいです。200以上しかありません。自分でServerを開発するなら、この二つの構成を修正しなければなりません。sbin/syssctl-a grep xxxで確認できます。修正後、syssctl-pがカーネルパラメータを再読み込みします。
listenメソッドのbacklogパラメータ
listen()に導入されたbacklogsを適用して、完成した列の長さを指定します。システムの値はminです。したがって、listenを呼び出した時に大きなbacklogs値が入ることを提案します。
アプリケーションがaccept()を呼び出しても、新しい接続が確立されても、完了したキューと未完成のキューは、容量の上限に達して、新しい接続を作成できません。
TCP書き込み
sendQが小さすぎると、ネットの出力スループットが上がりません。tpsも上がりません。スライドウィンドウのサイズはエンドrecvQのサイズに制限されているので、recvQも小さすぎてはいけません。
/etc/syssctl.com nfにはいくつかのパラメータがあり、socketのsendQおよびrecvQのサイズを変更することができる。 net.ipv 4.tcp_rmem=4096 16777216/読み書き用バッファエリアmin default max を設定します。 net.ipv 4.tcp_wmem=4096 16777216 net.ipv 4.tcp_mem=196608 262144 393216/単位:ページ 接続を閉じる
修正/etc/syssctl.comにおける以下のパラメータは、 net.ipv 4.tcp_fintimeout自発的に接続を閉じる方はFIN_にいます。WAIT 2状態のタイムアウト時間は、端のFINカバンが届いていないため、FIN_uにあります。WAIT 2 net.ipv 4.tcp_tw_reuseは直接TIME_を再利用します。WAIT状態のsocket net.ipv 4.tcp_tw_recycle回収利用TIME_WAIT状態のsocketは、tcp_と分かりません。tw_reuseにはどんな違いがありますか? をsession Config.set Solinger(-1) に変更しました。
ツール
netstat-s
netstat-s列は、様々なネットワークイベントの回数を挙げています。中から手がかりを見つけることもできます。
接続を確立
私達は性能テストをする時、機械のハードウェアの配置がとても良いことを発見するかもしれませんが、合併数をどのように調整しても、マシンのロードは全然上がりません。このような場合は、オペレーティングシステムが接続を確立してボトルネックになります。接続を確立する3回の握手の間、Linuxカーネルは2つのキューに使用される:
二つのパラメータを調整したいです。
listenメソッドのbacklogパラメータ
listen()に導入されたbacklogsを適用して、完成した列の長さを指定します。システムの値はminです。したがって、listenを呼び出した時に大きなbacklogs値が入ることを提案します。
The behaviour of the backlog parameter on TCP sockets changed with Linux 2.2. Now it
specifies the queue length for completely established sockets waiting to be accepted,
instead of the number of incomplete connection requests. The maximum length of the
queue for incomplete sockets can be set using the tcp_max_syn_backlog sysctl. When
syncookies are enabled there is no logical maximum length and this sysctl setting is
ignored. See tcp(7) for more information.
accept()スレッドアプリケーションがaccept()を呼び出しても、新しい接続が確立されても、完了したキューと未完成のキューは、容量の上限に達して、新しい接続を作成できません。
TCP書き込み
sendQが小さすぎると、ネットの出力スループットが上がりません。tpsも上がりません。スライドウィンドウのサイズはエンドrecvQのサイズに制限されているので、recvQも小さすぎてはいけません。
/etc/syssctl.com nfにはいくつかのパラメータがあり、socketのsendQおよびrecvQのサイズを変更することができる。
修正/etc/syssctl.comにおける以下のパラメータは、
ツール
netstat-s
netstat-s列は、様々なネットワークイベントの回数を挙げています。中から手がかりを見つけることもできます。