地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【TCP】linuxで取れるtcpのメトリクスを理解していく記事

/proc/net/netstatを頑張って理解していく。ドキュメントないものをどうやって調べていくかはちょっと悩む...

netstat グラフに出てくる項目 概要
TcpExtSyncookiesSent tcp.syncookies.sent 送信されるSYNクッキーの数
TcpExtSyncookiesRecv tcp.syncookies.recv TCPスタックが受信するSYNCookieの応答パケットの数
TcpExtSyncookiesFailed tcp.syncookies.failed SYNCookieからデコードされたMSSが無効
TcpExtEmbryonicRsts tcp.misc_errors.embryonic_rsts SYN_RECV状態の接続に対して受信された無効なパケット
TcpExtPruneCalled tcp.misc_errors.prune_called 割り当てられたソケットを減らす試みで増加
TcpExtRcvPruned tcp.misc_errors.rcv_pruned ソケットに割り当てられたメモリを削減するための暫定的な失敗時に増加し、データがドロップされます
TcpExtOfoPruned tcp.misc_errors.ofo_pruned 構造体のアウトオブオーダーキューのクリーンアップ時に増加
TcpExtTW tcp.timewait.timewait
TcpExtTWRecycled tcp.timewait.recycled
TcpExtTWKilled tcp.timewait.killed
TcpExtPAWSPassive tcp.paws.passive タイムスタンプが開いたためにスレーブマシンのネットワークパフォーマンスが低下し、パケット損失が発生
TcpExtPAWSActive tcp.paws.active パケットは、Syn-SentステータスのPAWSによってドロップされます。
TcpExtPAWSEstab tcp.paws.estab パケットは、Syn-Sent以外のステータスでPAWSによってドロップされます。
TcpExtDelayedACKs tcp.delayed_acks.sent 遅延ACKタイマーが期限切れになります。 TCPスタックは純粋なACKパケットを送信し、遅延ACKモードを終了します。
TcpExtDelayedACKLocked tcp.delayed_acks.locked 遅延ACKタイマーは期限切れになりますが、ソケットがユーザースペースプログラムによってロックされているため、TCPスタックはすぐにACKを送信できません
TcpExtDelayedACKLost tcp.delayed_acks.lost TCPスタックがACKされたパケットを受信すると更新されます。遅延ACK損失はこの問題を引き起こす可能性がありますが、パケットがネットワークで重複しているなど、他の理由によってもトリガーされます。
TcpExtListenOverflows tcp.misc_errors.listen_overflows カーネルがクライアントからSYNを受信し、TCP受け入れキューがいっぱいになると、カーネルはSYNをドロップし、TcpExtListenOverflowsに1を追加
TcpExtListenDrops tcp.misc_errors.listen_drops リソース不足のためにドロップされたTCP接続の数
TcpExtTCPPrequeued tcp.queueing.prequeued
TcpExtTCPDirectCopyFromBacklog tcp.queueing.direct_copy_from_backlog
TcpExtTCPDirectCopyFromPrequeue tcp.queueing.direct_copy_from_prequeue
TcpExtTCPPrequeueDropped tcp.queueing.prequeue_dropped
TcpExtTCPHPHits tcp.header_prediction.hits
TcpExtTCPHPHitsToUser tcp.header_prediction.hits_to_user
TcpExtTCPPureAcks tcp.header_prediction.pure_acks パケットがACKフラグを設定し、データがない場合、それは純粋なACKパケットです。カーネルが高速パスでそれを処理する場合、TcpExtTCPHPAcksは1増加し、カーネルが低速パスで処理する場合、TcpExtTCPPureAcksは1増加します。
TcpExtTCPHPAcks tcp.header_prediction.acks パケットがACKフラグを設定し、データがない場合、それは純粋なACKパケットです。カーネルが高速パスでそれを処理する場合、TcpExtTCPHPAcksは1増加し、カーネルが低速パスで処理する場合、TcpExtTCPPureAcksは1増加します。
TcpExtTCPTimeouts tcp.timeout.timeouts
TcpExtTCPSchedulerFailed tcp.misc_errors.scheduler_failed
TcpExtTCPRcvCollapsed tcp.misc_errors.rcv_collapsed 「折りたたみ」中に解放されたskbの数
TcpExtTCPAbortOnData tcp.abort.on_data TCP層に送信中のデータがありますが、接続を閉じる必要があることを意味します。したがって、TCP層はRSTを反対側に送信し、接続があまり正常に閉じられていないことを示します。
TcpExtTCPAbortOnClose tcp.abort.on_close このカウンターは、アプリケーションがTCP接続を閉じたいときに、アプリケーションのTCPレイヤーに未読データがあることを意味します。このような状況では、カーネルTCP接続の反対側にRSTを送信します。
TcpExtTCPAbortOnMemory tcp.abort.on_memory アプリケーションがTCP接続を閉じるとき、カーネルは接続を追跡する必要があり、TCP切断プロセスを完了させます。例えば。アプリがソケットのcloseメソッドを呼び出し、カーネルが接続の反対側にfinを送信すると、アプリはソケットとの関係がなくなりますが、カーネルはソケットを保持する必要があります。このソケットは孤立したソケットになり、カーネルは待機します。
TcpExtTCPAbortOnTimeout tcp.abort.on_timeout このカウンターは、TCPタイマーのいずれかが期限切れになると増加します。このような状況では、カーネルはRSTを送信せず、接続を断念するだけです。
TcpExtTCPAbortOnLinger tcp.abort.on_linger TCP接続がFIN_WAIT_2状態になると、反対側からのfinパケットを待つ代わりに、カーネルはRSTを送信し、ソケットをすぐに削除できます。これは、LinuxカーネルTCPスタックのデフォルトの動作ではありません。 TCP_LINGER2ソケットオプションを構成することにより、カーネルにこの動作を実行させることができます。
TcpExtTCPAbortFailed tcp.abort.failed RFC2525 2.17セクションが満たされると、カーネルTCP層はRSTを送信します。このプロセス中に内部エラーが発生した場合、TcpExtTCPAbortFailedが増加します。
TcpActiveOpens tcp.sockets.active_opens 能動的に確立されたコネクションの数
TcpPassiveOpens tcp.sockets.passive_opens 受動的に確立されたコネクションの数
TcpAttemptFails tcp.sockets.attempt_fails コネクション確立に失敗した回数
TcpEstabResets tcp.sockets.estab_resets コネクションがリセットされた回数
TcpCurrEstab tcp.connections.estab 現在のTCPコネクション数
TcpInSegs tcp.segments.in_segs TCP層が受信したパケットの数
TcpOutSegs tcp.segments.out_segs TCP層によって送信されたパケットの数
TcpRetransSegs tcp.segments.retrans_segs 再送信されたセグメントの総数
TcpInErrs tcp.segments.in_errs フォーマットエラーのために破棄されたセグメント数
TcpOutRsts tcp.segments.out_rsts このカウンターは「RSTフラグを含む送信されたセグメントを示す