728x90
반응형

JVM(Java Virtual Machine)이 비정상동작하였을 때,  죽으면서 그 원인을 기록하는 것입니다.

 

죽으면서까지 어떤 기록을 남기는 기술을 hs (hot spot)으로 칭하면서  파일 이름이 hs_err 를 포함하는 것 같습니다.

 

1. 언제 생성시키나?

    예를 들면,   메모리 부족할 때 메모리를 할당하고자 할 때 처럼   일반적으로 오류가 있을 때.  

    즉 충분히 예측되는 예외사항(handled exception?) 때는 파일을 남긴다고 합니다.

 

2. 항상 발생시키는가?

    그렇지 않다고 합니다.  어떤 감당하기 어려운 사항(unhandled exception)일 경우에는  파일을 남기지 않을 수 있다고 합니다.

 

3. 어디에 크래시(crash) 파일이 있는가?

    특별한 옵션 지정을 하지 않았다면,   일반적으로  수행/실행시킨 경로에 파일이 만들어집니다.( Working directory of the process )

    특별한 경우 즉,   디스크용량 부족, 권한 부족한 경우네는 /tmp  파일에 저장될 수도 있습니다.

 

4.  저장경로를 지정할 수 있는가?

    지정할 수 있습니다.     JAVA 구동 명령어에  '-XX:ErrorFile=/logs/ezdas/ezdasX/log/hs_error_pid%p.log'  을 추가한 후 구동시킵니다. 물론 지정경로에 대해 파일쓰기 권한을 부여합니다. 여기서 X는 0 또는 1의 값입니다.

 

5. 크래시 파일은 어떤 정보를 가지는가?

   Thread, SigInfo, VM State, System Information, VM arguments, Environment Variables, CPU, Memory, vm_info, Resiter, Top of Stack, Instruction, Stack Info, pid, java frames, Dynamic libararies

 

6. ezDAS 서버에 왜  파일 기록이 없을까?

     2번 항목에 의해, unhandled exception이 발생하였으면  기본 워킹 디렉토리(/app/exdas/ezdasX/bin/) 에 파일이  없을 수 있습니다. 여기서 X 는 0 또는 1의 값입니다.

    또는,  connector 서버( java.io.IOException: Too many open files ) 의  File open 후 close하지 않아서,  라이브러리 로딩 에러 발생 초래하는 경우이면,  파일을 기록하지 못할 수 있습니다.

   또는   ulimit -a 로 조회하였을 때,  core file size 가 0 이면  파일이 저장되지 않을 수 있습니다.

 

7. 파일을 기록하는 한도를 무제한으로 변경하는 조치는? 

     ulimit 는 프로세스의 자원 한도를 설정하는 명령입니다.

     현재 설정되어져 있는 값을 조회하는 명령어는    ulimit -aH 입니다.

     최대 코어 파일 사이즈를 변경하는 명령어 및 옵션은   ulimit -c  unlimited     입니다.  

     영구적으로 저장하려면    .bashrc 나  .bash_profile에 해당 명령어를 입력하여 저장합니다.

    해당 계정으로 재접속 후, 값이 제대로 변경되었는지 확인합니다. 필요시 재부팅을 필요로 할 수 있습니다.

 

8.  덤프파일 이외의 다른 방법으로 오류를 확인할 수 있는 방법은?

    journalctl 명령어를 활용할 수 있습니다. 

   예를 들면,

    1. 오늘 날짜 로그 보기
      # journalctl --since=today

   2. 특정 기간별 로그 보기
     # journalctl --since "2017-05-25 00:00:00" --until "2017-05-30 10:30:00"
     # journalctl --since "1 hour ago"
     # journalctl --since "2 days ago"

728x90
반응형

+ Recent posts