Linux 서버 Java 프로 세 스 사라 짐 문제 해결

이 글 은 리 눅 스 서버 자바 프로 세 스 가 사라 지 는 문제 해결 을 소개 합 니 다.이 글 은 예제 코드 를 통 해 매우 상세 하 게 소개 되 어 있 으 며,여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 고 있 으 며,필요 한 친 구 는 참고 할 수 있 습 니 다.
문제 설명
실제 생산 환경 에서 만약 우리 가 자바 프로 세 스 가 갑자기 사라 지 는 것 을 만난다 면 어떻게 문 제 를 조사 해 야 합 니까?
사고의 방향
몇 가지 이유 가 있 을 수 있 습 니 다.
① 자바 응용 프로그램의 문제점:OOM 발생 으로 인 한 프로 세 스 Crash
가장 흔히 볼 수 있 는 것 은 메모리 이상 이 발생 하 는 것 입 니 다."java.lang.OutOfmory Error:Java heap space",검사 절 차 는 다음 과 같 습 니 다.
  • Step 1:JVM 인자-XX:+HeapDumpOnOutOfmoryError 와-XX:HeapDumpPath=*/java.hprof 보기;
  • Step 2:HeapDumpPath 가 지정 한 경로 에 따라 dump 파일 이 생 성 되 었 는 지 확인 합 니 다.
  • Step 3:dump 파일 이 존재 하면 Jhat,VisualVM 등 도구 로 분석 하면 됩 니 다.
  • ②、JVM 오류:JVM 또는 JDK 자체 버그 로 인 한 프로 세 스 Crash
    JVM 에 치 명 적 인 오류 가 발생 하여 붕 괴 될 때 hs 가 생 성 됩 니 다.err_pid_xxx.log 와 같은 파일 은 JVM crash 를 야기 하 는 중요 한 정 보 를 포함 하고 있 습 니 다.저 희 는 이 파일 이 JVM Crash 를 야기 하 는 원인 을 분석 하여 시스템 의 안정 을 확보 할 수 있 습 니 다.
    기본적으로 이 파일 은 작업 디 렉 터 리 에 생 성 되 며 JVM 매개 변 수 를 통 해 생 성 경 로 를 지정 할 수 있 습 니 다.
    -XX:ErrorFile=/var/log/hs_err_pid.log
    이 문서 의 내용 을 그 는 주로 다음 과 같은 내용 을 가지 고 있다.
  • 로그 헤더 파일
  • crash 를 야기 하 는 스 레 드 정보
  • 모든 스 레 드 정보
  • 안전 점 과 잠 금 정보
  • 더미 정보
  • 로 컬 코드 캐 시
  • 컴 파일 이벤트
  • gc 관련 기록
  • jvm 메모리 맵
  • jvm 시작 매개 변수
  • 서버 정보
  • 이 서 류 를 받 은 후 에는 말 할 필요 도 없 이 천천히 뜯 어 라.여기까지 말 하면 나 는 양심 적 으로 말 할 것 이다.이 문 서 는 매우 복잡 하 니,만약 이 문 서 를 읽 을 줄 안다 면,좀 공 을 들 여 주 십시오.
    ③ 피 운영 체제 OOM-Killer
    Linux 커 널 에는 OOM killer(Out-Of-Memory killer)라 는 메커니즘 이 있 습 니 다.이 메커니즘 은 메모 리 를 너무 많이 사용 하 는 것 을 감시 합 니 다.특히 순간 에 대량의 메모 리 를 소모 하 는 프로 세 스 를 감시 합 니 다.메모리 소 모 를 방지 하기 위해 커 널 은 이 프로 세 스 를 죽 입 니 다.
    그래서 자바 프로 세 스 가 갑자기 사 라 졌 다 는 것 을 알 게 되 었 습 니 다.먼저 Liux 의 OOM killer 에 의 해 해 해 킹 되 었 는 지 의심 해 야 합 니 다!
    너 는 아래 의 이 서류 안 으로 가서 뒤 져 도 된다.
    시스템 오류 로그:/var/log/messages
    명령 을 집행 하 다.
    
    egrep -i 'killed process' /var/log/messages 
    # egrep = grep -E             ,          , -i        
    #  
    grep “Out of memory” /var/log/messages
    로그 에 가서 조회 하 다.
    물론 커 널 로그 에서 도 알 아 볼 수 있다.가끔 은 Linux 시스템 이나 시스템 에서 실행 되 는 자바 나 다른 프로 세 스 에 이상 한 문제 가 발생 할 수 있 습 니 다.예 를 들 어 갑자기 끊 겼 습 니 다.예 를 들 어 갑자기 다시 시작 하 는 등 입 니 다.소프트웨어 에서 문제점 을 찾 을 수 없습니다.이때 우 리 는 하드웨어 나 커 널 의 문 제 를 의심 해 야 합 니 다.이때 우 리 는 dmesg 를 사용 하여 볼 수 있 습 니 다.
    
    dmesg -T| grep java
    #  
    dmesg -T | grep 'Out of memory'
    # -T       

    자바 로그 정지 시간 을 비교 해 보면 여기 가 문제 의 근원 인 것 같 습 니 다.그 러 니 자바 메모리 사용량 최적화,메모리 추가 에 착안 하여 문 제 를 해결 해 보 세 요!
    비고:
    dmesg 명령 은 유 닉 스-like 시스템 에서 커 널 에 대한 정 보 를 표시 하 는 데 사 용 됩 니 다.dmesg 는 모두 display message(or display driver),즉 정 보 를 표시 합 니 다.
    실제로 dmesg 명령 은 커 널 링 버퍼 에서 데 이 터 를 가 져 옵 니 다.우리 가 Linux 에서 고장 을 제거 할 때 dmesg 명령 은 매우 편리 할 것 입 니 다.하드웨어 와 관련 된 error 와 warning 을 잘 감별 할 수 있 습 니 다.그 밖 에 dmesg 명령 은 데 몬 과 관련 된 정 보 를 출력 할 수 있 습 니 다.debug 를 도 왔 습 니 다.

    좋은 웹페이지 즐겨찾기