Linux/JVM - OutOfMemoryError: 새 기본 스레드를 생성할 수 없습니다.

Linux/JVM - OutOfMemoryError: 새 기본 스레드를 생성할 수 없습니다.

Linux 서버(CentOS)에 메모리 문제가 있습니다. 가상 머신입니다. 여기에 맥락이 있습니다.

RAM은 70GB입니다. 2개의 Tomcat이 실행되고 있습니다.

한 Tomcat에는 13Gb 힙이 할당되고 다른 Tomcat에는 20Gb 힙이 할당됩니다.

JVM 옵션 -Xss160k 설정을 사용한 20Gb(문제 해결을 위해)

이 2개의 Tomcat은 최대 48GB RAM(가상)을 사용할 수 있습니다.

Linux는 70Gb를 사용하며 약 35Gb의 캐시 메모리를 갖습니다. 스왑 공간은 1Gb이지만 거의 사용되지 않습니다(8Mb).

이제 문제는 Tomcat에서 다음 오류가 계속 발생한다는 것입니다.

OutOfMemoryError: unable to create new native thread

내 기억이 정확하다면 운영 체제 자체에 메모리가 부족하여 새 스레드를 생성할 수 없는 경우 이런 일이 발생할 수 있습니다.

이제 질문은 35GB의 캐시 메모리가 있는데 어떻게 이것이 가능합니까? 필요에 따라 재할당하여 사용해야 하지 않나요?

이를 방지하기 위해 설정할 수 있는 커널 옵션이 있습니까? 예를 들어 최대 65Gb를 사용하고 30Gb를 캐시하고 5Gb를 비워 둘 수 있습니다.

답변1

이는 ulimit에 의해 설정된 제한 문제일 수 있습니다. tomcat을 실행하는 사용자로 다음 작업을 수행합니다.

ulimit -a

출력에서 라인을 찾습니다 max user processes.

max user processes              (-u) 1024

Tomcat을 시작하기 전에 이 값을 늘려 보십시오(예 ulimit -u 4096: .

답변2

X만큼의 RAM을 사용할 수 있는지 확인하는 방법을 알아냈습니다.

sysctl -w vm.min_free_kbytes=...

이것이 내 문제를 해결하는지, 아니면 Jenny D의 답변이 해결되는지 아직 모르겠습니다.

답변3

Xms,Xmx,PermSize MaxPermSizeCatalina 파일의 가치는 무엇입니까? 종종 이러한 매개변수를 조정하면 JVM 메모리 부족 문제를 피할 수 있습니다.

관련 정보