システム情報の取得
「サーバーが重い」から始まる調査
重いという報告だけでは、どこを直せばよいか決まりません。メモリが足りないのか、ディスクが埋まっているのか、そもそも別のホストを見ているのか。順番に確かめれば、数分で切り分けられます。
最初に、いま繋がっている相手が本当に目的のマシンかを見ます。ホスト名は hostname、ディストリビューションと版は cat /etc/os-release で分かります。似た名前のサーバーが並ぶ環境では、この一手間が誤操作を防ぎます。
メモリは used ではなく available を見る
ターミナル
$ free -h
total used free shared buff/cache available
Mem: 7.6Gi 1.8Gi 1.2Gi 12Mi 4.6Gi 5.5Gi
Swap: 0B 0B 0Bfree が 1.2Gi しかないと読んで慌てる必要はありません。buff/cache は、一度読んだファイルの内容を Linux が保持しているだけの領域で、アプリが要求すれば譲られます。実際に使える量は右端の available です。この例では 5.5Gi 空いているので、メモリ側は健全と判断できます。
空きが無いとき、消す前に場所を突き止める
ターミナル
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 47G 2.6G 95% /Use% が 90 を超えたら、書き込みが失敗し始める手前です。ここで慌てて消しにかかると事故になります。先に、どこが太っているかを上の階層から順に絞り込みます。
ターミナル
$ du -sh /var/* 2>/dev/null | sort -h | tail -3
1.2G /var/lib
2.1G /var/cache
12G /var/logdu -sh は指定した場所の合計を出します。sort -h は 1.2G と 900M を単位込みで正しく並べ替える指定です。太っている枝が分かったら、同じことをその中で繰り返し、原因のファイルまで降りていきます。
行き着いたら、消す前に必ず ls -lh で日付と大きさを見てください。確かめる観点は次の通りです。
- ローテーション済みの
.gzなど、再生成される種類のファイルか - 更新日時が古く、いま書き込まれている最中ではないか
- アプリが動作中に必要とする一時ファイルではないか
削除は、まとめてではなく対象を 1 つずつ指定して行います。ワイルドカードでまとめて指定すると、意図しないファイルまで含まれます。なお、動いているプロセスが開いたままのファイルは、消しても空きが戻りません。その場合は、書き込んでいるサービスを再起動する必要があります。
古い記事に出てくる
ifconfigやnetstatは、多くのディストリビューションで既定では入っていません。いまはipとssを使います。
課題
- uname -s で OS 種別を出す
- uptime の出力行数を wc -l で確認する