04. process: 実行単位とメモリの基本

04. process: 実行単位とメモリの基本

DockerやEC2でアプリを動かしていると、CPU使用率やメモリ使用量を見ます。

その実体は、Linuxのprocess管理とメモリ管理です。

processは何か

processは「実行中プログラムのインスタンス」です。

  • 同じnginxバイナリでも、起動すれば複数processになれる
  • 各processはPIDを持つ
  • 親子関係を持つ

図解テキスト


systemd (PID 1)
  ├─ sshd
  │   └─ bash
  │       └─ python app.py
  └─ nginx master
      ├─ nginx worker 1
      └─ nginx worker 2

メモリの見え方

processには仮想メモリ空間があります。

  • text: 実行コード
  • data/bss: グローバル変数
  • heap: 動的確保
  • stack: 関数呼び出し

Linuxは仮想メモリを使い、物理メモリへの割り当てを管理します。

手を動かす


ps -eo pid,ppid,comm,%cpu,%mem --sort=-%cpu | head
pstree -p | head -n 30
cat /proc/self/status | head -n 25
free -h

process管理で大切な視点

  • 実行中の数だけでなく、状態をみる (R/S/D/Z)
  • メモリ使用量はRSSとVSZの違いを意識する
  • 親子関係が壊れるとゾンビprocessが残ることがある

つまり何なのか

「アプリが重い」は抽象的な現象です。

Linuxでは、実体はprocessとメモリの状態変化として観測できます。

今回理解できたこと

  • processはOSが管理する実行単位
  • メモリは仮想化され、processごとに分離される
  • /procを見ると、processの内部状態を確認できる

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です