소켓 오류로 인해 jmap을 실행할 수 없음: 강제 연결을 위해 '-F' 옵션 사용
힙 덤프를 얻으려고 할 때 jmap을 사용하면 "소켓 파일을 열 수 없습니다"라는 오류 메시지가 나타날 수 있습니다. 이는 대상 프로세스가 응답하지 않거나 HotSpot VM이 로드되지 않았음을 의미합니다. '-F' 옵션을 사용하면 이러한 장애물을 극복할 수 있는 잠재적인 솔루션이 됩니다.
jmap과 jmap '-F': 고유한 작동 모드
jmap, '-F' 플래그 없이 호출되면 대상 JVM과의 통신을 위해 동적 연결 메커니즘을 활용합니다. 이 메커니즘에는 일련의 단계가 포함됩니다.
- 대상 프로세스의 작업 디렉터리 내에 파일(예: .attach_pid1234)을 생성합니다.
- 대상 프로세스에 SIGQUIT 신호를 보내 메시지를 표시합니다. AttachListener 스레드를 시작하기 위한 JVM.
- 외부 도구로부터의 명령 수신을 위한 UNIX 도메인 소켓 설정
- 보안을 위해 연결 소켓의 자격 증명(euid 및 egid)을 확인합니다.
- 소켓에 연결하고, dumpheap 명령을 전송하고, JVM의 AttachListener 스레드에서 다시 출력을 수신합니다.
동적 연결의 장점과 단점:
-
장점:
- JVM이 공동으로 실행하는 고속 힙 덤프.
- 다른 버전의 jmap과 JVM 간 호환성.
-
단점:
- 대상 JVM과 동일한 사용자(euid/egid)로 제한됩니다.
jmap '-F' 모드: HotSpot 서비스 가능성 에이전트 활용
또는 jmap '-F'는 HotSpot 서비스 가능성 에이전트를 사용하여 별도의 작동 모드를 제공합니다. 이 시나리오에서는 다음 단계가 발생합니다.
- PTRACE_ATTACH가 대상 JVM에서 호출되어 SIGSTOP 신호로 프로세스를 무조건 일시 중지합니다.
- 프로세스인 PTRACE_PEEKDATA를 사용하여 JVM 메모리를 읽습니다. 한 번에 한 단어씩 읽어야 하기 때문에 상당히 느립니다.
- JVM 내부 구조는 대상 JVM 버전을 기준으로 재구성됩니다.
- 힙 덤프는 작업을 재개하기 전에 도구에 의해 생성됩니다. 대상 프로세스입니다.
'-F' 모드의 장점과 단점:
-
장점:
- 대상 JVM 협력이 필요하지 않습니다.
- 정지된 프로세스에도 적용 가능합니다.
- 권한이 있는 사용자(예: 루트)는 다른 사용자의 프로세스를 덤프할 수 있습니다.
-
단점:
- 대형 힙의 경우 속도가 느립니다.
- jmap과 대상 JVM의 버전이 일치해야 합니다.
- Safepoint가 보장되지 않습니다. , 잠재적으로 대상 JVM 상태의 불일치로 이어질 수 있습니다.
위 내용은 소켓 오류가 발생할 때 jmap에서 '-F' 옵션을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!