[TOC]
圧力測定およびパフォーマンス分析におけるいくつかの経験をnginxの
圧力測定におけるいくつかの経験をnginxの
NICの帯域幅を見て、NICキュー
-
ギガビットイーサネット圧力nginxの性能を測定するための単一のマシン、帯域幅のボトルネックがあるでしょう、CPUと帯域幅を観察するために、この時間は、CPUは完全な検出を実行しなかった、Siがいっぱいではありませんが、NICの帯域幅のトラフィックは、ギガビットのボトルネックに達していますNICによると、この小さなBはなく、大B;次いで、ギガビットイーサネットの理論的な上限は、128メガバイト/秒であるが、様々な要因に起因して、しばしば困難128に到達するが、110メガバイト/秒以上に一般的に既にボトルネックであります。
-
カードに基づくギガビットイーサネットは、これに基づいて、ボトルネックとなり、その後、nginxのHTTPのWebサーバとして:
- 0キロバイト、QPS = 48ワット(200を返します)
- 0キロバイト、QPS = 29ワット(302を返します)
- 図1Bに示すように、QPS = 23ワット
- 1キロバイト、QPS = 9ワット
-
nginxの直接リターン200と302を返し、差額のQPSロット(ギガビットイーサネットベース)
- ギガビットイーサネットでは、QPS 48ワット、200を返し、QPS 29ワット、302を返します。データの量がNICをボトルネックため、トラフィックの存在しない第二の処理要求にあまり得られ、その結果、大きくなるように302の結果を返すように応答を返したためであります
-
-
測定された圧力側は後の4ギガビットイーサネットNICを持っている場合は、カードの流れ側に圧力をかけるがボトルネックに行き、今度はあなたが最後に圧力を調整する必要があります。
-
4 NIC結合、短い接続ときに測定された圧力は、100%のSIを有することが見出された、カードが結合リピートを説明するが、CPUの固定数です。
- カードの再バインドが繰り返されませんでした後、Siが改善している、全体的なパフォーマンスが若干改善しました
-
現場で24核単一、単一のギガビットイーサネット、最初のNICのボトルネック、次のシーン4ギガビット・イーサネット・カード、CPUのSIソフトブレークのボトルネック。
-
ソフト中断、問題の包頭ソリューションは、パケット・データ・レベルをチェックしているため、圧力測定時間は、大きな袋に注意を払う、パケットのためのさまざまな治療法の小さなパケットは、CPUの消費量は、よりになります。SARの、一般的には、rxpck / sおよびtxpck / sの唯一のボトルネックをすることなく、データに焦点を当てる必要があります、ボトルネックはCPUの上に構築され所見;およびrxkB /秒に焦点を当てる必要とtxkB / sの、このNICは、トラフィックの帯域幅制限を決定します。だけでなく、サーバーを観察するために、クライアントは、ボトルネックがあるかどうか(CPU、ネットワークカードの帯域幅)、エラー条件などによって異なります
ウォッチnginxのCPUの消費量が均一です
-
通常の場合、各作業者のCPU消費がnginxのが均一であるべきで処理し、10%以上、さらに20%以上の差ならば、不均一なCPU消費の問題が存在しなければなりません。nginxのが原因accept_mutexの閉鎖に、CPUの現在のバージョンが不均一になります、通常は、各ワーカー・プロセスはすべて、同じCPUの消費量であるべきであるかのオープンaccept_mutex上、均等にいくつかのnginxのワーカープロセスの前に。
-
最良の姿勢はreuseportを開くことですが、これは注意とダイナミックアップストリームで使用される必要があり、または頻繁にリロードがRSTが多数になります。
ハイパースレッディングCPUの注意
- 無効、nginxの単一プロセスの場合には、ハイパースレッディングCPUを有効にし、有意差は存在しません
- 圧力測定時間は、ハイパースレッディングをオフにするかどうか、有意な差はありません
より多くの単一のインスタンスに関係
- そこに限界に達したりした後、またはスタンドアローンのマルチインスタンスとしてスタンドアロンのシングル・インスタンスのパフォーマンスのボトルネックの後、改善しなかった。何のスタンドアロンのシングル・インスタンスのパフォーマンスのボトルネックが存在しない、あなたはマルチインスタンスのパフォーマンスを向上させることができます
エンド押す懸念
-
圧力試験は、パフォーマンスの変曲点を見つけるためにするとき、あなたは最高のパフォーマンスの変曲点を見つけるまで、ボトルネックに直面して、あなたはまた、コールバックする必要がある場合。
-
長いスレッドの数、同時の数が多すぎると、WRKに接続する場合は、ワーカープロセスは、パフォーマンスが低下する可能性がnginxの唯一の時間を作るだろう、短時間プロセス、システムパラメータnet.ipv4.tcp_tw_recycle WRK最後は1に設定しますそれ以外の場合は接続エラーの数があるでしょう、ポート多重化をしましょう
-
したがって、プロセスは、圧力が圧力側(スレッド、同時の数の数)が減少する、増加させる、nginxのデータサーバを観察し、その後、最良のパフォーマンスデータを取得することです
-
-
WR圧力が上がる?行かないのはなぜか?CPUのボトルネック、またはメモリのボトルネック?CPU場合は、より多くのCPUを与えるためにどのように?もちろん、スレッドの数。しかし、また、スレッドとコアCPU圧力側の試合の数。
- スレッドを参照してください-H最高のパフォーマンスを最大化するように、各スレッドがいっぱい走った場合、各スレッドは、最も高い圧力を提供することができないである、あなたは、パフォーマンスを最大化WRKことができない、、、上で実行したくありませんでした。各スレッドが轢かが、QPSまたは増加しないしなかった場合、nginxのは、ここでは、パフォーマンスの問題です。
圧力を測定する際の指標が観測されなければなりません
CPUの【トップ】
トップ、CPUの消費量を観察するだけでなく、各CPUコアの数を観察するために、100%にSI、SI、当該ソフト割り込みデータは、問題を抱えています
LANの帯域幅[SAR -n DEV 1 100 |グレップのEM1]
SAR -n DEV 1100 | grepをEM1
ネットワークカードの帯域幅がボトルネックかどうかを確認するために、NICの帯域幅を観察
パケットロスなどがある場合はifconfigは、見ることができます。
でも毎秒建て[netstatの-s | grepのアクティブ]
netstat -s |grep active
6262441249 active connections openings
复制代码
netstat -s |grep active
アクティブな接続の現在を取得して、違いをすることができません。
5W QPS短い接続がある場合、その後、毎秒偶数を内蔵短い上流の接続は、10Wの周りでなければなりません
[] Ssが接続キューを-lnt
SS -lnt
SSの-lnt |グレップの-E ":6001 |:6002"
State Recv-Q Send-Q Local Address:Port Peer Address:Port
复制代码
-
リスニングステートのソケット(鑑賞)場合には、
- RECV-Qは、SYNのバックログの現在の値を表しています。
- 送信-QのSYNのバックログが最大値を意味します。
-
接続キューは、システム構成のnginxのを調整する必要が小さすぎる場合、および
ディスクIO
nginxのは、いくつかの経験をチューニング
nginxのパフォーマンス指標
関連の基本的な指標:
-
秒あたりに処理nginxの要求(すなわち:: QPS)秒あたりの要求(RPS)
-
HTTP要求のRPS:秒あたりに処理要求のHTTP nginxの数
-
HTTPS要求のRPS(毎秒SSL / TLS取引)(TPS):毎秒nginxの治療HTTPS要求
-
サイズは100キロバイト異なる状況を示す--1--10 - 0はデータに応じてフォロー
- 0キロバイトは、リターン・エラー・コード302のように、空のHTTP応答を示します
-
-
秒当たりの接続数(CPS):秒あたりに処理nginxの新しい接続要求
- HTTPとHTTPSを含みます
-
スループット:データスループットのボリューム容量の大きさ、反応はnginxの扱うことができます
-
レイテンシー:遅延と遅延分布
その他の問題:
-
1からのCPUコア数を見る - nは、nginxのパフォーマンス性能
-
nginxのは、さまざまな症状のウェブサーバの役割やリバースプロキシを懸念しています
-
時には同時の数と呼ばれる接続、それは同時サービス要求の数を指します。これは、すでに要求(リクエスト)を送信してきたが、まだ完全な応答(レスポンス)要求の数を受信していない人たちです。
nginxのは、パラメータを調整する必要があります
nginxのは、パラメータを調整する必要があります。
worker_processes auto;
worker_rlimit_nofile 10240;
worker_connections 10240;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300s;
keepalive_requests 1000000;
复制代码
推奨パラメータ調整:
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
复制代码
Linuxシステムは、パラメータを調整する必要があります
接続追跡パラメータ
一般的に、パフォーマンスに影響を与えるには大きすぎるバレルを防ぐために、1/4または1/2 nf_conntrack_maxをnf_conntrack_buckets、200ワットにnf_conntrack_max設定。
[[email protected] ingress]$ cat /proc/sys/net/netfilter/nf_conntrack_buckets
524288
[[email protected] ingress]$ cat /proc/sys/net/netfilter/nf_conntrack_max
2097152
复制代码
バックログキュー
-
net.core.somaxconn
- 接続の最大数は、nginxのが受け入れるキューに入れることができます。一般的に小さすぎるnginxのパフォーマンスの問題が生じた場合は、カーネルを表示することができますが、状態を発見したログ
- 一緒にnginxのを調整するための指示には耳を傾けます。
-
net.core.netdev_max_backlog
- CPUカードの前にレート・バッファに送信されたパケットは、この値は、機械の性能を改善するために増加し、高い帯域幅を有することができます
echo 32768 > /proc/sys/net/core/somaxconn
echo 819200 > /proc/sys/net/ipv4/tcp_max_syn_backlog
复制代码
ファイルディスクリプタ
-
sys.fs.file-MAX
- Linuxのファイルシステムは、説明の最大数を可能に
-
NOFILE
- ファイル記述子の最大数は、一般的な設定は、アプリケーションレベルの許可
/etc/security/limits.conf
ファイル
- ファイル記述子の最大数は、一般的な設定は、アプリケーションレベルの許可
ポートの変更を/etc/sysctl.confを、施行され、その後のsysctl -pエントリ
-
net.ipv4.ip_local_port_range
- ポートのポート範囲
-
圧力測定終了、もし短いリンク
- net.ipv4.tcp_tw_reuse = 1
- これは、開いているポートの多重化を表します。TIME-WAITソケットは、新しいTCP接続のために再使用できるように、デフォルトではオフを示し、0です。
- net.ipv4.tcp_tw_recycle = 1
- それは、デフォルトは0で、オープンTCP接続のTIME-WAITソケットの急速な回復をオフに表します。
- net.ipv4.tcp_tw_reuse = 1
NICキュー、CPUソフト割り込みSI
-
20-24核スタンドアローン、シーン、最初のNICのボトルネックの一つのギガビットイーサネット、次のシーン4ギガビット・イーサネット・カード、CPUのSIソフトブレークのボトルネック。
-
4 NIC結合、短い接続ときに測定された圧力は、100%のSIを有することが見出された、カードが結合リピートを説明するが、CPUの固定数です。カードの再バインドが繰り返されませんでした後、Siが改善している、全体的なパフォーマンスが若干改善しました
-
CPUのアイドルには問題ありませんゼロ、Siのみを100%は問題があるでしょうです
- 100%にSI、ソフト割り込み処理の数が多い、この時、ノートカードやCPUバウンドソフト割り込みでCPUこのややボトルネック。NICキューまたは十分ではありません、またはあまりにもCPUコアである、または反復プロセスのCPUカードキューとバインディングのcpusetです。
[「:う積極的に公共のマイクロチャンネル数でのLinuxサーバーシステムの開発、品質の記事を送り返す私は公共のマイクロチャネル番号の関心を歓迎します」]