ActiveMQ OutOfMemory는 더 많은 스레드를 생성 할 수 없습니다

StackOverflow https://stackoverflow.com/questions/1808782

  •  05-07-2019
  •  | 
  •  

문제

서버의 과부하를 시뮬레이션하고 있으며이 오류가 발생합니다.

java.lang.OutOfMemoryError: unable to create new native thread

이 페이지에서 읽었습니다 http://activemq.apache.org/javalangoutofmemory.html, 메모리 크기를 늘릴 수 있습니다. 하지만 어떻게해야하나요? 수정해야 할 파일은 무엇입니까? 빈/활성화 스크립트로 인수를 전달하려고했지만 운이 없습니다.

도움이 되었습니까?

해결책

귀하의 경우는 다음과 같습니다 방대한 수의 스레드. 그것을 해결하는 방법에는 3 가지가 있습니다.

  • 스레드 수를 줄입니다 (즉, -dorg.apache.activemq.usedededicatedTaskRunner = false 문서에서)
  • 스레드 당 스택 크기를 줄입니다 -xss 옵션 (기본값 : Win/Linux의 32 비트 Java 용 320 KIB, Win/Linux에서 64 비트 Java의 1024 KIB, 문서)
  • 줄이다 (확장되지 않습니다) 힙 크기 -xmx 스레드 당 스택을위한 공간을 만드는 옵션 (ActiveMQ 스크립트에서 기본적으로 512 MIB)

메모: 스택이나 힙이 너무 작 으면 다른 사람이 발생해야합니다. OutofMemoryError.

당신은 그것들을 사용하여 지정할 수 있습니다 activemq_opts 쉘 변수 (유니어). 예를 들어 ActiveMQ AS를 실행하십시오

ACTIVEMQ_OPTS=-Xss160k bin/activemq

다른 팁

여기를 확인하십시오

지정하십시오 -Xmx 예를 들어 ActiveMQ -Tomcat을 실행하는 VM에 대한 인수.

Java Virtual Machine에 더 많은 메모리를 할당 할 수 있습니다. -xmx 명령 인수.
예를 들어. java -Xmx512M MyClass

우리는 Linux (Redhat Enterprise 5) 시스템 에서이 문제를 해결 했으며이 건물에서 NProcs Ulimit이 /etc/security/limits.conf 실제로 사용자가 스폰 할 수있는 스레드 수를 실제로 제어합니다.

이 한계를 사용하여 볼 수 있습니다 ulimit -a 명령.

상자에서 이것은 100의 소프트 한계와 150의 단단한 제한으로 설정되었으며, 이는 최신 앱 서버를 실행하는 데 필요한 스레드 수보다 부족합니다.
우리는이 한계를 완전히 제거하고 우리를 위해이 문제를 해결했습니다.

이것은 당신이 힙 공간이 부족한 것처럼 보이지 않으므로 그것을 증가시키지 마십시오 (-xmx 옵션). 대신 응용 프로그램이 프로세스 메모리가 부족하고 감소 힙 공간은 기본 사용을 위해 프로세스 메모리를 확보합니다. 문제는 왜 그렇게 많은 프로세스 메모리를 사용하고 있습니까? JNI를 사용하지 않으면 너무 많은 스레드를 만들었을 것입니다. Habe의 게시물은이를 해결하는 방법을 설명했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top