ソケット エラーにより jmap を実行できません: 強制接続に '-F' オプションを使用する
ヒープ ダンプを取得しようとしたときjmap を使用すると、「ソケット ファイルを開けません」というエラー メッセージが表示される場合があります。これは、ターゲット プロセスが応答しないか、HotSpot VM がロードされていないことを示唆しています。 「-F」オプションの使用は、この障害を克服する潜在的な解決策として機能します。
jmap と jmap '-F': 独特の動作モード
jmap、 「-F」フラグを指定せずに呼び出すと、ターゲット JVM との通信に動的接続メカニズムを利用します。このメカニズムには、次の一連のステップが含まれます。
- ターゲット プロセスの作業ディレクトリ内にファイル (例: .attach_pid1234) を作成します。
- ターゲット プロセスに SIGQUIT シグナルを送信し、プロンプトを表示します。 JVM が AttachListener スレッドを開始します。
- 外部ツールからコマンドを受信するための UNIX ドメイン ソケットを確立します。
- セキュリティ目的で接続ソケットの資格情報 (euid および egid) を検証します。
- ソケットへの接続、ダンプヒープ コマンドの送信、JVM の AttachListener スレッドからの出力の受信。
動的アタッチの利点と欠点:
-
長所:
- JVM によって共同実行される高速ヒープダンプ。
- jmap と JVM の異なるバージョン間の互換性。
-
短所:
- ターゲット JVM と同じユーザー (euid/egid) に限定されます。
jmap '-F' モード: HotSpot Serviceability Agent の利用
あるいは、jmap '-F' は HotSpot Serviceability Agent を使用して、別の動作モードを提供します。このシナリオでは、次の手順が発生します。
- PTRACE_ATTACH がターゲット JVM で呼び出され、SIGSTOP シグナルでプロセスが無条件に一時停止されます。
- プロセスの PTRACE_PEEKDATA を使用して JVM メモリが読み取られます。これは、一度に 1 ワードずつ読み取る必要があるため、大幅に遅くなります。
- JVM の内部構造は、ターゲット JVM のバージョンに基づいて再構築されます。
- ヒープ ダンプは、実行を再開する前にツールによって生成されます。ターゲット プロセス。
「-F」モードの利点と欠点:
-
長所:
- ターゲット JVM 連携は不要です。
- ハングしたプロセスにも適用できます。
- 特権ユーザー (root など) は、他のユーザーのプロセスをダンプできます。
-
短所:
- 大きなヒープでは速度が遅い。
- jmap とターゲット JVM のバージョンが一致する必要がある。
- セーフポイントは保証されていないターゲット JVM の状態に不一致が生じる可能性があります。
以上がソケットエラーが発生したときに jmap で「-F」オプションを使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。