Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
Kafka로부터 메세지를 받는 spark기반 client프로그램을 구동시 처리할 메세지가 갑자기 증가하게 되면 OutOfMemoryError가 발생하면서 많은 수의 hs_err_pid???.log파일이 생성되며 JVM관련 명령어(예, jps)를 실행하면 "java.lang.OutOfMemoryError: unable to create new native thread"의 오류가 발생할 수 있는데 이것은 NIO관련 라이브러리가 디폴트로 0(무제한)의 DirectMemoryBuffer를 제공함으로서 모든 메모리를 소진하기 때문이다. 이럴때는 파일엑세스처리가 많이 일어나는 JVM을(예, tomcat)기동시 -XX:MaxDirectMemorySize(예, 2G(2147483648), 2*1024*1024*1024)등을 지정하여 무제한으로 사용되지 않도록 설정하고 재기동해준다.
*참고(Tomcat 메모리 CATALINA_OPTS 설정) : http://starplaying.tistory.com/446
-------------------오류내용--------------------
-bash-4.1$ jps
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread
------------------폴더에 오류로그 파일들도 다수 생성된다. ----------
hs_err_pid11579.log hs_err_pid14873.log hs_err_pid3724.log hs_err_pid5596.log hs_err_pid69979.log hs_err_pid8240.log hs_err_pid8859.log hs_err_pid9857.log