KUSANAGI にインストールされている保守向けコマンド(top編)

大曲仁

本記事では、サーバの負荷とプロセスの状況をリアルタイムで把握するためのコマンド、topコマンドの活用法を解説します。コマンド実行結果から負荷状況を判断し、問題があれば具体的な対処法、アクセス制限やデータベースの最適化、キャッシュの有効化などを提示。また、メモリ状況の確認方法や、メモリ設定が過剰となっていないかの確認方法も紹介します。効果的なサーバ運用を目指す方へ、必読の内容となっています。

前回は、sar コマンドでサーバ全体の負荷状況の把握とボトルネックの洗い出し方法について解説いたしました。今回は、CPUの負荷と動作しているプロセスの状況を同時に把握できる top コマンドの確認すべき点と対応方法について解説します。

topコマンド

topコマンドは、サーバの負荷とプロセスの状況を把握するためのコマンドです。コマンドを打つと一定時間ごとに表示が刷新されるのでリアルタイムでの状況と推移を把握するのに適したコマンドです。

top - 15:13:32 up 163 days, 20:34,  3 users,  load average: 0.97, 0.61, 0.41
Tasks: 187 total,   1 running, 185 sleeping,   0 stopped,   1 zombie
%Cpu(s): 49.7 us, 11.9 sy,  0.0 ni, 36.5 id,  0.5 wa,  0.7 hi,  0.7 si,  0.0 st
MiB Mem :   7955.8 total,   2774.2 free,   2516.5 used,   2665.1 buff/cache
MiB Swap:   4096.0 total,   3511.4 free,    584.6 used.   4611.6 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 866731 root      20   0   32.7g 430660 147476 S  16.9   5.3   0:57.39 chrome
 768157 httpd     20   0 1565996 417804 347308 S  12.0   5.1   1:40.59 php-fpm
 868855 httpd     20   0 1561068 379240 314008 S  11.6   4.7   0:04.57 php-fpm
 871942 httpd     20   0 1188120 240580 184896 S   8.3   3.0   0:01.02 php-fpm
 767751 httpd     20   0 1560572 414344 349528 S   6.6   5.1   1:39.92 php-fpm
 860809 httpd     20   0 1192512 356496 295948 S   6.6   4.4   0:11.03 php-fpm
 865149 httpd     20   0 1184496 344548 292084 S   6.6   4.2   0:06.89 php-fpm
 621352 root      20   0   11.0g 206136  42448 S   6.0   2.5  28:08.36 node /usr/lib/w
 643287 mysql     20   0 3284700 399868  10788 S   4.7   4.9 102:04.48 mariadbd
 621509 httpd     20   0  465496  89972  26716 S   3.3   1.1  23:26.63 nginx

確認すべき点と対処

topコマンドで注目してほしいのは、load averageプロセスの%CPU値です。load average は、3つの数値が表示されており、右から直近の5分間、10分間、15分間のプロセス待ちの平均数を表しています。load average値が大きいほど負荷が大きいということになりますが、CPUのコア数が多ければその分処理可能なプロセスも増えますので、指標としては、load average値 / CPUコア数の値が1を超える場合、要求が処理能力を上回っていると言えます。このような状況が継続し、なおかつload average値が上昇傾向にある(表示が更新される度に数値が上がっていく)場合は、負荷を低減させるための対処を図る必要があります。

デフォルトでは、%CPU(CPU占有率)の多い順にプロセスが表示されているので、上に表示されているプロセスを削減または低減できれば、それだけリソースの余裕が生まれやすいことになります。
具体的には、以下の優先度に従って対処を模索することが望ましいです。

  1. アクセスログのユーザーエージェント、アクセス元IPを確認し不要なアクセス(Botやスクレイピングツールによるもの)が多くを占める場合は、それらのアクセス制限。
  2. データベース負荷が大きい(プロセスのリストにmariadbdがあり%CPU値が100を超える)場合、データの削減、クエリ・インデックスの最適化の実施。
  3. キャッシュの有効化、最適化。
  4. サーバリソースの増強(スケールアップ、スケールアウト)

サーバのリソース増強は、お手軽な対処方法ではありますが、それだと運用上不要な処理やボトルネックが残ったままになってしまったり、当然ながら増強した分のサーバ費用はかかってきますので、最終手段にすべきです。
ただし、データベースやキャッシュの最適化はすぐに対処できるとは限りませんので、サーバリソースの増強で暫定的な対処を行い、データベース、キャッシュの最適化で負荷を下げられた段階で、サーバリソースを元に戻すことは1つの手段といえます。

メモリ状況の確認

topコマンドでメモリの状況も確認することができます。コマンド実行結果の中の「MiB Mem」から始まる2行の部分がメモリの状況に関する数値です。この中で重要なのはavail Memの数値で、これが割当可能なメモリ領域を表しています。この数値が枯渇するとSwapが発生し、動作が劇的に遅くなるので注意が必要です。
このような場合には、以下の優先度で対処検討すると良いでしょう。

  1. PHPやDBのメモリ設定が過剰となっていないか確認する。
  2. PHPの起動プロセス数で余剰なものがないか確認する。
  3. サーバのスケールアップを行いメモリ搭載量を増やす。

なお、topコマンドでは、メモリの占有率を表す%MEMの降順にソートすることが可能です。%MEM順の表示に切り替えるには、topコマンドを実行した後、Shift + mキーで%MEM順でのソート、Shift + pキーで%CPU順の元に戻すことができるようになっています。

<< KUSANAGI にインストールされている保守向けコマンド(sar編)KUSANAGIでプロキシサーバの設定を行う >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解