初めに
社内の勉強会でwebサイトのパフォーマンス改善のハンズオンを行いました。
その際にtopコマンドを知ったので備忘のためにアウトプットします。
参考にした記事
こちらの記事を参考にさせていただきました!
ありがとうございます!
topコマンドとは
topコマンドとは、サーバ全体の負荷を確認するコマンドのこと。
cpu使用率やメモリの使用率を確認することができる。
topコマンド実行してみた
実行はtopと打つだけでOK。
$ top
topコマンド実行結果
実行すると以下のような情報がリアルタイムで表示される
top - 22:32:31 up 13 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15868.3 total, 14949.8 free, 504.9 used, 413.6 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 15106.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
390 root 20 0 466596 77288 20280 S 0.0 0.5 0:02.41 python3.10
142 root 20 0 1614436 50832 18336 S 0.0 0.3 0:00.68 snapd
573 root 20 0 43756 37700 9920 S 0.0 0.2 0:01.62 python3
207 root 20 0 107216 21092 12864 S 0.0 0.1 0:00.03 unattended-upgr
136 root 20 0 30124 18912 10096 S 0.0 0.1 0:00.05 networkd-dispat
87 systemd+ 20 0 25260 12412 8472 S 0.0 0.1 0:00.06 systemd-resolve
1 root 20 0 166896 12224 8036 S 0.0 0.1 0:00.65 systemd
35 root 19 -1 31416 11272 10272 S 0.0 0.1 0:00.06 systemd-journal
143 root 20 0 15324 7396 6444 S 0.0 0.0 0:00.06 systemd-logind
60 root 20 0 22088 5924 4408 S 0.0 0.0 0:00.07 systemd-udevd
522 root 20 0 6080 5056 3372 S 0.0 0.0 0:00.02 bash
139 syslog 20 0 222400 5044 4220 S 0.0 0.0 0:00.00 rsyslogd
504 root 20 0 6120 4988 3412 S 0.0 0.0 0:00.00 bash
480 root 20 0 7476 4808 3896 S 0.0 0.0 0:00.00 login
120 message+ 20 0 8596 4428 3888 S 0.0 0.0 0:00.08 dbus-daemon
618 root 20 0 7792 3688 3088 R 0.0 0.0 0:00.29 top
362 root 20 0 4780 3344 3108 S 0.0 0.0 0:00.02 subiquity-serve
各行の説明
1行目:時間、ユーザ、load average
左から順に
・現在時刻
・サーバの稼働時間
・ログインユーザ数
・単位時間あたりの待ちタスク数(1分、5分、15分)
top - 22:32:31 up 13 min, 1 user, load average: 0.00, 0.00, 0.00
2行目:タスク情報
左から順に
・合計タスク数
・稼働中のタスク数
・待機中のタスク数
・停止タスク数
・ゾンビタスク数
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
3行目:cpu使用率
左から順に
・userプロセス(ユーザが起動したプロセス)
・systemプロセス(システムで起動してるプロセス)
・niceプロセス(優先プロセス)
・idleプロセス(何もしてないプロセス)
・I/O waitプロセス(cpuは使用してないけどioで待ちになっているプロセス)
・hardware interruptプロセス(cpu外部からの割り込みプロセス)
・software interruptプロセス(cpu内部からの割り込みプロセス)
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
1を押すと各CPUのプロセスが表示される(16スレッドのCPUなので16個表示されているっぽい)
ほぼ全部0.0なので見ごたえないですね
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu8 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu9 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu10 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu11 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu12 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu13 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu14 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu15 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
4,5行目:Memory/Swap
物理メモリとスワップメモリの使用メモリ量。一番左に書いてある「MiB」が単位
左から順に
・全メモリ量
・使用してないメモリ量
・使用中のメモリ量
・buff/cache:バッファ、キャッシュで使用されているメモリ量
・avail Mem :新しいアプリがスワップせずに使えるメモリ量
MiB Mem : 15868.3 total, 14949.8 free, 504.9 used, 413.6 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 15106.2 avail Mem
6行目以降:プロセス一覧
現在のプロセスの一覧が表示される。
各列の説明は以下の通り
・PID :プロセスID
・USER :そのユーザを実行してるユーザ
・PR :優先度。0を基準とした相対的な値
・VIRT :確保されている仮想メモリ量
・RES :使用している物理メモリ量
・SHR :他のプロセスと共有される可能性のあるメモリ量
・S :プロセスのステータス(Sはスリープ)
・%CPU :CPU使用率
・%MEM :メモリの使用率
・TIME+ :プロセスの実行時間
・COMMAND:プロセスの実行コマンド名
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
390 root 20 0 466596 77288 20280 S 0.0 0.5 0:02.41 python3.10
142 root 20 0 1614436 50832 18336 S 0.0 0.3 0:00.68 snapd
573 root 20 0 43756 37700 9920 S 0.0 0.2 0:01.62 python3
207 root 20 0 107216 21092 12864 S 0.0 0.1 0:00.03 unattended-upgr
136 root 20 0 30124 18912 10096 S 0.0 0.1 0:00.05 networkd-dispat
SHift + p
もしくはSHift + m
でcpu、メモリの使用率でソート可能
最後に
ハンズオンではtopコマンドの結果を見ながらボトルネックになっている箇所を特定してチューニングを行いました。闇雲にチューニングしてもいい結果は得られないですね。
topコマンドこれからも使っていこうと思います。