はじめに
Linuxサーバでは今までディスク容量の確認くらいしか体験したことがなかったので、自分用に調査手法をまとめてみました。
用語
-
ロードアベレージ
- 単位時間あたりに待たされたタスク数。ロードアベレージが高い=平均して待たされたタスク数が多い、つまり負荷が高い。
- ロードアベレージが1以下であれば軽く、1〜3くらいだとやや重く、それ以上だとこれらがボトルネックの可能性が高い。
-
TCPコネクション 【TCP connection】 TCPセッション
- TCPで一対の機器が通信を開始する際に確立する論理的なデータ伝送路
- ポートは番号65535個しかないので、数万個のTCPコネクションが貼られている場合は分散のような対応をとる必要がある
ボトルネックの種類
- CPU使用率
- ディスクI/O
- メモリ使用量
- TCPコネクション
- 外的要因
切り分け方法
確認手順
- ロードアベレージが高くないかを確認する。(uptime, w, top等)
- 負荷原因がCPUまたはI/Oのどちらにあるか調査する。(sar, vmstat, iostat等)
- 特定のプロセスの負荷やメモリ使用率が大きいかどうかを調査する。(ps)
コマンド
ディスク・メモリの使用状況を調査
# ディスク使用状況
$ df -h
# メモリ使用状況
$ free
ロードアベレージが高くないかを確認
# ロードアベレージを確認
$ uptime
$ w
# ロードアベレージ/タスク状況/メモリー使用/スワップなどを確認。
$ top
負荷の原因がCPUまたはI/Oのどちらにあるか調査
# CPUやI/O負荷、スワップ、その他色々確認。
$ sar
# 仮想メモリの状況を確認
$ vmstat
# ディスクI/Oの状況を確認
$ iostat
# TCPコネクションを確認
$ netstat -an | wc -l
特定のプロセスの負荷やメモリ使用率が大きいかどうかを調査
$ ps aux
おまけ
linuxに手軽にCPU負荷をかける方法を記載しておきます!
1.yesコマンド
$ yes > /dev/null
⇒処理を停止させる場合は「Ctrl + C」
⇒1個だとあまり負荷はないので、ターミナルを複数立ち上げでyesコマンド連打もあり(&で繋ぐ)
2.opensslコマンドを使う
$ openssl speed -multi `grep processor /proc/cpuinfo|wc -l`
3.無限にgzipさせる
$ gzip -9 < /dev/urandom > /dev/null
⇒/dev/urandom:ランダムな文字列(乱数)を返す擬似デバイスファイル
⇒/dev/nulll:ブラックホールのようなイメージ。
:出力先として指定すると何も起こらないし、入力元として指定しても何も入ってこないファイル
参考
https://easyramble.com/linux-command-to-check-status.html
https://nishinatoshiharu.com/bottleneck-profiling/
https://qiita.com/hiro-d/items/c3f724cb3d377e21cd91
https://i-think-it.net/linux-cpu-stress-how-to/
https://qiita.com/k0kubun/items/8ab1dfa7c0359d8e618d
http://www.sakito.com/2012/06/linux.html