●システムの負荷の原因を切り分けるには
参考URL:サーバのボトルネックを調査する
参考URL:システムの負荷の原因を切り分ける方法
参考URL:load averageを見てシステムの負荷を確認する
参考URL:コマンドによる「負荷」の原因切り分け
サーバが重い時、下記の4つがボトルネックとなる場合が多いです。
●CPU高負荷調査
uptime
システムが実行されている時間を表示します。
w
誰がログオンしていて、何をしているかを表示します。
1行目はuptimeと同じものが表示されます。
top
実行中のプロセスをリアルタイムで表示します。「shift + p」でメモリ使用率(%CPU)順に並び替えることができます。
ps aux --sort -%cpu
実行しているプロセスをCPU使用率でソートして表示します。
-%cpuは、CPU使用率を降順で表示する、という意味です。
vmstat
システムのメモリ、プロセス、割り込み、ページング及びブロックI/Oに関する要約情報を収集して表示します。
この値が常に大きい場合、ディスクの読み書きが追いついていない可能性もあります。
また、vmstatコマンドの後ろに数字を付けると定期的に実行することができます。
vmstat 5 10とすると、5秒おきに10回結果が出力されます。
●メモリ高負荷調査
free -m
システムの空きメモリと使用済みメモリの量を表示します。
w
誰がログオンしていて、何をしているかを表示します。
ps aux --sort -%mem
実行しているプロセスをメモリ使用率でソートして表示します。
-%memは、メモリ使用率を降順で表示する、という意味です。
top
実行中のプロセスをリアルタイムで表示します。「shift + m」でメモリ使用率順に並び替えることができます。
ls -l /proc/<プロセスID>/cwd
参考URL:Red Hat Enterprise Linux 4: リファレンスガイド 5.3. /proc/配下のディレクトリ
topやpsでメモリ使用率が高いプロセスを特定後、詳細情報確認のために/proc/配下を確認します。
たとえば、cwdには「そのプロセスで現在動作しているディレクトリへのシンボリックリンク」が確認できます。
vmstat
システムのメモリ、プロセス、割り込み、ページング及びブロックI/Oに関する要約情報を収集して表示します。
この値が常に大きい場合、ディスクの読み書きが追いついていない可能性もあります。
また、vmstatコマンドの後ろに数字を付けると定期的に実行することができます。
vmstat 5 10とすると、5秒おきに10回結果が出力されます。
●ネットワーク高負荷調査
vnstat -i <ネットワークインターフェース> -l
ネットワークトラフィックを表示します。
参考URL:サーバのボトルネックを調査する
参考URL:システムの負荷の原因を切り分ける方法
参考URL:load averageを見てシステムの負荷を確認する
参考URL:コマンドによる「負荷」の原因切り分け
サーバが重い時、下記の4つがボトルネックとなる場合が多いです。
- CPU使用率
- メモリ使用量
- ディスクI/O
- TCPコネクション数
- ロードアベレージが高い
- CPU使用率がほぼ100%
- 「1. CPU使用率」
- スワップが発生している
- 「2. メモリ使用量」
- スワップが発生していない
- 「3. ディスクI/O」
- ロードアベレージが低い
- TCPコネクション数が多い
- 「4. TCPコネクション」
- TCPコネクション数が少ない
- 他のホストを疑う
●CPU高負荷調査
uptime
システムが実行されている時間を表示します。
$ uptime 15:37:02 up 1 day, 8:03, 3 users, load average: 0.37, 0.16, 0.0現在の時間、ログインユーザの数、load averageも家訓することができます。
w
誰がログオンしていて、何をしているかを表示します。
1行目はuptimeと同じものが表示されます。
$ w 14:03:26 up 27 days, 3:47, 1 user, load average: 1.11, 0.80, 0.73 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT foo tty7 tty7 日13 20days 1:51m 0.01s /opt/google/chrome/chrome --type=renderer --enable-crashpad --crash
top
実行中のプロセスをリアルタイムで表示します。「shift + p」でメモリ使用率(%CPU)順に並び替えることができます。
# top top - 16:02:58 up 27 days, 5:47, 1 user, load average: 0.98, 0.86, 0.77 Tasks: 536 total, 1 running, 535 sleeping, 0 stopped, 0 zombie %Cpu(s): 7.4 us, 4.9 sy, 0.0 ni, 69.7 id, 17.1 wa, 0.8 hi, 0.2 si, 0.0 st MiB Mem : 15775.8 total, 161.1 free, 5763.7 used, 9851.1 buff/cache MiB Swap: 8048.0 total, 4942.4 free, 3105.6 used. 9513.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1018925 zabbix 20 0 94960 26200 7516 D 22.5 0.2 0:00.68 rpm 999054 root 20 0 0 0 0 I 11.9 0.0 1:11.35 kworker/u8:4-xfs-cil/dm-0 3782714 zebra 20 0 3963060 201144 70704 S 3.6 1.2 56:52.70 gnome-shell「1(数字のイチ)」でCPUコアごとの使用率(画面上部に表示)を表示することができます。
top - 16:41:52 up 27 days, 6:26, 1 user, load average: 1.13, 0.66, 0.64 Tasks: 537 total, 2 running, 534 sleeping, 0 stopped, 1 zombie %Cpu0 : 2.7 us, 3.0 sy, 0.0 ni, 88.6 id, 5.4 wa, 0.3 hi, 0.0 si, 0.0 st %Cpu1 : 1.7 us, 10.0 sy, 0.0 ni, 67.7 id, 14.7 wa, 2.7 hi, 3.3 si, 0.0 st %Cpu2 : 3.3 us, 4.0 sy, 0.0 ni, 42.5 id, 49.5 wa, 0.7 hi, 0.0 si, 0.0 st %Cpu3 : 2.3 us, 13.4 sy, 0.0 ni, 63.8 id, 18.8 wa, 1.3 hi, 0.3 si, 0.0 st PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 756237 zebra 20 0 13.9g 643732 101732 S 1.0 4.0 10:09.46 /usr/share/teams-insiders/teams-insiders --type=renderer --+ 114926 zebra 20 0 3711324 420956 138192 S 1.0 2.6 9:30.87 /usr/lib64/thunderbird/thunderbird 4628 root 20 0 1118216 366272 23844 S 0.0 2.3 3:21.18 /usr/libexec/packagekitd
ps aux --sort -%cpu
実行しているプロセスをCPU使用率でソートして表示します。
-%cpuは、CPU使用率を降順で表示する、という意味です。
# ps aux --sort -%cpu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 19357 0.8 0.5 194388 96128 ? SLsl 10月18 19:51 corosync root 1697 0.7 0.4 2580244 68776 ? Ssl 10月18 18:25 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start zebra 6391 0.4 0.9 4584660 151216 ? Sl 10月18 10:48 /usr/bin/gnome-shell mysql 2681 0.3 27.1 5543300 4416564 ? Sl 10月18 7:16 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plu
vmstat
システムのメモリ、プロセス、割り込み、ページング及びブロックI/Oに関する要約情報を収集して表示します。
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 2334308 325332 19412 10169788 2 3 144 540 4 3 2 2 93 3 0
- procs:プロセスに関する情報
- memory:メモリに関する情報
- io:ディスクアクセスに関する情報
- cpu:CPU使用率に関する情報
この値が常に大きい場合、ディスクの読み書きが追いついていない可能性もあります。
また、vmstatコマンドの後ろに数字を付けると定期的に実行することができます。
vmstat 5 10とすると、5秒おきに10回結果が出力されます。
$ vmstat 5 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 2333540 474248 19392 10103988 2 3 144 540 1 1 2 2 93 3 0 1 0 2333540 473576 19392 10104108 0 0 0 7 7777 15302 1 1 97 0 0 0 0 2333540 473220 19392 10104196 0 0 0 62 8158 15793 2 2 97 0 0 0 0 2333540 473492 19392 10104196 0 0 0 2 6739 12995 1 1 97 0 0 1 0 2333540 473544 19392 10104276 0 0 0 87 10731 20835 1 2 97 0 0 0 0 2333540 473088 19392 10104276 0 0 0 40 9395 18255 1 2 97 0 0 0 0 2333540 464660 19392 10108680 3 0 629 76 7784 15008 4 3 91 1 0 0 0 2333540 464492 19392 10108680 0 0 0 1 6858 13500 1 1 98 0 0 0 0 2333540 469416 19392 10108056 0 0 0 98 9171 17542 3 3 94 0 0 0 0 2333540 470336 19392 10108056 0 0 0 45 6053 11720 1 1 97 0 0
●メモリ高負荷調査
free -m
システムの空きメモリと使用済みメモリの量を表示します。
# free -m total used free shared buff/cache available Mem: 15885 7190 3184 144 5510 8215 Swap: 3967 8 3959
w
誰がログオンしていて、何をしているかを表示します。
$ w 14:03:26 up 27 days, 3:47, 1 user, load average: 1.11, 0.80, 0.73 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT foo tty7 tty7 日13 20days 1:51m 0.01s /opt/google/chrome/chrome --type=renderer --enable-crashpad --crash
ps aux --sort -%mem
実行しているプロセスをメモリ使用率でソートして表示します。
-%memは、メモリ使用率を降順で表示する、という意味です。
# ps aux --sort -%mem USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 2681 0.3 27.1 5543300 4416564 ? Sl 10月18 7:16 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plu tomcat 1586 0.1 5.0 7848704 822584 ? Ssl 10月18 3:03 /usr/lib/jvm/jre/bin/java -Djavax.sql.DataSource.Factory=org.apac named 2259 0.0 1.1 474572 179148 ? Ssl 10月18 0:03 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot
top
実行中のプロセスをリアルタイムで表示します。「shift + m」でメモリ使用率順に並び替えることができます。
# top top - 14:24:15 up 1 day, 6:51, 3 users, load average: 0.05, 0.10, 0.07 Tasks: 427 total, 1 running, 426 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.5 us, 0.4 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 16266504 total, 3245604 free, 7369712 used, 5651188 buff/cache KiB Swap: 4063228 total, 4055036 free, 8192 used. 8405844 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2681 mysql 20 0 5543300 4.2g 6592 S 0.3 27.2 6:00.68 mysqld 1586 tomcat 20 0 7848704 830008 10432 S 0.0 5.1 2:27.70 java 2259 named 20 0 474568 173832 3528 S 0.0 1.1 0:03.09 named
ls -l /proc/<プロセスID>/cwd
参考URL:Red Hat Enterprise Linux 4: リファレンスガイド 5.3. /proc/配下のディレクトリ
topやpsでメモリ使用率が高いプロセスを特定後、詳細情報確認のために/proc/配下を確認します。
たとえば、cwdには「そのプロセスで現在動作しているディレクトリへのシンボリックリンク」が確認できます。
# ls -l /proc/2681/cwd lrwxrwxrwx. 1 mysql mysql 0 10月 19 14:28 /proc/2681/cwd -> /var/lib/mysql
vmstat
システムのメモリ、プロセス、割り込み、ページング及びブロックI/Oに関する要約情報を収集して表示します。
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 2334308 325332 19412 10169788 2 3 144 540 4 3 2 2 93 3 0
- procs:プロセスに関する情報
- memory:メモリに関する情報
- io:ディスクアクセスに関する情報
- cpu:CPU使用率に関する情報
この値が常に大きい場合、ディスクの読み書きが追いついていない可能性もあります。
また、vmstatコマンドの後ろに数字を付けると定期的に実行することができます。
vmstat 5 10とすると、5秒おきに10回結果が出力されます。
$ vmstat 5 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 2333540 474248 19392 10103988 2 3 144 540 1 1 2 2 93 3 0 1 0 2333540 473576 19392 10104108 0 0 0 7 7777 15302 1 1 97 0 0 0 0 2333540 473220 19392 10104196 0 0 0 62 8158 15793 2 2 97 0 0 0 0 2333540 473492 19392 10104196 0 0 0 2 6739 12995 1 1 97 0 0 1 0 2333540 473544 19392 10104276 0 0 0 87 10731 20835 1 2 97 0 0 0 0 2333540 473088 19392 10104276 0 0 0 40 9395 18255 1 2 97 0 0 0 0 2333540 464660 19392 10108680 3 0 629 76 7784 15008 4 3 91 1 0 0 0 2333540 464492 19392 10108680 0 0 0 1 6858 13500 1 1 98 0 0 0 0 2333540 469416 19392 10108056 0 0 0 98 9171 17542 3 3 94 0 0 0 0 2333540 470336 19392 10108056 0 0 0 45 6053 11720 1 1 97 0 0
●ネットワーク高負荷調査
vnstat -i <ネットワークインターフェース> -l
ネットワークトラフィックを表示します。
$ sudo dnf install -y vnstat $ vnstat -i enp3s0 -l Monitoring enp3s0... (press CTRL-C to stop) rx: 6.88 kbit/s 11 p/s tx: 5.66 kbit/s 9 p/s^C enp3s0 / traffic statistics rx | tx --------------------------------------+------------------ bytes 1.09 GiB | 20.65 MiB --------------------------------------+------------------ max 488.22 Mbit/s | 7.92 Mbit/s average 55.54 Mbit/s | 1.03 Mbit/s min 1.33 kbit/s | 1.42 kbit/s --------------------------------------+------------------ packets 798735 | 295765 --------------------------------------+------------------ max 41520 p/s | 14760 p/s average 4754 p/s | 1760 p/s min 2 p/s | 2 p/s --------------------------------------+------------------ time 2.80 minutes