우리는 가끔 Java 프로세스(xalan 또는 fop 변환)가 중단되는 것을 볼 수 있는 시스템(Red Hat Enterprise Linux Server 버전 6.6)을 보유하고 있습니다.
이러한 프로세스는 그냥 그대로 있고 완료되지 않습니다.
/var/log/messages에서 다음과 같은 항목을 찾았습니다.
abrt[33580]: Saved core dump of pid 48556 (/usr/bin/jdk1.6.0_06/bin/java) to /var/spool/abrt/ccpp-2017-06-01-08:52:40-48556 (341344256 bytes)
abrtd: Directory 'ccpp-2017-06-01-08:52:40-48556' creation detected
abrtd: Executable '/usr/bin/jdk1.6.0_06/bin/java' doesn't belong to any package and ProcessUnpackaged is set to 'no'
abrtd: 'post-create' on '/var/spool/abrt/ccpp-2017-06-01-08:52:40-48556' exited with 1
abrtd: Deleting problem directory '/var/spool/abrt/ccpp-2017-06-01-08:52:40-48556'
- abrt를 사용하여 문제에 대한 추가 정보를 수집할 수 있습니까?
- ProcessUnpackaged를 yes로 변경하면 도움이 됩니까?
답변1
프로세스가 aborted
하나이거나 있으면 coredump
더 이상 메모리에 존재하지 않습니다. 따라서 프로세스가 정지되었다고 생각되면 pid
프로세스 정보를 얻고 다음 명령을 실행하십시오.
strace -fp <pid> -o strace.out
-- 프로세스가 중단될 수 있는 위치를 나타내는 시스템 호출에 유용합니다(출력 파일 strace.out 참조).
pstree -aAp <pid>
-- 현재 프로그램 실행 라인을 표시합니다.
/usr/bin/gdb -q -p <pid> -- to see the current state of the process.
사용 가능한 것이 있으면 coredump
이를 사용하여 gdb
분석할 수 있습니다.
/usr/bin/gdb <java_binary_path> <coredump_path>
gdb
콘솔 에서는 다음을 사용합니다.
(gdb) bt
(gdb) thread apply all bt