IT の世界におけるパフォーマンス関連の問題のトラブルシューティングは常に困難であり、適切なツールを知らなかったらイライラするでしょう。
実稼働環境でサポートとして作業している場合は、おそらく Linux 環境でのパフォーマンス関連の問題に対処する必要があるでしょう。パフォーマンス関連の問題を診断するために、最もよく使用される Linux コマンドライン ユーティリティのいくつかを見てみましょう。
注: 以下にリストされているコマンドの一部はデフォルトではインストールされない場合があるため、手動でインストールする必要があります。
lsof
lsof は「 開いているファイルのリスト 」の略で、開いているすべてのファイルとプロセス、およびそれらを開いたユーザーを見つけるのに役立ちます。 lsof ユーティリティは、シナリオによっては使用すると便利です。
特定の PID によって開かれたすべてのファイルをリストします。
# lsof –p PID
ファイルとプロセスの数をカウントする
[root@localhost ~]# lsof -p 4271 | wc -l
34
[root@localhost ~]#
現在開いているログファイルを確認する
# lsof –p | grep log
プロセスが使用するポート番号を調べます
lsof -i -P |grep $PID
[root@localhost ~]# lsof -i -P |grep 4271
nginx 4271 root 6u IPv4 51306 0t0 TCP *: 80 (LISTEN)
nginx 4271 root 7u IPv4 51307 0t0 TCP *: 443 (LISTEN)
[root@localhost ~]#
lsof コマンドの例をさらに確認してください。
pidstat
pidstat を使用して、Linux カーネルによって管理されるタスクを監視できます。このコマンドを使用すると、I/O 関連の問題のトラブルシューティングが簡単になります。
すべての PID の I/O 統計をリストします。
# pidstat –d
特定の PID の I/O 統計を置き換えるには
# pidstat –p 4271 –d
一部のプロセスに対してリアルタイムのトラブルシューティングを行っている場合は、一定の間隔で I/O を監視できます。以下の例は5秒ごとに監視する場合です。
[root@localhost ~]# pidstat -p 4362 -d 5
Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 08/13/2016 _x86_64_ (2 CPU)
07:01:30 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
07:01:35 PM 0 4362 0.00 0.00 0.00 nginx
07:01:40 PM 0 4362 0.00 0.00 0.00 nginx
07:01:45 PM 0 4362 0.00 0.00 0.00 nginx
07:01:50 PM 0 4362 0.00 0.00 0.00 nginx
上
おそらく、Linux で最もよく使用されるコマンドの 1 つは、top でしょう。 top コマンドを使用すると、システムの概要情報と現在の使用率を表示できます。
top コマンドを実行するだけで、CPU 使用率、プロセスの詳細、タスクの数、メモリ使用率、ゾンビ プロセスの数などを表示できます。
top - 11:48:43 up 13 days, 17:25, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 90 total, 2 running, 88 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1829.7 total, 388.1 free, 220.3 used, 1221.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1369.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 186820 13400 9092 S 0.0 0.7 0:10.87 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.13 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:07.35 ksoftirqd/0
10 root 20 0 0 0 0 R 0.0 0.0 0:07.30 rcu_sched
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.50 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
16 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
17 root 20 0 0 0 0 S 0.0 0.0 0:00.68 kauditd
18 root 20 0 0 0 0 S 0.0 0.0 0:00.25 khungtaskd
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
22 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
23 root 39 19 0 0 0 S 0.0 0.0 0:05.63 khugepaged
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 crypto
25 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd
26 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
特定のユーザーのプロセスの詳細を表示するには
# top –u username
プロセスを強制終了するには、top を実行して
k
を押します。強制終了する PID を入力するよう求められます。
top - 11:49:39 up 13 days, 17:26, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1829.7 total, 386.9 free, 221.4 used, 1221.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1368.3 avail Mem
PID to signal/kill [default pid = 21261]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5834 nginx 20 0 148712 7428 4800 S 0.0 0.4 0:02.37 nginx
ps
ps は プロセス ステータス の略で、実行中のプロセスのスナップショットを取得するために広く使用されているコマンドです。プロセスが実行中かどうかを確認し、実行中の場合は PID を出力するのに非常に便利です。
ワードでPIDや処理内容を知りたい
[root@lab ~]# ps -ef|grep nginx
root 5833 1 0 May24 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 5834 5833 0 May24 ? 00:00:02 nginx: worker process
root 21267 18864 0 11:50 pts/0 00:00:00 grep --color=auto nginx
[root@lab ~]#
tcpdump
ネットワーク問題のトラブルシューティングは常に困難ですが、使用する必須のコマンドの 1 つは tcpdump です。
tcpdump を 使用して、ネットワーク インターフェイス上のネットワーク パケットをキャプチャできます。
特定のネットワークインターフェイス上のパケットをキャプチャするには
[root@lab ~]# tcpdump -i eth0 -w /tmp/capture
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C9 packets captured
16 packets received by filter
0 packets dropped by kernel
[root@lab ~]#
ご覧のとおり、上記では
eth0
インターフェイス上のトラフィック フローがキャプチャされています。
送信元 IP と宛先 IP の間のネットワーク トラフィックをキャプチャするには
# tcpdump src $IP and dst host $IP
宛先ポート 443 のネットワーク トラフィックをキャプチャします。
# tcpdump dst port 443
tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Packet Tap), capture size 262144 bytes
12:02:30.833845 IP 192.168.1.2.49950 > ec2-107-22-185-206.compute-1.amazonaws.com.https: Flags [.], ack 421458229, win 4096, length 0
12:02:32.076893 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [S], seq 21510813, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 353259990 ecr 0,sackOK,eol], length 0
12:02:32.090389 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [.], ack 790725431, win 8192, length 0
12:02:32.090630 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [P.], seq 0:517, ack 1, win 8192, length 517
12:02:32.109903 IP 192.168.1.2.49953 > 104.25.133.107.https: Flags [.], ack 147, win 8187, length 0
キャプチャしたファイルを読み込む
# tcpdump –r filename
例: 上記でキャプチャしたファイルを読み取る場合
# tcpdump –r /tmp/test
ネットワーク トラフィックをキャプチャして分析するための tcpdump について詳しく学習してください。
イオスタット
iostat は 入出力統計 の略で、ストレージ デバイスのパフォーマンスの問題を診断するためによく使用されます。 iostat を使用すると、CPU、デバイス、ネットワーク ファイル システムの使用率レポートを監視できます。
ディスク I/O 統計の表示
[root@localhost ~]# iostat -d
Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 08/13/2016 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.82 55.81 12.63 687405 155546
[root@localhost ~]#
CPU統計の表示
[root@localhost ~]# iostat -c
Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 08/13/2016 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.59 0.02 0.33 0.54 0.00 98.52
[root@localhost ~]#
ldd
ldd は、ライブラリに必要な共有ライブラリを示す
リスト動的依存関係
の略です。
ldd
コマンドは、アプリケーションの起動時の問題を診断するのに便利です。
依存関係が利用できないためにプログラムが起動しない場合は、 ldd を実行して、プログラムが探している共有ライブラリを見つけることができます。
[root@localhost sbin]# ldd httpd
linux-vdso.so.1 => (0x00007ffe7ebb2000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fa4d451e000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa4d42f9000)
libaprutil-1.so.0 => /lib64/libaprutil-1.so.0 (0x00007fa4d40cf000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fa4d3e98000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fa4d3c6e000)
libdb-5.3.so => /lib64/libdb-5.3.so (0x00007fa4d38af000)
libapr-1.so.0 => /lib64/libapr-1.so.0 (0x00007fa4d3680000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa4d3464000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa4d325f000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa4d2e9e000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007fa4d2c79000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa4d4a10000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007fa4d2a73000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fa4d2870000)
[root@localhost sbin]#
ネット統計
netstat ( ネットワーク統計 ) は、ネットワーク接続、インターフェイス統計を出力し、ネットワーク関連のさまざまな問題のトラブルシューティングを行うための一般的なコマンドです。
すべてのプロトコルの統計を表示するには
# netstat –s
grepを使用してエラーがあるかどうかを確認できます
[root@localhost sbin]# netstat -s | grep error
0 packet receive errors
0 receive buffer errors
0 send buffer errors
[root@localhost sbin]#
カーネルルーティングテーブルを表示するには
[root@localhost sbin]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 eno16777736
172.16.179.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777736
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@localhost sbin]#
netstat コマンドの例をさらに詳しく見てみましょう。
無料
Linux サーバーのメモリが不足している場合、または利用可能なメモリのうちどのくらいのメモリが利用できるかを知りたい場合は、free コマンドが役に立ちます。
[root@localhost sbin]# free -g
total used free shared buff/cache available
Mem: 5 0 3 0 1 4
Swap: 5 0 5
[root@localhost sbin]#
-g
詳細を GB 単位で表示することを意味します。ご覧のとおり、使用可能なメモリの合計は 5 GB で、3 GB が空きです。
サール
sar ( システム アクティビティ レポート ) は、CPU、メモリ、デバイス負荷などの多数のレポートを収集するのに役立ちます。
sar
コマンドを実行するだけで、1 日全体のシステム使用率が表示されます。
デフォルトでは、使用率レポートは 10 分で保存されます。リアルタイムで短いものが必要な場合は、以下のように使用できます。
CPU レポートを 3 秒ごとに 3 回表示します
[root@localhost sbin]# sar 3 2
Linux 3.10.0-327.13.1.el7.x86_64 (localhost.localdomain) 08/13/2016 _x86_64_ (2 CPU)
11:14:02 PM CPU %user %nice %system %iowait %steal %idle
11:14:05 PM all 1.83 0.00 0.50 0.17 0.00 97.51
11:14:08 PM all 1.50 0.00 0.17 0.00 0.00 98.33
Average: all 1.67 0.00 0.33 0.08 0.00 97.92
[root@localhost sbin]#
メモリ使用量レポートを表示する
# sar –r
ネットワークレポートを表示
# sar –n ALL
ipcs
ipcs ( プロセス間通信システム ) は、セマフォ、共有メモリ、メッセージ キューに関するレポートを提供します。
メッセージキューをリストするには
# ipcs –q
セマフォをリストするには
# ipcs –s
共有メモリを一覧表示するには
# ipcs –m
現在のIPCの使用状況を表示するには
[root@localhost sbin]# ipcs -u
------ Messages Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes
------ Shared Memory Status --------
segments allocated 5
pages allocated 2784
pages resident 359
pages swapped 0
Swap performance: 0 attempts 0 successes
------ Semaphore Status --------
used arrays = 0
allocated semaphores = 0
[root@localhost sbin]#
イオピング
ioping は外部コマンドであり、 ここ からインストールできます。ディスク I/O 遅延をリアルタイムで監視すると非常に便利です。
結論
上記のコマンドがシステム管理業務のさまざまな状況に役立つことを願っています。上記のコマンドはオンデマンドで使用すると便利です。ただし、Linux サーバーを常に監視する必要がある場合は、サーバー監視ソフトウェアの使用を検討する必要があります。
Linux のパフォーマンスについて詳しく知りたい場合は、この Udemy コース をご覧ください。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





