Linux備忘録12:プロセス、ポート(ps、lsof)、CPUについて

個人備忘録用のため、内容や記述に誤りがあったら申し訳ありません。

 

【ポート番号を使用しているファイルやプロセスを特定する】

<lsof>コマンド:

プロセスが開いているファイルを表示

# lsof -p {プロセス番号}

⇒逆も可

# lsof {ファイルパス}

 

特定ポートの使用状況を調べる

# lsof -i :{ポート番号}

 {:}必須

 ⇒※上記は省略系:正式には[lsof -i(ipv) {protocol}@{server}:{port}]といった感じで指定

 

※※出力内容概要

【COMMAND】⇒ そのプロセスを起動しているコマンド(サービス)

【PID】      ⇒プロセスID

【NAME】   ⇒(LISTEN)と記載されているのがそのポートを待ちうけているプロセス情報

 

上記を利用して確認したプロセスIDを使用してサービスを特定するシェルスクリプト

#!/bin/bash
pid=$1
 systemctl list-units --type=service | \
  cut -d " " -f 1 | \
   while read name
    do
     if systemctl status ${name} | grep -E "PID: +${pid}" ;then
      echo "Service is: ${name}"
      break
     fi
    done

 

 

【psコマンドを使用してプロセス情報を調べる】

 

 <ps>コマンド:

実行中のプロセスの一覧に特定プロセスが含まれるか検索。

# ps -ef | grep "{キーワード}” | grep -v "grep"

プロセスのステータス等を表示したい場合は以下のオプション

# ps aux

 

※※出力内容概要

USER->プロセスの実行ユーザー

%CPU->プロセスのCPU使用率(CPU利用時間/実際の時間)

%MEM->プロセスが確保している物理メモリを百分率で表示

VSZ、RSS->それぞれプロセスが仮想メモリ領域のサイズ、物理メモリ領域のサイズ。後述 大量のスワップが発生している場合、原因となっているプロセスは物理メモリを消費しているとうことなのでRSS列の値が高いも プロセスを確認する必要があります。

STAT->プロセスの状態。後述

---------------------------------------------------------------------------------------------------------------------
①STAT列の1文字目はプロセスの以下を状態を表します。

「R」 ->CPU使用中。実行可能状態なプロセス(実際に実行していないCPU割り当て待ちのプロセスも含む)
「S」 ->割り込み可能な待ち状態。主に復帰時間が予想できるもの。sleepやユーザーの入力待ちなど
「D」 ->ディスクIO待ちの状態(※割り込み不能)

「T」 ->STOPシグナルで一時停止している

「Z」 ->ゾンビプロセス状態(親プロセスに待たれずに死んでしまった子プロセス)

 

②2文字目以降は以下を表す状態。
「+」 ->フォアグラウンドのプロセスグループ
「s」 ->セッションリーダー。httpd等の場合、rootユーザーで実行しているものがセッションリーダーとなっているのがわかる。

「>」 ->優先度が高いプロセス
「N」 ->優先度が低いプロセス
「-l」 ->マルチスレッドのプロセス
---------------------------------------------------------------------------------------------------------------------

 

【プロセスのフルパスを取得する】

topやpsコマンドでは相対パスシンボリックリンクでのコマンド、プログラム名が表示されているため、以下でフルパス取得出来る。

# ls -l /proc/{対象プロセスID}/exe

 →各スレッド(?)等のプログラム大元が確認出来る。

 

※参考例

 →一番メモリ使用率が高いプロセスを確認したらこんな感じだった.

#  ls -l /proc/26212/exe
lrwxrwxrwx 1 oracle oinstall 0 11月 20 22:11 /proc/26212/exe -> /opt/oracle/product/19c/dbhome_1/bin/oracle

 

【CPUについて】

 

物理 CPU の数の確認コマンド

# fgrep 'physical id' /proc/cpuinfo | sort -u | wc -l

 

CPUコア数の確認コマンド
※最近の CPU では、物理的に 1 つの CPU 上に、複数のコアがあるものがある。

# fgrep 'cpu cores' /proc/cpuinfo | sort -u | sed 's/.*: //'

 

論理プロセッサー数(スレッド数)の確認コマンド

# fgrep 'processor' /proc/cpuinfo | wc -l