Linuxサーバーを管理するには、サーバー内で稼働しているプロセスの状況を把握し、必要に応じて強制終了するなどの対応が必要です。
本記事では、Linuxプロセスの稼働状況を把握する方法や、強制終了する
方法について解説します。
VPSならミライサーバー
\2週間無料・全プランSSD搭載/
ミライサーバーを無料で試す
目次
Linuxのプロセスとは
プロセスの概要と、状態遷移について解説します。
プロセスとは
プロセスとは、Linux上で実行中のプログラムのことです。
Linuxでは、非常に多くのプログラムが並行して実行されていますが、その1つ1つがプロセスです。
プロセスにはプロセスIDと呼ばれる一意の番号が割り当てられており、一番最初に起動するプロセスはIDが1です。
このプロセスは特別なプロセスであり、全てのプロセスの「親プロセス」にあたります。
新たにプロセスが生成されると、プロセスIDが割り当てられ、子プロセスとして動作します。
Linuxを管理する上では、「稼働しているプログラムが正常に動作しているか」、「CPUやメモリなどのリソースをどれだけ使っているか」を把握することが重要です。
たとえば、CPUを長時間使用するような重い処理を実行していないか、実行したまま応答がないプログラムがないかを確認します。
CPUやメモリなどのリソースを大量に消費すると、処理が重くなるなどシステム運用に支障をきたします。
そのような状態を未然に防ぐため、プロセスの稼働状況を常時監視し、万が一異常が発生した場合には、プロセスを強制終了するなどの対応が必要です。
このように、システムを安定稼働させるには、プロセスの状態監視が欠かせません。
プロセスの稼働状況を理解し、適切な対応がとれるようにしましょう。
プロセスの状態遷移
プロセスの稼働状況を把握するには、プロセスの状態遷移について理解しておくことが大切です。
プロセスには「実行可能状態」「実行状態」「待ち状態」の3つの状態遷移があります。
最初にコマンドやプログラムを実行すると、Linuxによってプロセスが生成されます(実行可能状態)。
その後、OS(Linux)によってCPUやメモリなどのリソースを割り当てられ、処理が実行されます(実行状態)。
コンピューターでは、複数のプロセスが並行して同時に稼働しているように見えますよね。
実際は、非常に短い時間でCPUが割り当てられ、終了すると別のプロセスがCPUを割り当てられて動作する、という流れを繰り返しています。
割り当てられたCPU時間で処理が完了しない場合、再び実行可能状態に戻ります。
CPUを割り当てられるたびに実行可能状態と実行状態を繰り返し、処理が完了すると、プロセスはなくなります。
実行するコマンドやプログラムによっては、キーボードによる入力待ちや、ディスク読み込み・書き込みなどの入出力処理による待ちが発生します。
その場合は、入出力処理が完了するまで、プロセスは「待ち状態」となります。
入出力処理が完了すると、再び「実行可能状態」に戻ります。
以上が、処理が稼働している中での「プロセスの状態遷移」です。
これ以外にも、例外的なステータスとして「ゾンビ」があります。
ゾンビプロセスは、本来であれば処理が終了してプロセスがなくなるべきところが、何らかの理由で残っているプロセスのことです。
プログラムが動作しないまま、CPUやメモリなどのリソースが確保された状態であるため、リソースを無駄に消費しています。
プロセスを管理するには、プロセスがどういう状態であるかを理解することが大切です。
プロセスの稼働状況を確認して現在の状態がわかると、実行状態が続いているのか、待ち状態が続いているのかで原因の切り分けができるようになります。
たとえば、CPU割り当て時間を長時間使っている場合は、重たい処理を実行していることを意味します。
逆に、入出力時間が多いと、待機状態が長く続くことになります。
入出力待ちか、ディスクから大量データを読み書きしているか、というCPU以外が原因です。
Linuxのプロセス管理に役立つコマンド
ここからは、実際にプロセスの稼働状況を確認するコマンドを解説します。
特によく使われるコマンドが「psコマンド」と「topコマンド」です。
psコマンドでプロセスの稼働状況を確認
psコマンドは、プロセスの状態を確認する最も基本的なコマンドです。
現在ログインしているユーザーが実行しているプロセスを表示します。
$ ps
※出力例
PID TTY TIME CMD
2954 pts/0 00:00:00 bash
3217 pts/0 00:00:00 ps
psコマンドはたくさんのオプションがありますが、サーバー全体で稼働しているプロセスを知りたい場合、一般的には「aux」を付与します。
$ ps aux
※出力例
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 1056 72 ? S 18:40 0:00 init [3]
root 1377 0.0 2.4 2324 1176 pts/0 S 20:52 0:00 bash
root 1380 0.0 3.6 3460 1844 pts/0 S 20:52 0:00 kterm
root 2382 0.0 1.4 2320 1168 pts/1 S 20:52 0:00 bash
root 4403 0.0 1.4 2456 888 pts/0 R 20:56 0:00 ps aux
出力内容は以下のとおりです。
出力内容 | 説明 |
---|---|
USER | 実行しているユーザー名 |
PID | プロセスID |
%CPU | CPU使用率 |
%MEM | メモリ使用率 |
VSZ | 仮想メモリのサイズ |
RSS | 実際の使用メモリサイズ |
TTY | 端末 |
STAT | プロセスの状態 R:実行可能状態または実行中 S:待ち状態(割り込み可能) D:待ち状態(割り込み不可) T:実行中断 Z:ゾンビ状態 |
START | プロセス生成時刻 (処理開始時刻) |
TIME | CPU実行時間 |
COMMAND | 実行されているコマンド |
このようにpsコマンドを実行すると、実行しているコマンドおよびプロセスのCPUやメモリの使用率、プロセスの状態がわかります。
しかし、psコマンドは実行したタイミングでのプロセス稼働状況しかわかりません。
リアルタイムでプロセス状況を把握したい場合は、topコマンドが便利です。
$ top
※出力例
top – 22:36:35 up 36 days, 19:29, 1 user, load average: 0.00, 0.01, 0.02
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882460 total, 833584 free, 806116 used, 242760 buff/cache
KiB Swap: 1679356 total, 1505020 free, 174336 used. 908044 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30894 root 20 0 161888 2208 1552 R 0.7 0.1 0:00.12 top
1056 root 20 0 574196 696 256 S 0.3 0.0 26:32.17 tuned
1 root 20 0 191064 2744 1584 S 0.0 0.1 9:19.03 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.54 kthread
:
(以下省略)
psコマンドやtopコマンドでプロセスの稼働状況を常にチェックし、異常時に確認できるようにするとよいでしょう。
Linuxのプロセスの強制終了
プログラム実行後に応答が返ってこないまま処理が終わらない場合や、CPUやメモリなどリソースを大量消費しシステムに影響が出ている場合は、プロセスを強制停止することがあります。
プロセスを停止するには、killコマンドを実行します。
プロセスIDを指定することで、そのプロセスに対してシグナルを送ることができます。
$ kill <プロセスID>
プロセスIDは、psコマンドやtopコマンドで確認します。
間違って別のプロセスを終了してしまわないように注意しましょう。
killコマンドの後にオプションとしてシグナル番号を指定することで、プロセスに対して該当のシグナルを送ります。
シグナル番号を指定しない場合、「15」(SIGTERM)が送られます。
シグナルには、以下のような種類があります。
シグナル番号 | シグナル名 | 意味 |
---|---|---|
1 | SIGHUP | ハングアップ |
2 | SIGINT | 割り込み(Ctrl+C) |
3 | SIGQUIT | 中止(Ctrl+¥) |
9 | SIGKILL | プロセスの強制終了 |
15 | SIGTERM | プロセスの終了(デフォルト) |
18 | SIGCONT | プロセスの再開 |
19 | SIGSTOP | プロセスの停止(Ctrl+Z) |
killコマンドでも終了しない(killコマンドを受け付けない)場合は、「-9」のシグナル番号を使用して強制終了させます。
$ kill -9 <プロセスID>
まとめ
今回はLinuxのプロセス管理について解説しました。
Linuxサーバーの管理をするうえで、プロセス管理は基本です。
サーバーを安定稼働させるためには、プロセスの稼働状態を監視し、トラブルが発生したときに状況を把握、すぐに対応できるようにすることが大切です。
psやtopコマンドはプロセスを管理するうえで基本かつ便利なコマンドなので、必ず使いこなせるようになりましょう。
UnixやLinuxのVPSならミライサーバー
ミライサーバーは、アシストアップ株式会社が提供している、Unix系サーバーに特化したホスティングサービスです。
ミライサーバーのVPSでは、高速処理が可能なSSDを全プランに搭載しています。
OSは、UbuntuやDebian、AlmaLinuxなどの豊富なラインアップから選択できます。
2週間無料トライアルを実施しておりますので、まずはお気軽にお試しください。