연결 문제 해결
프로파일링 세션을 설정할 수 없을 때, 가장 먼저 해야 할 일은 프로파일된 애플리케이션 또는 애플리케이션 서버의 터미널 출력을 확인하는 것입니다. 애플리케이션 서버의 경우, stderr 스트림이 종종
로그 파일에 기록됩니다. 이는 애플리케이션 서버의 주요 로그 파일이 아닌 별도의 로그 파일일 수 있습니다. 예를 들어, Websphere 애플리케이션 서버는
native_stderr.log
파일을 작성하여 stderr 출력만 포함합니다. stderr 출력의 내용에 따라 문제를 찾는 방향이 달라집니다:
연결 문제
stderr에 "Waiting for connection ..."
이 포함되어 있으면, 프로파일된 애플리케이션의 구성은 정상입니다. 문제는 다음 질문과 관련이 있을 수
있습니다:
- 로컬 머신의 JProfiler GUI에서 "Attach to remote JVM" 세션을 시작하는 것을 잊으셨나요? 프로파일링 에이전트가 "nowait" 옵션으로 즉시 시작하도록 구성되지 않은 한, JProfiler GUI가 연결될 때까지 VM이 시작을 계속하지 않습니다.
- 세션 설정에서 호스트 이름이나 IP 주소가 올바르게 구성되어 있습니까?
-
잘못된 통신 포트를 구성했습니까? 통신 포트는 HTTP 또는 다른 표준 포트 번호와 관련이 없으며 이미 사용 중인 포트와 동일해서는 안 됩니다. 프로파일된 애플리케이션의 경우, 통신 포트는 프로파일링
VM 매개변수의 옵션으로 정의됩니다. VM 매개변수
-agentpath:<path to jprofilerti library>=port=25000
을 사용하면 25000 포트가 사용됩니다. -
루프백 인터페이스에서만 수신 대기하는 직접 연결로 에이전트에 연결하려고 합니까? 기본적으로 에이전트는 루프백 인터페이스에서만 수신 대기합니다. JProfiler를 구성하여 원격 머신에 SSH 터널을
설정할 수 있습니다. 암호화가 필요하지 않다면
address=[IP address]
옵션을-agentpath
매개변수에 사용할 수도 있습니다. - 로컬 머신과 원격 머신 사이에 방화벽이 있습니까? 들어오는 연결뿐만 아니라 나가는 연결에 대한 방화벽이나 중간의 게이트웨이 머신에 방화벽이 있을 수 있습니다.
포트 바인딩 문제
stderr에 소켓을 바인딩할 수 없다는 오류 메시지가 포함되어 있으면, 포트가 이미 사용 중입니다. 이 경우, 다음 질문을 확인하십시오:
- 프로파일된 애플리케이션을 여러 번 시작했습니까? 각 프로파일된 애플리케이션은 별도의 통신 포트가 필요합니다.
- 이전 프로파일링 실행의 좀비 Java 프로세스가 포트를 차단하고 있습니까?
- 통신 포트를 사용하는 다른 애플리케이션이 있습니까?
stderr에 JProfiler>
로 시작하는 줄이 없고 애플리케이션 또는 애플리케이션 서버가 정상적으로 시작되면, -agentpath:[path to jprofilerti library]
VM 매개변수가 Java 호출에 포함되지 않았습니다. 시작 스크립트에서 실제로 실행되는 Java 호출을 찾아 VM 매개변수를 추가해야 합니다.
Attach 문제
실행 중인 JVM에 attach할 때, 관심 있는 JVM이 모든 JVM 목록에 표시되지 않을 수 있습니다. 이 문제의 원인을 찾으려면 attach 메커니즘이 어떻게 작동하는지 이해하는 것이 중요합니다.
JVM이 시작되면, 임시 디렉토리의 hsperfdata_$USER
디렉토리에 PID 파일을 작성하여 발견됩니다. 동일한 사용자나 관리자 사용자만 JVM에 attach할 수
있습니다. JProfiler는 관리자 사용자로 JVM에 연결하는 데 도움을 줄 수 있습니다.
Windows에서는 Show Services 버튼을 사용하여 모든 JVM 서비스 프로세스를 표시할 수 있습니다. JProfiler는 시스템 계정으로 실행되는 서비스와 구성된 사용자 계정으로 실행되는 서비스에 연결할 수 있는 시스템 계정으로 실행되는 도우미 서비스를 설치합니다. 해당 서비스의 이름은 "JProfiler helper"이며, 해당 버튼을 클릭하면 설치됩니다. 서비스 설치를 허용하려면 UAC 프롬프트를 확인해야 합니다. JProfiler가 종료되면 서비스는 다시 제거됩니다.
Linux에서는 attach 대화 상자에서 사용자 전환기를 사용하여 root 계정으로 attach할 수 있습니다. 이 사용자 전환기는 로컬 JVM을 프로파일링할 때뿐만 아니라 원격 Linux 또는 macOS 머신에 attach할 때도 표시됩니다. 원격 attach의 경우, 다른 비-root 사용자로 전환할 수도 있습니다. root 비밀번호가 있는 경우, 서비스를 실행하는 실제 사용자보다는 항상 root로 전환하십시오.
Linux에서 JVM이 표시되지 않는 경우, 문제는 일반적으로 임시 디렉토리와 관련이 있습니다. 한 가지 가능성은 /tmp/hsperfdata_$USER
디렉토리의 액세스 권한이
잘못된 것입니다. 이 경우, 디렉토리를 삭제하고 JVM을 다시 시작하십시오. attach할 프로세스는 /tmp에 쓰기 권한이 있어야 하며, 그렇지 않으면 attach가 지원되지 않습니다.
systemd를 사용하는 경우, 관심 있는 프로세스가 systemd 서비스 파일에 PrivateTmp=yes
로 설정되어 있을 수 있습니다. 그러면 pid 파일이
다른 위치에 작성됩니다. attach 대화 상자에서 사용자 전환기를 사용하여 root 사용자로 전환하거나 CLI 도구를 root로 사용하면 JProfiler가 이를 처리합니다.
원격 attach를 위한 자동 에이전트 다운로드
원격 attach의 경우, JProfiler는 원격 대상 플랫폼에 대한 에이전트 라이브러리가 필요합니다. 로컬에 사용 가능한 라이브러리가 없으면 다운로드를 시도합니다. 이 작업은 HTTPS 연결을
https://download.ej-technologies.com
로 차단하거나 중간자 공격 방식으로 SSL 연결을 검사하여 트래픽을 해독하는 방화벽이 있는 경우 실패할 수
있습니다. 후자의 경우, JProfiler는 방화벽의 인증서를 가지고 있지 않기 때문에 HTTPS 연결이 실패합니다.
에이전트 다운로드 오류가 발생하면 JProfiler는 수동 해결 방법을 제공합니다. 대화 상자가 표시되어 웹사이트에서 에이전트 아카이브를 수동으로 다운로드하고 원격 attach 작업을 계속하기 전에 다운로드한 아카이브를 찾는 방법을 보여줍니다.
에이전트 파일은 캐시되기 때문에, 이는 각 원격 플랫폼에 대한 일회성 작업입니다. JProfiler가 업데이트되면 에이전트가 변경되며 다운로드를 다시 수행해야 합니다.