톰캣 재부팅 실패. STOP 실패. 시작할 때 실패는 많이 해봤어도 중지하는데 실패하는 건 처음;
catalina.out 파일를 보았다.
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000caf50000, 715849728, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (malloc) failed to allocate 715849728 bytes for committing reserved memory. # An error report file with more information is saved as: # /tmp/jvm-8091/hs_error.log | cs |
메모리가 부족하여 JRE 를 계속 진행할 수 없다는...
/tmp/jvm-8091/hs_error.log 파일을 보니 머가 머라머라 쥘쥘 많다.
암튼 Out of memory.
원인
- 시스템의 물리적 RAM 또는 스왑 공간이 부족.
- 프로세스 크기 제한에 도달.
해결 방법
- 시스템의 메모리 로드 줄이기.
- 물리적 메모리 또는 스왑 공간 늘리기.
- 스왑 백킹 저장소가 가득 차 있는지 확인.
- 64 비트 OS에서 64 비트 Java 사용.
- Java 힙 크기 줄이기 (-Xmx / -Xms).
- Java 스레드 수 줄이기
- Java 스레드 스택 크기 줄이기 (-Xss)
- -XX:ReservedCodeCacheSize= 를 사용하여 더 큰 코드 캐시 설정
위에서 아무것도 수정할 수 없다면!
# echo 1 > /proc/sys/vm/overcommit_memory | cs |
overcommit_memory 를 일시적으로 1로 설정하여 커널의 memory overcommit 처리를 수행하지 않도록 수정한다.
기본값은 0으로, 커널이 사용 가능한 메모리 양을 추정하고 잘못된 요청을 실패시켜 휴리스틱 메모리 오버커밋 처리를 수행하지만, 메모리가 오버로드될 수 있다.
관리자 권한으로 해야 한다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.
,