sar -n DEV 2 コマンドを実行して帯域幅とパケットを確認することができます。rxpck/sとtxpck/s 指標は送受信パケット、rxkB/sとtxkB/s 指標は送受信帯域幅です。/proc/net/softnet_statの二列目のカウント値の増加を検出した場合は、「ソフトウェア割り込みによるパケット損失」と判断することができます。インスタンスがソフトウェアの割り込みをトリガーしパケット損失が引き起こされた場合は、次の手順でトラブルシューティングを行い、対処することができます:
RPSが有効化されているかどうかを確認する:net.core.netdev_max_backlogが小さすぎるとパケット損失が引き起こされることから、大きくする必要があります。カーネルパラメータの詳細情報については、 Linuxインスタンスで一般的に使用されるカーネルパラメータの説明 をご参照ください。ss -nump コマンドを使用して UDP 送信バッファがフルかどうかを確認します。net.core.wmem_max と net.core.wmem_defaultを大きくし、UDP プログラムを再起動して有効にします。カーネルパラメータの詳細情報については、 Linux インスタンスで一般的に使用されるカーネルパラメータの説明 をご参照ください。ss -nump コマンドを使用して送信バッファが期待どおりに増大していないことを確認できます。この場合は、ビジネスコードがsetsockoptを介してSO_SNDBUFを設定しているかどうかを確認する必要があり、そうであれば、コードを変更して SO_SNDBUFを増大させてください。ss -nump コマンドを使用して UDP 受信バッファがフルかどうかを確認します。net.core.rmem_max と net.core.rmem_defaultを大きくし、UDP プログラムを再起動して有効にします。カーネルパラメータの詳細情報については、 Linux インスタンスで一般的に使用されるカーネルパラメータの説明 をご参照ください。ss -nump コマンドを使用して受信バッファが期待どおりに増大していないことを確認できます。この場合は、ビジネスコードがsetsockoptを介して SO_RCVBUFを設定しているかどうかを確認する必要があり、そうであれば、コードを変更して SO_RCVBUFを増大させてください。net.core.somaxconnおよび業務プロセスが listen を呼び出す時に渡される backlog パラメータの内の小さい方の値となります。インスタンスに TCP すべての接続キューがフルであることによるパケット損失が発生した場合は、次の手順で対処することができます:net.core.somaxconnを大きくします。カーネルパラメータの詳細情報については、Linux インスタンスで一般的に使用されるカーネルパラメータの説明 をご参照ください。net.core.rmem_max と net.core.wmem_maxによって制限されます。業務プログラムを調整すると同時に、 net.core.rmem_max と net.core.wmem_maxを同期的に調整することができます。調整後に業務プログラムを再起動し、設定を有効にします。net.ipv4.tcp_mem、net.ipv4.tcp_rmemおよび net.ipv4.tcp_wmemを大きくすることで TCP socket のレベルを調整することができます。
カーネルパラメータの修正については、 Linux インスタンスで一般的に使用されるカーネルパラメータの説明 をご参照ください。ssやnetstatコマンドを介して取得されたネットワーク接続数よりも大きくなります。iptables -L | grep policy
Chain INPUT (policy DROP)Chain FORWARD (policy ACCEPT)Chain OUTPUT (policy ACCEPT)
-P の後ろの値を変更します。iptables -P INPUT ACCEPT
Chain INPUT (policy ACCEPT)Chain FORWARD (policy ACCEPT)Chain OUTPUT (policy ACCEPT)
フィードバック