commit_memory failed

Daily/Prog 2017. 5. 17. 23:08

톰캣 재부팅 실패. STOP 실패. 시작할 때 실패는 많이 해봤어도 중지하는데 실패하는 건 처음;

catalina.out 파일를 보았다.


OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000caf500007158497280) 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
손가락귀신
정신 못차리면, 벌 받는다.

,