Tomcat 메모리 오버플로 설정 java_opts
답 1
Tomcat 스타트 업의 초기 메모리를 설정하십시오
초기 공간 (즉, -xms)은 물리적 메모리의 1/64이고 최대 공간 (-xmx)은 물리적 메모리의 1/4입니다. -XMN -XMS -XMX 및 JVM에서 제공하는 기타 옵션을 사용할 수 있습니다.
설정을 만드십시오
3. 예, 다음은 1G 메모리 환경에서 Java JVM의 매개 변수를 설정하기위한 참조를 제공합니다.
java_opts = " -서버 -xms800m -xmx800m
-xx : permsize = 64m -xx : maxnewsize = 256m -xx : maxpermsize = 128m -djava.awt.headless = true "
java_opts = " -서버 -xms768m -xmx768m -xx : permsize = 128m -xx : maxpermsize = 256m -xx :
Newsize = 192m -xx : maxnewsize = 384m "
Catalina_opts = " -서버 -xms768m -xmx768m -xx : permsize = 128m -xx : maxpermsize = 256m
-xx : Newsize = 192m -xx : maxnewsize = 384m "
Linux :
/usr/local/apache-tomcat-5.5.23/bin 디렉토리의 Catalina.sh
추가 : java_opts = '-xms512m -xmx1024m'
"m"을 추가하려면 MB라는 것을 의미합니다. 그렇지 않으면 KB가되며 Tomcat을 시작할 때 메모리가 충분하지 않습니다.
-xms : 초기 값
-xmx : 최대 값
-xmn : 최소 값
창
Catalina.bat 앞에서 가입하십시오
java_opts = -xms128m -xmx350m을 설정하십시오
startup.bat로 Tomcat을 시작하면 OK 설정이 적용됩니다. 200m 메모리가 성공적으로 할당됩니다.
그러나 startup.bat을 시작하지 않으면 Tomcat을 시작하지만 Windows 시스템 서비스를 사용하여 Tomcat 서비스를 시작하는 경우 위의 설정은 적용되지 않습니다.
즉, set java_opts = -xms128m -xmx350m은 작동하지 않습니다. 위의 200m의 메모리를 할당하면 OOM이 될 것입니다 ...
Windows 서비스는 bin/tomcat.exe를 실행합니다. Catalina.bat 설정이 아닌 레지스트리의 값을 읽습니다.
해결책:
레지스트리 hkey_local_machine/소프트웨어/Apache Software Foundation/Tomcat Service Manager/Tomcat5/Parameters/Javaoptions를 수정하십시오
원래 가치는입니다
-dcatalina.home = "c :/apachegroup/tomcat 5.0"
-djava.endorsed.dirs = "c :/apachegroup/tomcat 5.0/common/entersed"
-xrs
-xms300m -xmx350m을 추가하십시오
Tomcat 서비스를 다시 시작하면 설정이 적용됩니다
답 2
Tomcat의 JVM 메모리 오버플로 문제 해결
키워드 : Tomcat의 JVM 메모리 오버플로 문제 해결
최근에 저는 몇 년 동안 개발 된 프로젝트에 익숙합니다. 데이터베이스를 MySQL에서 Oracle로 포트해야합니다. 먼저 JDBC 연결을 MySQL에 가리키고 Tomcat에 포장 한 후 실행하십시오. 문제가 없습니다. 그러나 JDBC가 Oracle에 대한 JDBC 연결을 지적 할 때 Tomcat은 java.lang.outofmemoryerRor 오류 인 Google 인터넷을 지속적으로 던지고 Tomcat의 운영 메커니즘을 이해하고 문제를 해결합니다. 참조를 위해 공유하십시오.
첫 번째는 다음과 같습니다. java.lang.outofMemoryError : java 힙 공간
설명하다:
힙 크기 설정
JVM 힙의 설정은 JVM이 Java 프로그램 실행 중에 제공 할 수있는 메모리 공간의 설정을 나타냅니다. JVM이 시작되면 힙 크기의 값을 자동으로 설정합니다. 초기 공간 (즉, -xms)은 물리적 메모리의 1/64이고 최대 공간 (-xmx)은 물리적 메모리의 1/4입니다. -XMN -XMS -XMX 및 JVM에서 제공하는 기타 옵션을 사용하여 설정할 수 있습니다. 힙 크기의 크기는 젊은 세대와 임기 시온의 합입니다.
팁 :이 예외 메시지는 시간의 98%가 GC에 사용되고 사용 가능한 힙 크기가 2% 미만인 경우에 발생합니다.
팁 : 최대 힙 크기는 사용 가능한 물리적 메모리의 80%를 초과해서는 안됩니다. 일반적으로 -xms 및 -xmx 옵션을 동일하게 설정하고 -xmn은 -xmx 값의 1/4입니다.
해결책:
힙 크기를 수동으로 설정하십시오
tomcat_home/bin/catalina.bat를 수정하고 catalina_base를 사용하여 "echo"에 다음 줄을 추가하십시오 : $ catalina_base ":
자바 코드
set java_opts =% java_opts% -server -xms800m -xmx800m -xx : maxnewsize = 256m
set java_opts =% java_opts% -server -xms800m -xmx800m -xx : maxnewsize = 256m
또는 Catalina.sh를 수정하십시오
catalina_base를 사용하여 "echo"에 다음 줄을 추가하십시오 : $ catalina_base ":
java_opts = "$ java_opts -server -xms800m -xmx800m -xx : maxnewsize = 256m"
2. 둘째 : Java.lang.outofMemoryError : Permgen Space
이유:
Permgen 공간의 전체 이름은 영구 생성 공간이며, 메모리의 영구 저장 영역을 나타냅니다. 이 메모리는 주로 클래스 및 메타 정보에서 JVM에 의해 저장됩니다. 클래스는로드되면 Permgen 공간에 배치됩니다. 클래스 인스턴스 (인스턴스)가 저장되는 힙 영역과 다릅니다. GC (Garbage Collection)는 주 프로그램 런타임 중에 Permgen 공간을 정리하지 않습니다. 따라서 응용 프로그램에 클래스가 많은 경우 Permgen 공간 오류가 발생할 가능성이 높습니다. 이 오류는 웹 서버가 JSP를 사전에 컴파일 할 때 일반적입니다. 웹 앱에서 많은 타사 항아리를 사용하는 경우 크기가 JVM (4m)의 기본 크기를 초과하면이 오류 메시지가 생성됩니다.
해결책:
1. MaxPermsize 크기를 수동으로 설정하십시오
Java 코드로 tomcat_home/bin/catalina.bat (linux 아래 Catalina.sh)를 수정하십시오
catalina_base를 사용하는 "echo": $ catalina_base ""다음 줄을 추가합니다.
set java_opts =% java_opts% -server -xx : permsize = 128m -xx : maxpermsize = 512m
catalina_base를 사용하는 "echo": $ catalina_base ""다음 줄을 추가합니다.
set java_opts =% java_opts% -server -xx : permsize = 128m -xx : maxpermsize = 512m
Catalina.sh는 다음과 같습니다.
자바 코드
java_opts = "$ java_opts -server -xx : permsize = 128m -xx : maxpermsize = 512m"
java_opts = "$ java_opts -server -xx : permsize = 128m -xx : maxpermsize = 512m"
나는 또한 다른 게시물을보고 그것이 매우 좋다고 생각했습니다. 발췌문은 다음과 같습니다.
분석 java.lang.outofMemoryError : Permgen 공간
많은 사람들이 스프링, 최대 절전 모드, Tomcat과 같은 문제를 동적으로 생성하여 JVM의 영구 힙을 오버플로하는 것으로 문제를 일으킨다는 것을 알았습니다. 그런 다음 솔루션에 대한 여러 의견이 있습니다. 어떤 사람들은 Tomcat 버전을 최신 버전으로 업그레이드하는 것이 필요한 Tomcat도 아니라고 말합니다. 어떤 사람들은 또한 봄의 문제를 의심하며 봄 포럼에서는 매우 뜨겁습니다. AOP가 많은 클래스를 동적으로 생성 할 때 봄에 cblib를 사용하기 때문입니다.
그러나 문제는 왜이 트럼프 카드 오픈 소스에서도 같은 문제가 발생하는지이므로 더 기본적인 이유입니까? Tomcat은 이것을 Q & A에서 매우 모호한 방식으로 대답했습니다. 우리는이 질문을 알고 있지만이 질문은보다 기본적인 질문에서 비롯됩니다.
그래서 누군가가 더 기본적인 JVM을 확인하고 문제의 열쇠를 찾았습니다. Sun의 JVM은 메모리를 다른 영역으로 나누는 것으로 나타났습니다. 그 중 하나는 많은 수업과 클래스 설명을 저장하는 데 멘토 영역입니다. 원래 Sun이 설계되었을 때, JVM이 시작되었을 때이 지역이 고정되었다고 믿었지만 그는 역학이 지금 널리 사용될 것으로 기대하지 않았습니다. 또한이 지역에는 특별한 쓰레기 수집 메커니즘이 있습니다. 현재 문제는 클래스를이 영역에 동적으로로드 한 후 GC를 재활용 할 수 없다는 것입니다!
위의 두 가지 질문에 대해서는 다음과 같습니다.
카탈리나의 첫 번째 줄을 추가하십시오 .BAT :
자바 코드
SET JAVA_OPTS = -XMS64M -XMX256M -XX : PERMSIZE = 128M -XX : MAXNEWSIZE = 256M -XX : MAXPERMSIZE = 256M
SET JAVA_OPTS = -XMS64M -XMX256M -XX : PERMSIZE = 128M -XX : MAXNEWSIZE = 256M -XX : MAXPERMSIZE = 256M
Catalina.sh의 첫 번째 줄을 추가하십시오.
자바 코드
java_opts =
-xms64m
-xmx256m
-xx : permsize = 128m
-xx : maxnewsize = 256m
-xx : maxpermsize = 256m
위의 기사에서 Tomcat 메모리 오버플로에 대한 완벽한 솔루션은 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.