RHELやCentOS等で実行される保守用のコマンドをAlpine Linuxで実行する事が可能であるか、個人用の環境にて稼働しているFTPサーバで確認してみた。
コマンドのオプションや出力内容はRHELやCentOS、Ubuntu等と微妙に異なっているが、これらの主要ディストリビューションと遜色無く実行可能である事は分かった。
Dockerのコンテナ用としてよく利用されているAlpine Linux。WebサーバやFTPサーバとしての商用環境への導入事例は分からないが個人用の環境であれば、サーバ用としての利用は有りなのではないか。
...という事で、今回は保守でよく使うコマンドをAlpine Linuxで打ってみた際のメモ。
当方の環境
シェルはデフォルトのashからbashに変更している。
bashへの変更方法は以下のリンク先内下部の"ashではなくbashのコマンドを打ちたい"を参照。
https://debslink.hatenadiary.jp/entry/20200418/1587204948
また、当記事に記載したコマンドは全てAlpine Linux 3.14.2 (x86_64)で実行している。
$ uname -a Linux xxxxxxxxx 5.10.61-0-virt #1-Alpine SMP Fri, 27 Aug 2021 05:29:55 +0000 x86_64 Linux $ $ cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.14.2 PRETTY_NAME="Alpine Linux v3.14" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://bugs.alpinelinux.org/" $ $ apk info bash bash-5.1.4-r0 description: The GNU Bourne Again shell bash-5.1.4-r0 webpage: https://www.gnu.org/software/bash/bash.html bash-5.1.4-r0 installed size: 1296 KiB $
収録コマンド
コマンドの概要および当ページ内のCtrl + Fキー検索用。
1.サービスの確認
rc-service:サービスの管理。systemdコマンドのOpenRC版。
rc-status:サービスの状態確認。systemdコマンドのOpenRC版。
rc-update:サービスの自動起動の有効・無効化。systemdコマンドのOpenRC版。
2.プロセスの確認
ps:現段階で動作中のプロセスを確認。
top:動作中のプロセスを継続的に監視。
lsof:現段階で開いているファイルを確認。
vmstat:仮想メモリの統計情報の確認。
pidstat:プロセスの各種リソースの消費状況の確認。
mpstat:システム内全てのプロセッサーのパフォーマンスを確認。
sar:CPUやメモリやネットワークやI/O等の負荷状況を確認。
3.ディスクの確認
df:ディスクの空き容量を確認。
iotop:ディスクI/Oの帯域をプロセス毎に確認。
iostat:ディスクI/OおよびCPUの消費状況を確認。
mount:ディスクのマウント状況を確認。
4.メモリの確認
free:メモリの消費状況を確認。
5.ネットワークの確認
ping:接続先に対しネットワーク層までの疎通確認。
traceroute:接続先までの経路状況の確認。
ifconfig:NICの構成に関する確認。
netstat:接続状況や経路情報の確認。
curl:接続先に様々なリクエストを送信し接続状況を確認。
test-NetConnection:curlのWindows版のようなツール。
6.時刻同期の確認
chronyc:chronyが自身の時刻同期先(NTPサーバなど)と同期が取れているかを確認。
7.最後の手段
reboot:システムの再起動。
保守用ツールのインストール
デプロイ直後はいくつかの保守用コマンドはインストールされていない為、改めてインストールする必要が有る。
インストールは管理者権限で実行する。
当記事で挙げたコマンドを実行するには、以下のコマンドを実行しパッケージのインストールが必要となる。
# apk add lsof sysstat procps iotop mtr net-tools bind-tools iptables strace
当方の/etc/apk/repositoriesファイルの内容は以下のとおりである。
デプロイ直後は http://dl-cdn.alpinelinux.org/alpine/v3.14/mainのみ有効になっている為、
上記のツールをインストールする為には、
http://dl-cdn.alpinelinux.org/alpine/v3.14/communityと http://dl-cdn.alpinelinux.org/alpine/edge/testingの行頭のコメントアウトを外す必要が有る。
#/media/cdrom/apks http://dl-cdn.alpinelinux.org/alpine/v3.14/main http://dl-cdn.alpinelinux.org/alpine/v3.14/community #http://dl-cdn.alpinelinux.org/alpine/edge/main #http://dl-cdn.alpinelinux.org/alpine/edge/community http://dl-cdn.alpinelinux.org/alpine/edge/testing
1.サービスの確認
rc-serviceコマンド
Alpine LinuxのInitシステムはOpenRCが採用されている。OpenRCではサービスの管理はrc-statusとrc-serviceコマンドを使用する。rc-statusコマンドで確認対象のサービスの稼働状況を確認し、rc-serviceコマンドでサービスの起動・停止・再起動を実行する。
rc-statusコマンドとrc-serviceコマンドは管理者権限で実行する。
Red HatやDebian等のような主要なディストリビューションで導入されているsystemctlコマンド程ではないが、サービスの確認や管理が出来る。
ここでは、例としてFTPサーバ(vsftpd)を対象とする。
vsftpdサービスの状態を確認。startedと出力された為、vsftpdは起動している事が分かる。
# rc-service vsftpd status * status: started
vsftpdサービスを手動で停止する。停止させた際はstop等の出力は無い。
# rc-service vsftpd stop * Stopping vsftpd ...
vsftpdサービスを手動で立ち上げる。正常に立ち上がれば[ ok ]が出力される。
# rc-service vsftpd start * Starting vsftpd ... [ ok ]
vsftpdサービスを再起動させる。正常に再起動が完了すれば[ ok ]が出力される。
# rc-service vsftpd restart * Stopping vsftpd ... * Starting vsftpd ... [ ok ]
rc-statusコマンド
rc-statusコマンドで今稼働中のサービスの一覧を出力する。
# rc-status Runlevel: default crond [ started ] acpid [ started ] chronyd [ started ] vsftpd [ started ] sshd [ started ] Dynamic Runlevel: hotplugged Dynamic Runlevel: needed/wanted sysfs [ started ] fsck [ started ] root [ started ] localmount [ started ] Dynamic Runlevel: manual
rc-updateコマンド
rc-update addコマンドでvsftpdサービスの自動起動を有効にする。
# rc-update add vsftpd * service vsftpd added to runlevel default #
rc-update delコマンドでvsftpdサービスの自動起動を無効にする。
# rc-update del vsftpd * service vsftpd removed from runlevel default #
rc-update addコマンドで、ランレベル指定でvsftpdサービスの自動起動を有効にする。
Alpine Linuxのランレベルに関しては以下のリンク先を参照。
https://wiki.alpinelinux.org/wiki/OpenRC
# rc-update add vsftpd default * service vsftpd added to runlevel default #
2.プロセスの確認
psコマンド
動作中のプロセスを確認する。
Alpine Linuxの場合、procpsパッケージのインストール前後で出力内容が異なり、procpsパッケージのインストール後は出力される項目が増えるだけでなくpsコマンドのオプションも一通り付ける事が出来るようになる為、Alpine LinuxをRed HatやUbuntu等のようにサーバ用として運用するのであればprocpsパッケージのインストールをお勧めする。
以下はprocpsインストール前の出力内容。auxfオプション付けてこの出力内容である。
$ ps auxf PID USER TIME COMMAND 1 root 0:00 /sbin/init 2 root 0:00 [kthreadd] 3 root 0:00 [rcu_gp] 4 root 0:00 [rcu_par_gp] :
以下はprocpsのインストール後の出力内容。
ちなみにauxfオプションを付けて実行すると、プロセスの親子関係が分かりやすく出力される。
自分はpstreeよりps auxfの方が好みである。
$ ps auxf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2 0.0 0.0 0 0 ? S 09:57 0:00 [kthreadd] root 8 0.0 0.0 0 0 ? I< 09:57 0:00 \_ [mm_percpu_wq] root 7 0.0 0.0 0 0 ? I 09:57 0:00 \_ [kworker/u2:0-events_unbound] root 4 0.0 0.0 0 0 ? I< 09:57 0:00 \_ [rcu_par_gp] root 3 0.0 0.0 0 0 ? I< 09:57 0:00 \_ [rcu_gp] root 6 0.0 0.0 0 0 ? I< 09:57 0:00 \_ [kworker/0:0H-events_highpri] root 12 0.0 0.0 0 0 ? S 09:57 0:02 \_ [migration/0] root 11 0.0 0.0 0 0 ? I 09:57 0:01 \_ [rcu_sched] root 9 0.0 0.0 0 0 ? S 09:57 0:00 \_ [rcu_tasks_trace] root 10 0.0 0.0 0 0 ? S 09:57 0:00 \_ [ksoftirqd/0] root 14 0.0 0.0 0 0 ? S 09:57 0:00 \_ [cpuhp/0] :
topコマンド
実行中のプロセスを、CPU利用率が高い順に出力される。
topの出力から抜けるには、Ctrl + cを打つ。
更新間隔1秒で出力する。
topコマンドを打った際に「'xterm-16color': unknown terminal type.」が返ってきてtopコマンドの結果が正常に出力されない場合。
自分の環境では、.bash_profileにTERM=linuxの追記と exportの行にTERMを追記し、再ログインの後topコマンドを実行したら解消した。
$ top -d 1 top - 13:47:06 up 21 min, 0 users, load average: 0.00, 0.00, 0.00 Tasks: 69 total, 1 running, 68 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0/0.0 0[ ] GiB Mem : 11.5/0.5 [ ] GiB Swap: 0.0/0.9 [ ] PID USER PR NI VIRT RES %CPU %MEM TIME+ S COMMAND 1 root 20 0 1.6m 0.8m 0.0 0.2 0:00.31 S /sbin/init 1824 root 20 0 1.6m 0.1m 0.0 0.0 0:00.00 S `- /sbin/udhcpc -b -R -p /var/run/udhcpc.eth0.pid -i et+ 1900 root 20 0 1.6m 0.1m 0.0 0.0 0:00.02 S `- /sbin/syslogd -t 1953 root 20 0 1.6m 0.0m 0.0 0.0 0:00.00 S `- /sbin/acpid :
dオプションで更新間隔を秒で指定可能、-nオプションで出力回数を指定する。
出力中に f で出力内容を変更。bオプションにより、出力中はキー操作を受け付けない。
$ top -b -d 2 -n 10 top - 13:49:25 up 23 min, 0 users, load average: 0.00, 0.00, 0.00 Tasks: 69 total, 1 running, 68 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.5/0.5 1[ ] GiB Mem : 11.5/0.5 [ ] GiB Swap: 0.0/0.9 [ ] PID USER PR NI VIRT RES %CPU %MEM TIME+ S COMMAND 1 root 20 0 1.6m 0.8m 0.0 0.2 0:00.31 S /sbin/init 1824 root 20 0 1.6m 0.1m 0.0 0.0 0:00.00 S `- /sbin/udhcpc -b -R -p /var/run/udhcpc.eth0.pid -i et+ 1900 root 20 0 1.6m 0.1m 0.0 0.0 0:00.02 S `- /sbin/syslogd -t 1953 root 20 0 1.6m 0.0m 0.0 0.0 0:00.00 S `- /sbin/acpid :
lsofコマンド
プロセスが開いているファイルのリストを出力する。
管理者権限で実行する。
ユーザがどのファイルを開いているか、特定のプロセスがどのファイルを使用しているか、特定のファイルを使用しているプロセスは何か、待ち受け状態のポートや通信中のポートは何か...等、ファイルを開いている物or者を確認出来る。
※Alpine Linuxではlsofを別途インストールすると実行可能になる。(apk add lsof)
出力対象のプロセスIDを指定し出力する。プロセスIDはpsコマンドやpstreeコマンドで確認する。
# lsof -p 2073 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2073 root cwd DIR 8,3 4096 2 / sshd 2073 root rtd DIR 8,3 4096 2 / sshd 2073 root txt REG 8,3 797816 1614 /usr/sbin/sshd sshd 2073 root mem REG 8,3 100168 337 /lib/libz.so.1.2.1 :
出力対象のユーザ名を-uオプションで指定し出力する。
# lsof -u hechtia COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2132 hechtia cwd DIR 8,3 4096 2 / sshd 2132 hechtia rtd DIR 8,3 4096 2 / sshd 2132 hechtia txt REG 8,3 797816 1614 /usr/sbin/sshd sshd 2132 hechtia mem REG 8,3 100168 337 /lib/libz.so.1.2.11 :
出力対象のプロセス名を-cオプションで指定し出力する。
# lsof -c sshd COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2073 root cwd DIR 8,3 4096 2 / sshd 2073 root rtd DIR 8,3 4096 2 / sshd 2073 root txt REG 8,3 797816 1614 /usr/sbin/sshd sshd 2073 root mem REG 8,3 100168 337 /lib/libz.so.1.2.11 :
ファイルやパーティションを指定し出力する。
# lsof /bin/bash COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 2133 hechtia txt REG 8,3 760136 130312 /bin/bash bash 2340 hechtia txt REG 8,3 760136 130312 /bin/bash bash 2450 root txt REG 8,3 760136 130312 /bin/bash # lsof /dev/sda3 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,3 4096 2 / init 1 root rtd DIR 8,3 4096 2 / init 1 root txt REG 8,3 829000 130314 /bin/busybox init 1 root mem REG 8,3 604744 18 /lib/ld-musl-x86_64.so.1 :
LISTENしてるプロセスを-iでポート指定し出力する。
LISTENは他の機器(サーバやNW機器、PC等)からの接続を待ち受けしている状態である事を示す。
ESTABLISHEDは他の機器と通信中の状態である事を示す。
# lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2073 root 3u IPv4 10031 0t0 TCP *:ssh (LISTEN) sshd 2073 root 4u IPv6 10033 0t0 TCP *:ssh (LISTEN) sshd 2128 root 4u IPv4 10203 0t0 TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED) sshd 2132 hechtia 4u IPv4 10203 0t0 TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)
iオプションで192.168.1.10からの接続を指定し出力する。
# lsof -i@192.168.3.10 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2128 root 4u IPv4 10203 0t0 TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED) sshd 2132 hechtia 4u IPv4 10203 0t0 TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)
iオプションでTCP接続を対象に出力する。
# lsof -iTCP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2073 root 3u IPv4 10031 0t0 TCP *:ssh (LISTEN) sshd 2073 root 4u IPv6 10033 0t0 TCP *:ssh (LISTEN) sshd 2128 root 4u IPv4 10203 0t0 TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED) sshd 2132 hechtia 4u IPv4 10203 0t0 TCP 192.168.3.16:ssh->192.168.3.10:54134 (ESTABLISHED)
uオプションでユーザを指定し、/homeディレクトリ配下で開いているファイルを出力 (-aはANDと同じ意味)
# lsof -u hechtia -a +D /home/hechtia COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1933 hechtia cwd DIR 8,3 4096 1979 /home/hechtia bash 2074 hechtia cwd DIR 8,3 4096 1979 /home/hechtia vim 2076 hechtia cwd DIR 8,3 4096 1979 /home/hechtia vim 2076 hechtia 4u REG 8,3 12288 102 /home/hechtia/.bashrc.swp
vmstatコマンド
物理メモリや仮想メモリ、ディスクI/O、割り込み回数、コンテキストスイッチ回数、CPUの消費状況等の統計情報を出力する。
vmstatのvmとはvirtual memory(仮想メモリ)を指すが、物理メモリやディスクも何故か出力される。
※Alpine Linuxでは別途procpsをインストールすると実行可能になる。(apk add procps)
メモリとCPUの統計情報を、3秒間隔で更新し出力する。
3秒毎に出力行が1行づつ増えていく。
$ vmstat 3 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 0 446572 4416 29120 0 0 18 2 103 34 7 6 87 0 0 0 0 0 446440 4424 29112 0 0 0 5 112 9 1 1 98 0 0 0 0 0 446472 4424 29112 0 0 0 0 111 21 3 2 95 0 0
ディスクの統計情報を3秒間隔で5回、そしてtオプションを付けて実行日時も合わせて出力する。
$ vmstat -t -d 3 5 disk- ------------reads------------ ------------writes----------- -----IO------ -----timestamp----- total merged sectors ms total merged sectors ms cur sec UTC sda 1122 435 66526 3602 322 319 10482 3889 0 15 2021-10-24 15:16:45 loop0 0 0 0 0 0 0 0 0 0 0 2021-10-24 15:16:45 loop1 0 0 0 0 0 0 0 0 0 0 2021-10-24 15:16:45 loop2 0 0 0 0 0 0 0 0 0 0 2021-10-24 15:16:45 :
pidstatコマンド
プロセス毎にCPUやメモリやディスク等の消費状況を出力する。
また、pidstatコマンドの実行間隔や回数を指定すると、pidstatの実行中ににどのプロセスがどの程度リソースを利用したか統計情報を出力する事が出来る。
しかもデフォルトで実行時間を出力してくれる為、バックグラウンドでpidstatを実行しどのタイミングでどのプロセスがCPUやメモリ等を多く消費していたか確認が出来る。
※Alpine Linuxでは別途sysstatをインストールすると実行可能になる。(apk add sysstat)
CPUの消費状況をプロセス毎に、2秒間隔で5回出力する。
$ pidstat 2 5 Linux 5.10.61-0-virt (jpmtkvmftp99) 10/24/21 _x86_64_ (1 CPU) 14:10:34 UID PID %usr %system %guest %wait %CPU CPU Command 14:10:36 0 960 0.00 0.50 0.00 0.00 0.50 0 jbd2/sda3-8 14:10:36 UID PID %usr %system %guest %wait %CPU CPU Command 14:10:38 1000 2599 0.50 0.00 0.00 0.00 0.50 0 pidstat 14:10:38 UID PID %usr %system %guest %wait %CPU CPU Command 14:10:40 0 841 0.00 0.50 0.00 0.00 0.50 0 kworker/0:2-events_power_efficient 14:10:40 UID PID %usr %system %guest %wait %CPU CPU Command 14:10:42 UID PID %usr %system %guest %wait %CPU CPU Command 14:10:44 1000 2599 0.50 0.00 0.00 0.00 0.50 0 pidstat Average: UID PID %usr %system %guest %wait %CPU CPU Command Average: 0 841 0.00 0.10 0.00 0.00 0.10 - kworker/0:2-events_power_efficient Average: 0 960 0.00 0.10 0.00 0.00 0.10 - jbd2/sda3-8 Average: 1000 2599 0.20 0.00 0.00 0.00 0.20 - pidstat
メモリの消費状況をプロセス毎に、2秒間隔で5回出力する。
$ pidstat -r 2 5 Linux 5.10.61-0-virt (jpmtkvmftp99) 10/24/21 _x86_64_ (1 CPU) 14:11:14 UID PID minflt/s majflt/s VSZ RSS %MEM Command 14:11:16 1000 2603 30.85 0.00 1612 1356 0.27 pidstat 14:11:16 0 2604 16.42 0.00 1588 4 0.00 getty 14:11:16 UID PID minflt/s majflt/s VSZ RSS %MEM Command 14:11:18 1000 2603 2.50 0.00 1612 1368 0.28 pidstat 14:11:18 UID PID minflt/s majflt/s VSZ RSS %MEM Command 14:11:20 1000 2603 2.00 0.00 1612 1368 0.28 pidstat 14:11:20 UID PID minflt/s majflt/s VSZ RSS %MEM Command 14:11:22 1000 2603 1.00 0.00 1612 1368 0.28 pidstat 14:11:22 UID PID minflt/s majflt/s VSZ RSS %MEM Command 14:11:24 1000 2603 2.00 0.00 1612 1368 0.28 pidstat Average: UID PID minflt/s majflt/s VSZ RSS %MEM Command Average: 1000 2603 7.69 0.00 1612 1366 0.27 pidstat Average: 0 2604 3.30 0.00 1588 4 0.00 getty
ディスクI/Oの状況を2秒間隔で5回出力する。
ただし、I/Oが無い時は値が出力されない。
$ pidstat -d 2 5 Linux 5.10.61-0-virt (jpmtkvmftp99) 10/24/21 _x86_64_ (1 CPU) 14:12:09 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 14:12:11 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 14:12:13 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 14:12:15 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 14:12:17 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command Average: UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
mpstatコマンド
マルチコアなCPUのCPU消費状況を出力する。
CPU毎にに使用率や割り込みを出力する。オプションでCPUのコア毎の出力や実行間隔や回数を指定する事により、どのコアが多く使用されているか、どのコアで割り込み処理が多く発生しているか等の情報を出力する事が出来る。
※Alpine Linuxでは別途sysstatをインストールすると実行可能になる。(apk add sysstat)
ALLオプション無しで実行した場合は、全コアでの消費状況を出力する。
$ mpstat 2 10 Linux 5.4.99-0-virt (jpmtkvmftp99) 04/22/21 _x86_64_ (1 CPU) 20:22:51 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 20:22:53 all 0.45 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.55 20:22:55 all 2.74 0.00 1.37 0.46 0.00 0.46 0.00 0.00 0.00 94.98 20:22:57 all 0.00 0.00 0.91 0.00 0.00 0.46 0.00 0.00 0.00 98.63 :
ALLオプションを付けて実行した場合は、CPUコア毎に消費状況を出力する。
$ mpstat -P ALL 2 10 Linux 5.4.99-0-virt (jpmtkvmftp99) 04/22/21 _x86_64_ (1 CPU) 20:24:59 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 20:25:01 all 0.45 0.00 2.27 0.00 0.00 0.00 0.00 0.00 0.00 97.27 20:25:01 0 0.45 0.00 2.27 0.00 0.00 0.00 0.00 0.00 0.00 97.27 20:25:01 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 20:25:03 all 5.48 0.00 3.20 0.00 0.00 0.00 0.00 0.00 0.00 91.32 20:25:03 0 5.48 0.00 3.20 0.00 0.00 0.00 0.00 0.00 0.00 91.32 :
sarコマンド
CPUやメモリやネットワーク、I/O等の負荷状況を確認する。
管理者権限で実行する。
sarコマンドは過去ログも確認する事が出来る。
ただし過去ログを確認出来るようにする為には、oオプションを付けてファイルを指定し取得したログをファイルとして残すなど下準備が必要となる為、straceパッケージのインストール直後にsarコマンドを実行しても、過去のログを確認する事は出来ない。
※Alpine Linuxではstraceを別途インストールすると実行可能になる。(apk add strace)
HDDの使用状況を2秒毎に5回出力し、結果を/var/log/sa/sa01.logに保存する。
# sar -b 2 5 -o /var/log/sa/sa01.log Linux 5.10.82-0-virt (jpmtkvmftp99) 12/28/21 _i686_ (1 CPU) 13:30:00 tps rtps wtps dtps bread/s bwrtn/s bdscd/s 13:30:02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13:30:05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13:30:07 1.00 0.00 1.00 0.00 0.00 31.84 0.00 13:30:09 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13:30:11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.20 0.00 0.20 0.00 0.00 6.37 0.00 #
CPUの消費状況を、2秒毎に5回出力する。
# sar -u 2 5 Linux 5.10.82-0-virt (jpmtkvmftp99) 12/28/21 _i686_ (1 CPU) 13:32:28 CPU %user %nice %system %iowait %steal %idle 13:32:30 all 0.00 0.00 1.02 0.00 0.00 98.98 13:32:32 all 1.01 0.00 4.55 0.00 0.00 94.44 13:32:34 all 1.52 0.00 4.55 0.00 0.00 93.94 13:32:36 all 0.52 0.00 5.73 0.00 0.00 93.75 13:32:38 all 1.53 0.00 5.61 0.00 0.00 92.86 Average: all 0.92 0.00 4.29 0.00 0.00 94.80 #
fオプションを付けて、ログファイル/var/log/sa/sa01.logに保存されているHDDの使用状況を確認する。
# sar -b -f /var/log/sa/sa01.log Linux 5.10.82-0-virt (jpmtkvmftp99) 12/28/21 _i686_ (1 CPU) 13:30:00 tps rtps wtps dtps bread/s bwrtn/s bdscd/s 13:30:02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13:30:05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13:30:07 1.00 0.00 1.00 0.00 0.00 31.84 0.00 13:30:09 0.00 0.00 0.00 0.00 0.00 0.00 0.00 13:30:11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0.20 0.00 0.20 0.00 0.00 6.37 0.00 #
3.ディスクの確認
dfコマンド
パーティション情報やディスクの空き容量等を確認する。
管理者権限で実行する。
パーティション情報やファイルタイプ、ディスク容量が出力される。
以下の例では、Tオプションにより各ファイルシステムのタイプを出力、hオプションにより分かりやすい単位で出力。
個々のファイルやサブディレクトリのディスク使用状況を確認したい際は、duコマンドを実行する。
# df -Th Filesystem Type Size Used Available Use% Mounted on devtmpfs devtmpfs 10.0M 0 10.0M 0% /dev shm tmpfs 242.4M 0 242.4M 0% /dev/shm /dev/sda3 ext4 6.8G 122.6M 6.3G 2% / tmpfs tmpfs 97.0M 116.0K 96.9M 0% /run /dev/sda1 ext4 88.2M 15.4M 65.8M 19% /boot
iotopコマンド
プロセス毎にディスクI/Oを出力する。
管理者権限で実行する。
iotopコマンドを打った後は延々と出力され続ける為、Ctrl + cキーを打ってiotopから抜ける。
iotopコマンドにより、ディスクI/O負荷の高いプロセスを特定する事が出来る。
※Alpine Linuxではiotopを別途インストールすると実行可能になる。(apk add iotop)
bオプションによりディスクI/Oを時系列に出力、oオプションにより、ディスクI/Oを発生させたプロセスだけを出力する。
# iotop -b -o Total DISK READ : 0.00 B/s | Total DISK WRITE : 5.52 K/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 182.27 K/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 2157 be/4 root 0.00 B/s 0.00 B/s 0.00 % 2.53 % [kworker/u2:0-flush-8:0] 1733 be/4 root 0.00 B/s 5.52 K/s 0.00 % 0.00 % syslogd -t :
bオプションによりディスクI/Oを時系列に出力、pオプションにより指定したプロセスのI/Oを出力する。
# iotop -b -p 2369 Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 2369 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u2:0-ext4-rsv-conversion] :
iostatコマンド
物理デバイスおよび論理デバイスのI/O状況を出力する。
※Alpine Linuxではsysstatを別途インストールすると実行可能になる。(apk add sysstat)
CPU使用率と物理デバイスのI/Oの状況を出力する。
$ iostat Linux 5.10.61-0-virt (jpmtkvmftp99) 10/24/21 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.07 0.00 0.77 0.01 0.00 99.14 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.56 5.98 24.04 51358 206354
mountコマンド
ディスクのマウント状況を確認する。
オプション無しで実行した場合、現在のディスクのマウント状況が出力される。
デバイス(/dev/xxx)がどこのディレクトリ(/や/boot等)にマウントされているか、使用しているファイルシステム(ext4やtmpfs等)、マウント時の動作(rwやnosuidやnoexec等)等の確認が出来る。
$ mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,relatime,size=10240k,nr_inodes=60800,mode=755,inode64) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,inode64) /dev/sda3 on / type ext4 (rw,relatime) tmpfs on /run type tmpfs (rw,nosuid,nodev,size=99300k,nr_inodes=819200,mode=755,inode64) mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) tracefs on /sys/kernel/debug/tracing type tracefs (rw,nosuid,nodev,noexec,relatime) /dev/sda1 on /boot type ext4 (rw,relatime)
4.メモリの確認
freeコマンド
メモリの消費状況を確認する。-mオプションを付けて実行した場合。MB単位で出力される。
詳細な消費状況および統計情報はvmstatやpidstatコマンドを使用する。(上記参照)
$ free -m total used free shared buff/cache available Mem: 472 36 400 0 36 423 Swap: 961 0 961 $
5.ネットワークの確認
pingコマンド
自機から宛先の機器に対しicmpパケットを飛ばし、応答を確認する。
他のプロトコルによる通信が出来なくてもpingの応答が有れば、少なくとも物理的には繋がっている事を示す。
$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=42 time=7.785 ms 64 bytes from 8.8.8.8: seq=1 ttl=42 time=6.138 ms 64 bytes from 8.8.8.8: seq=2 ttl=42 time=6.112 ms 64 bytes from 8.8.8.8: seq=3 ttl=42 time=6.258 ms 64 bytes from 8.8.8.8: seq=4 ttl=42 time=5.993 ms ^C --- 8.8.8.8 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 5.993/6.457/7.785 ms
cオプションで実行回数、sオプションで送信するパケットのサイズを指定し疎通確認する。
$ ping -c 5 -s 64 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 64 data bytes 72 bytes from 8.8.8.8: seq=0 ttl=42 time=109.458 ms 72 bytes from 8.8.8.8: seq=1 ttl=42 time=6.192 ms 72 bytes from 8.8.8.8: seq=2 ttl=42 time=6.330 ms 72 bytes from 8.8.8.8: seq=3 ttl=42 time=6.095 ms 72 bytes from 8.8.8.8: seq=4 ttl=42 time=7.896 ms --- 8.8.8.8 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 6.095/27.194/109.458 ms
tracerouteコマンド
自機から宛先への通信経路を確認する。
LinuxやFreeBSD等UNIX系OSで実行するtracerouteはudp、Windowsで実行するtracertはicmpを使用する。
DebianやRed Hat等他のディストリビューションではIオプションでICMPパケットを飛ばす事が出来、TオプションでTCPパケットを飛ばす事が出来るが、Alpine LinuxのtracerouteはTオプションが使用出来ない。
$ traceroute 192.168.120.20 traceroute to 192.168.120.20 (192.168.120.20), 30 hops max, 60 byte packets 1 192.168.100.20 (192.168.100.20) 0.060 ms 2 192.168.110.20 (192.168.110.20) 0.049 ms 3 192.168.120.20 (192.168.120.20) 0.039 ms :
nオプションでDNS逆引きをせずIPアドレスのみの出力、pオプションでプロトコル番号(123はNTP)を指定し実行。
$ traceroute -n -p 123 192.168.120.21 traceroute to 192.168.120.21 (192.168.120.21), 30 hops max, 46 byte packets 1 192.168.100.20 (192.168.100.20) 0.041 ms 2 192.168.110.20 (192.168.110.20) 0.033 ms 3 192.168.120.20 (192.168.120.20) 0.031 ms :
arpコマンド
arpテーブルに載っているIPアドレスとMACアドレスを出力する。
自機が属するネットワーク内にて、IPアドレスの重複やPingを返さない機器の死活確認などが出来る。
$ arp ? (192.168.3.10) at 00:26:82:81:70:21 [ether] on eth0 ? (192.168.3.1) at 30:f7:72:d8:84:f7 [ether] on eth0
ifconfigコマンド
ネットワークインターフェースのリンクUPやDown、IPアドレス、MACアドレス、I/Oのカウント等を出力する。
RXは受信、TXは送信を示す。
パケットが正常に送受信出来ている時は、errorsやdroppedやoverrunsやcollisions等はカウントされない。
$ ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:E9:37:DE inet addr:192.168.3.16 Bcast:0.0.0.0 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fee9:37de/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24464 errors:0 dropped:0 overruns:0 frame:0 TX packets:13066 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:27408907 (26.1 MiB) TX bytes:1637592 (1.5 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
netstatコマンド
ネットワークの接続状態(Active Internet connectionsの項目)とUNIXソケットの接続状態(Active UNIX domain socketsの項目)を出力する。
aオプションを付ける事で接続状態だけでなく接続待ち状態や接続が切られた状態のソケット等も出力する。
nオプションで接続ホストやポート番号を数値で出力する。
※Alpine Linuxではnet-toolsを別途インストールすると実行可能になる。(apk add net-tools)
$ netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 192.168.3.16:22 192.168.3.10:54134 ESTABLISHED tcp 0 0 :::22 :::* LISTEN Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 9937 /var/run/chrony/chronyd.sock unix 5 [ ] DGRAM 9861 /dev/log unix 2 [ ] DGRAM 15124 unix 3 [ ] STREAM CONNECTED 10226 unix 3 [ ] STREAM CONNECTED 10227 unix 2 [ ] STREAM CONNECTED 10219 unix 2 [ ] DGRAM 9970 unix 2 [ ] DGRAM 9933
rオプションで、自機が保持している経路情報(ルーティングテーブル)を出力する。
routeコマンドで、同様の出力結果が得られる。
$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0 10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 $
curlコマンド (端末側)
接続先のAlpine Linuxサーバに接続が可能かcurlコマンドで確認する事が出来る。
ポート番号を指定しサービス対象のポートが開いているか確認する。
ここでは、送信元をMacBook Air(macOS 10.13.6)、宛先をAlpine Linux(192.168.3.254、ポート22222)で構築したSFTPサーバとした接続テストを実施。
以下は、宛先に対し接続が成功した場合の出力例。-vオプションでプロトコルのtelnetと宛先IPアドレス、ポート番号を指定出来る。
Ctrl + Cで抜ける。
$ curl -v telnet://192.168.3.254:22222 * Rebuilt URL to: telnet://192.168.3.254:22222/ * Trying 192.168.3.254... * TCP_NODELAY set * Connected to 192.168.3.254 (192.168.3.254) port 22222 (#0) ^C $
以下は対象となるサービスが動作していなかった事により接続が失敗した場合の例。
宛先のIPアドレス自体は正しい為に通信自体は届いているもののポート番号21のサービス自体が動いていない為、Connection refusedで弾かれる。
宛先のIPアドレスが間違っている場合、あるいは宛先への通信経路上の機器(例えばファイアウォールやルータ・スイッチのACL設定等)で弾かれている場合は、Connection timeoutが出力される。
$ curl -v telnet://192.168.3.254:21 * Rebuilt URL to: telnet://192.168.3.254:21/ * Trying 192.168.3.254... * TCP_NODELAY set * Connection failed * connect to 192.168.3.254 port 21 failed: Connection refused * Failed to connect to 192.168.3.254 port 21: Connection refused * Closing connection 0 curl: (7) Failed to connect to 192.168.3.254 port 21: Connection refused $
Test-NetConnectionコマンド (端末側)
送信元がWindowsの端末である場合、Microsoft PowerShellのコマンドTest-NetConnectionコマンドでポート番号を指定し、Alpine Linuxサーバ側でサービス対象のポートが開いているか確認する事が出来る。
以下は、宛先に対し接続が成功した場合の出力例。TcpTestSucceededがTrueで返ってくる。
PS C:\tmp> Test-NetConnection 192.168.3.254 -Port 22222 ComputerName : 192.168.3.254 RemoteAddress : 192.168.3.254 RemotePort : 22222 InterfaceAlias : ワイヤレス ネットワーク接続 SourceAddress : 192.168.3.8 TcpTestSucceeded : True PS C:\tmp>
以下は対象となるサービスが動作していなかった事により接続が失敗した場合の例。
パケット自体は宛先に届いている為PingSucceededはTrueで返ってくるが、TcpTestSucceededはFalseで返ってくる。
宛先のIPアドレスが間違っている場合、あるいは宛先への通信経路上の機器(例えばファイアウォールやルータ・スイッチのACL設定等)で対象のIPアドレスをPermitする設定が無い場合は、PingSucceededはFalseが出力される。
PS C:\tmp> Test-NetConnection 192.168.3.254 -Port 21 WARNING: TCP connect to (192.168.3.254 : 21) failed ComputerName : 192.168.3.254 RemoteAddress : 192.168.3.254 RemotePort : 21 InterfaceAlias : ワイヤレス ネットワーク接続 SourceAddress : 192.168.3.8 PingSucceeded : True PingReplyDetails (RTT) : 29 ms TcpTestSucceeded : False PS C:\tmp>
6.時刻同期の確認
chronycコマンド
chronyc sourcesを実行し、 ntpq -p実行時のようにNTPサーバとの間で同期が取れているかを確認。管理者権限で実行。
# chronyc sources [sudo] password for hechtia: MS Name/IP address Stratum Poll Reach LastRx Last sample =========================================================================== ^* ntp1.jst.mfeed.ad.jp 2 6 1 47 +5154us[+5154us] +/- 87ms #
ちなみにNTPサーバとの間で強制的に時刻同期させる場合は、以下を実行する。正常に同期出来た際は200 OKを返す。管理者権限で実行。
# chronyc makestep [sudo] password for hechtia: 200 OK #
7.最後の手段
rebootコマンド
OSを再起動したら事象が改善した...は、よくある話。
管理者権限で実行する。最後の手段につき、個人環境はともかく商用環境では上長の指示の下で実行。
Alpine Linuxの場合、shutdown -r コマンドではなくrebootコマンドである。
ちなみに、落とす際のコマンドはhaltやshutdown -hではなく、poweroffである。
# reboot
Alpine Linuxの情報源等
https://alpinelinux.org/ Alpine Linux
https://wiki.alpinelinux.org/wiki/Main_Page Alpine Linux Wiki
https://pkgs.alpinelinux.org/packages Alpine Linux Package Filter ※実行したいコマンドを含むパッケージファイルを検索。
https://alpinelinux.org/downloads/ ダウンロードサイト
https://dl-cdn.alpinelinux.org/alpine/ ダウンロードサイト ※3.0以降の全バージョンおよびアーキテクチャ。
Alpine Linuxに関する記事
https://debslink.hatenadiary.jp/entry/20200418/1587204948 AndroidスマホでAlpine Linuxを動かす
https://debslink.hatenadiary.jp/entry/20200506/1588733149 Androidスマホで動作するAlpine LinuxにてFTPサーバを構築
https://debslink.hatenadiary.jp/entry/20211228/1640668431 Alpine Linuxでawallを使ってiptables設定 (2021/12/28追記)
https://debslink.hatenadiary.jp/entry/20220101/1640973274 Alpine LinuxのFTPで暗号化通信 FTPS編 (2022/1/1追記)
https://debslink.hatenadiary.jp/entry/20220111/1641903376 Alpine LinuxのFTPで暗号化通信 SFTP編 (2022/1/11追記)