調査をするときに使うが、毎回忘れてしまうので自分用にメモ
statファミリーまとめ
dstat
美しい! 目で見るならこれ。
最も役に立つ参考サイト:http://qiita.com/harukasan/items/b18e484662943d834901
vmstat
メモリやCPUを見る時に使う。
iostat
ディスクIOを見るときに使う。
netstat
ネットワークの状態を見るときに使う。
カーネルチューニングとKVS設定
net.core.somaxconn
TCPのmax connection数。
参考サイト:http://d.hatena.ne.jp/tetsuyai/20111220/1324466655
例えばmemcacheやRedis等のKVSを使うときは、memcachedのtcp_backlogや、Redisのmaxclientsの数値以上にあげたほうがいい。
Redis はソースコード中に listen バックログの値を511と記述されてるので、それ以上引き上げる場合はコードをいじって再コンパイルしないとダメ。
net.core.somaxconn を引き上げたほうがいいかどうかは、netstat -s をやって "XYZ times the listen queue of a socket overflowed" みたいな行を見ればいい。
listen backlogがオーバーフローしている場合は、この数値が高くなる。
net.ipv4.tcp_keepalive_time
- net.ipv4.tcp_keepalive_time
- net.ipv4.tcp_fin_timeout
CLOSING状態でFINに対するACKを受信すると、そのままTIME-WAITとなる。FIN-WAIT-2状態でFINを受信すると、ACKを返信し、TIME-WAITとなる。
短くするとTIME_WAITを減らす効果がある。
netstat -na | grep CLOSE_WAIT | wc -l で、CLOSE_WAITがどのくらいあるかを確認して調整すると良い。
net.ipv4.ip_local_port_range
ポートレンジを増やす。これを増やさないと大量の接続は捌けないので、みんなよく設定する値。
よく調べるのは、tcpのコネクション数を調べる下のコマンド
netstat -an | grep tcp | wc -l
この数値と、cat /proc/sys/net/ip4/ip_local_port_range をニラメッコすると、ポート枯渇していないかが確認できる。
色んな設定
-
net.ipv4.tcp_window_scaling = 1 # TCPウィンドウスケーリングを有効にする
-
net.ipv4.tcp_moderate_rcvbuf=1 # 受信バッファ・サイズの自動チューニングを有効にする
-
net.core.netdev_max_backlog=2000 # カーネルの処理速度よりも早くキューが詰まれる場合の、最大個数
-
net.core.tcp_max_listen_backlog=2000 # SYN→ACKまでの状態のコネクション(listenソケット)をいくつ保持するか
-
tcp_mem # tcpに割り当てていいメモリ上限を当てる。高いほうがいい。
-
net.ipv4.tcp_wmem
-
net.ipv4.tcp_rmem
-
net.core.wmem_max
-
net.core.rmem_max
こいつらはそんなに意識する必要が無さそう?