Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

LinuxでCPU使用率の高い「more」プロセスを特定する方法

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!
スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

LinuxでCPU使用率の高い「more」プロセスを特定する方法

サーバを運用していると、topps で見慣れないプロセスが高いCPU使用率を出していることがあります。今回は、CPUを使い続けていた more プロセスを例に、何を実行しているのか、どのユーザ・端末から起動されたのかを調べる手順をまとめます。

この記事では実際のサーバ名、IPアドレス、ユーザ名、ファイルパス、PIDはダミーに置き換えています。

想定する状況

サーバ上でCPU使用率を確認したところ、more というプロセスが高いCPUを使っていました。

PID    USER   %CPU  COMMAND
12345  root   58.4  more .bash_history

more はファイル内容をページ単位で表示するためのページャです。通常は長時間CPUを使い続けるようなプロセスではありません。そのため、端末切断や標準入出力の異常などで取り残されている可能性があります。

まずCPU使用率順にプロセスを確認する

CPUを多く使っているプロセスを確認します。

ps -eo pid,ppid,user,stat,tty,lstart,pcpu,pmem,etime,args --sort=-pcpu | head -40

確認するポイントは次のとおりです。

  • PID: 問題のプロセスID
  • PPID: 親プロセスID
  • USER: 実行ユーザ
  • STAT: プロセス状態
  • TTY: 紐づいている端末
  • %CPU: CPU使用率
  • ETIME: 起動してからの経過時間
  • ARGS: 実行コマンド

例では、root ユーザで more .bash_history が長時間動いていることが分かります。

moreプロセスだけを詳しく見る

more のプロセスを一覧します。

pgrep -a more

PIDが分かったら、対象プロセスの詳細を確認します。

ps -o pid,ppid,user,stat,tty,lstart,pcpu,pmem,etime,args -p 12345

ここで PPID を確認します。親プロセスをたどることで、どのシェルやログインセッションから実行されたのかを推測できます。

親プロセスをたどる

親プロセスを確認します。

ps -o pid,ppid,user,stat,tty,lstart,pcpu,pmem,etime,args -p 12300

pstree が使える環境なら、プロセスツリーで見ると分かりやすくなります。

pstree -aps 12345

例えば次のように表示される場合があります。

systemd,1
  `-sudo,12290 su -
      `-su,12300 -
          `-bash,12301
              `-more,12345 .bash_history

この場合、一般ユーザでログインしたあと、su - で root になり、その root シェル上で more .bash_history を実行した流れだと分かります。

開いているファイルと端末を確認する

対象プロセスが開いているファイルを確認します。

sudo lsof -p 12345

例として、次のような出力が得られることがあります。

COMMAND  PID    USER  FD   TYPE  NAME
more     12345  root  cwd  DIR   /root
more     12345  root  0u   CHR   /dev/pts/3 (deleted)
more     12345  root  1u   CHR   /dev/pts/3 (deleted)
more     12345  root  2u   CHR   /dev/pts/3 (deleted)
more     12345  root  4r   REG   /root/.bash_history

ここで重要なのは次の2点です。

  • /root/.bash_history を読んでいる
  • 標準入力・標準出力・標準エラーが /dev/pts/3 (deleted) になっている

/dev/pts/3 (deleted) は、元の端末がすでに消えていることを示しています。つまり、SSHセッションなどが切断されたあと、more だけが取り残されている状態です。

ログイン元を確認する

端末番号が分かったら、誰のログインセッションだったのかを確認します。

who -a

過去のログイン履歴も確認します。

last -w | egrep "pts/3|example-user|admin-user"

例えば次のように表示されれば、example-user203.0.113.10 からログインしていたセッションだと分かります。

example-user  pts/3  203.0.113.10  Thu Jun 25 17:20

今回の判断

調査結果をまとめると、次のようになります。

  • CPUを使っていたのは more .bash_history
  • 実行ユーザは root
  • 作業ディレクトリは /root
  • 読んでいたファイルは /root/.bash_history
  • 親プロセスは root のシェル
  • 元の端末は /dev/pts/3 (deleted) になっており、すでに切断済み

そのため、これはサービスやアプリケーションの異常というより、切断済みの管理用セッションに残ったページャプロセスと判断できます。

止めてもよいか判断する

more は単にファイルを表示しているだけのプロセスです。今回のように切断済み端末にぶら下がっている場合は、停止して問題ないことが多いです。

sudo kill 12345

親のシェルも不要であれば、関連プロセスごと停止します。

sudo kill 12345 12301 12300

ただし、PIDは環境ごとに異なります。実行前に必ず pspstree で対象を確認してください。

調査に使ったコマンドまとめ

ps -eo pid,ppid,user,stat,tty,lstart,pcpu,pmem,etime,args --sort=-pcpu | head -40
pgrep -a more
ps -o pid,ppid,user,stat,tty,lstart,pcpu,pmem,etime,args -p 12345
pstree -aps 12345
sudo lsof -p 12345
who -a
last -w | egrep "pts/3|example-user|admin-user"

まとめ

CPU使用率の高い見慣れないプロセスを見つけたときは、プロセス名だけで判断せず、親プロセス、開いているファイル、端末、ログイン履歴を順番に確認すると原因を絞り込めます。

moreless のようなページャが高CPUで残っている場合、切断済み端末に取り残されているだけのケースがあります。lsof/dev/pts/N (deleted) が見えた場合は、その可能性が高いです。

タイトルとURLをコピーしました