はじめに
あらためて、プロセス・スレッド周りの理解をInstanaのログを読むことで深めていきたいと思います。
1. プロセス・スレッド・スレッドプールの違い
プロセス
- 実行中のプログラムの実行単位。
- プログラムの実行に必要な様々なリソースを共通でもつ。
- メモリ、ファイルハンドル、CPU時間
- プロセス間でリソースアクセスするためには、プロセス間の切り替えが必要になるので実行時間がかかる(オーバーヘッドが大きくなる)。
スレッド
- プロセス内の実行単位。
- プロセスの中で、複数のスレッドが動く。CPUやメモリという共通リソースを分けながら動く。(レジスタとスタックは独自に管理)。
スレッドプール
- あらかじめN本のスレッドを生成して、再利用する仕組み。起動コストや、スレッド数の上限を決めて管理できる。
2. Instanaの場合(ログから読み解く)
スレッド
Instana内であるスレッドを見ていきます。
複数のスレッドが同時並行で異なる仕事をしています。
2026-07-01T08:53:24.917GMT-04:00 | INFO | features-3-thread-1 | Installing bundles ...
2026-07-01T08:53:24.935GMT-04:00 | INFO | stana-agent-scheduler-thread-9-3| Installed instana-websphere-liberty-sensor
2026-07-01T08:53:24.941GMT-04:00 | INFO | instana-executor-thread-4-8 | Attaching to JVM with PID 24948
2026-07-01T08:53:26.016GMT-04:00 | INFO | instana-socket-worker-8-1 | commands connection established
2026-07-01T08:53:26.024GMT-04:00 | INFO | instana-socket-worker-8-2 | data connection established
スレッドが担っている役割
| スレッド名 | 役割 | 種別 |
|---|---|---|
features-3-thread-1 |
OSGiフレームワークのFeature(センサー)インストール処理 | インストール |
stana-agent-scheduler-thread-9-3 |
定期スケジューリング(センサー管理タスク) | スケジューラ |
instana-executor-thread-4-8 |
JVMへのアタッチ実行(重い処理を非同期で担当) | 実行ワーカー |
instana-socket-worker-8-1 |
commandsソケットの通信処理 | I/Oワーカー |
instana-socket-worker-8-2 |
dataソケットの通信処理 | I/Oワーカー |
スレッドプール
2026-07-01T08:53:26.016GMT-04:00 | INFO | instana-socket-worker-8-1 | commands connection established
2026-07-01T08:53:26.024GMT-04:00 | INFO | instana-socket-worker-8-2 | data connection established
ログに instana-socket-worker-**8**-1、-8-2 という名前がありますが、この 「8」 はスレッドプールのサイズを示しています。
スレッドプールはあらかじめ決まった数のスレッドを作って待機させておく設計パターンでした。
こちらのログでは -8-1(commandsソケット担当)と -8-2(dataソケット担当)の2本が使われており、残り6本は次のソケット接続要求に備えて待機しています。
instana-socket-worker スレッドプール(最大8本)
├── worker-8-1 ← 使用中(commandsソケット担当)
├── worker-8-2 ← 使用中(dataソケット担当)
├── worker-8-3 ← 待機中
├── worker-8-4 ← 待機中
└── ... 〜8まで待機中
まとめ
プロセス・スレッド・スレッドプールについてInstanaのログから具体的に理解できました。次は、デッドロックなど、障害時によく聞く単語を実機で動かしてみてみたいです。
