概要
負荷試験やサービスが重くなっている時にチェックしたほうがいい項目を挙げてみました。
環境
- Ubuntu 14.04
チェック項目
疎通できているか確認
AWSだとデフォルトだとpingが通らないのでnc
コマンドを使います。
$ nc -z 192.168.1.10 27017 Connection to 192.168.1.10 port 27017 [tcp/*] succeeded!
メモリの量(Total、Swap)を確認
$ free total used free shared buffers cached Mem: 2050028 169268 1880760 688 14840 64408 -/+ buffers/cache: 90020 1960008 Swap: 0 0 0
- usedが多くてもbuffers/cachedが多ければ大丈夫
free
が示すのはVIRT
なのでmallocやJVMでのヒープ確保している分も含む- 一方
top
の%MEM
はRES/Totalの物理メモリなので確保が大きい場合は差がでる
チェックしたいプロセスの環境変数を確認
$ strings /proc/{pid}/environ
設定したはずの環境変数が反映されているかの確認ですね。
file descrypterの数を確認
$ cat /proc/{pid}/limits
Too many open files
と怒られないように。
現在のTCPコネクション数
$ ss -s Total: 80 (kernel 0) TCP: 7 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 0 0 0 UDP 18 10 8 TCP 7 4 3 INET 25 14 11 FRAG 0 0 0
コネクション数で頭打ちになっていないかの確認。
使用可能なローカルポート数の確認
$ sudo sysctl -a | grep port_range
前述のTCPで詰まっている場合、原因となりうる部分。
現在LISTENしてるプロセス、ポート
$ sudo ss -ltp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:52536 *:* users:(("rpc.statd",739,8)) LISTEN 0 128 *:sunrpc *:* users:(("rpcbind",685,8)) LISTEN 0 128 *:ssh *:* users:(("sshd",1453,3)) LISTEN 0 128 :::57084 :::* users:(("rpc.statd",739,10)) LISTEN 0 128 :::sunrpc :::* users:(("rpcbind",685,11)) LISTEN 0 128 :::ssh :::* users:(("sshd",1453,4))
topの高機能版dstat
$ sudo dstat -taplms --nocolor --top-cpu
以下簡単な説明とチェックポイント。
オプション | 説明 | チェックポイント |
---|---|---|
-t | 時間表示 | - |
-a | よく使うオプション詰め合わせ | cpuのus, wa |
-p | プロセス数 | blkが高いとI/Oボトルネック |
-m | メモリ使用率 | - |
-s | スワップ | 0じゃないとメモリ不足 |
-l | ロードアベレージ | CPU数以上だと負荷高い |
--nocolor | カラー表示オフ。単位をわかりやすく | - |
--top-cpu | 一番CPU使用しているプロセス | - |
詳細は以下