Tomcat의 PermGen 공간 오류
Windows 환경에서 일하고 있습니다. 그리고 바람둥이로 작업 할 때 마다이 오류가 발생합니다.
Apr 30, 2012 5:30:37 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.OutOfMemoryError: PermGen space
2012-04-30 17:30:37.719 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@4ae53a99
2012-04-30 17:30:37.719 INFO net.spy.memcached.MemcachedConnection: Reconnecting due to failure to connect to {QA sa=localhost/127.0.0.1:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0}
java.net.ConnectException: Connection refused: no further information
Apr 30, 2012 5:30:37 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.OutOfMemoryError: PermGen space
Exception in thread "Memcached IO over {MemcachedConnection to localhost/127.0.0.1:11211}" java.lang.OutOfMemoryError: PermGen space
Apr 30, 2012 5:30:38 PM org.apache.coyote.http11.Http11Processor process
SEVERE: Error processing request
java.lang.OutOfMemoryError: PermGen space
Apr 30, 2012 5:30:38 PM org.apache.coyote.http11.Http11Processor process
SEVERE: Error processing request
java.lang.OutOfMemoryError: PermGen space
Apr 30, 2012 5:30:38 PM org.apache.coyote.http11.Http11Processor process
SEVERE: Error processing request
java.lang.OutOfMemoryError: PermGen space
Apr 30, 2012 5:30:41 PM org.apache.catalina.connector.CoyoteAdapter service
SEVERE: An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: PermGen space
Apr 30, 2012 5:30:43 PM org.apache.catalina.core.StandardHostValve custom
SEVERE: Exception Processing ErrorPage[exceptionType=java.lang.Throwable, location=/error.action]
java.lang.OutOfMemoryError: PermGen space
Apr 30, 2012 5:30:42 PM org.apache.catalina.core.StandardHostValve custom
SEVERE: Exception Processing ErrorPage[exceptionType=java.lang.Throwable, location=/error.action]
java.lang.OutOfMemoryError: PermGen space
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
JAVA_OPTS with the value as -Xms1024m -Xmx1024m
시스템 변수를 추가하려고 시도했지만 여전히 동일한 오류 (java.lang.OutOfMemoryError : PermGen 공간) 가 계속해서 발생 합니다. 도움을 주시면 감사하겠습니다. 또한 stackoverflow의 다른 게시물도 읽었지만 해결되지 않았습니다.
PermGen 공간은 Tomcat이 인턴 된 클래스 정의 (정의 만, 인스턴스화 없음) 및 문자열 풀을 저장하는 데 사용하는 것입니다. 경험상 PermGen 공간 문제는 개발 환경에서 자주 발생하는 경향이 있습니다. Tomcat은 WAR를 배포하거나 jspc를 수행 할 때마다 새 클래스를로드해야하기 때문에 (jsp 파일을 편집 할 때) 실제로 발생합니다. 개인적으로, 저는 개발 테스트를 할 때 전쟁을 많이 배포하고 재배포하는 경향이 있으므로 조만간 실행될 것이라는 것을 알고 있습니다 (주로 Java의 GC주기가 여전히 쓰레기이기 때문에 전쟁을 빠르고 자주 재배포하면 충분하면 공간이 관리 할 수있는 것보다 더 빨리 채워집니다.)
이론적으로 프로덕션 환경에서는 10 분 단위로 코드베이스를 변경하지 않기 때문에 문제가되지 않습니다. 그래도 발생하면 코드베이스 (및 해당 라이브러리 종속성)가 기본 메모리 할당에 비해 너무 커서 스택 및 힙 할당을 엉망으로 처리해야 함을 의미합니다. 표준은 다음과 같다고 생각합니다.
-XX:MaxPermSize=SIZE
그러나 그것을 처리하는 가장 좋은 방법은 클래스를 언로드하여 PermGen이 실행되지 않도록하는 것입니다.
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
그런 것들은 과거에 저에게 마술처럼 작용했습니다. 한 가지는, permgen 스윕은 당신이 만드는 모든 요청이나 그 라인을 따라 뭔가에 대해 추가 2 요청처럼 만들 것이기 때문에 그것들을 사용하는 데 상당한 성능 절충이 있습니다. 트레이드 오프와 사용의 균형을 맞춰야합니다.
tomcat JVM의 PermGenSpace에 더 많은 공간을 할당해야합니다.
이는 JVM 인수로 수행 할 수 있습니다. -XX : MaxPermSize = 128m
기본적으로 PermGen 공간은 64M입니다 (그리고 컴파일 된 모든 클래스를 포함하므로 클래스 경로에 jar (클래스)가 많으면이 공간을 채울 수 있습니다).
참고로 JVisualVM으로 PermGen 공간의 크기를 모니터링 할 수 있으며 YourKit Java Profiler로 콘텐츠를 검사 할 수도 있습니다.
Michael의 답변을 보완 하고이 답변 에 따르면 문제를 안전하게 처리하는 방법은 다음 인수를 사용하는 것입니다.
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
tomcat이 Windows 서비스로 실행되는 경우 CATALINA_OPTS도 JAVA_OPTS도 효과가없는 것 같습니다.
GUI의 Java 옵션에서 설정해야합니다.
아래 링크는 잘 설명합니다.
http://www.12robots.com/index.cfm/2010/10/8/Giving-more-memory-to-the-Tomcat-Service-in-Windows
이것은 나를 위해 일했습니다. startup.bat
. set JAVA_OPTS
값과 함께 존재하지 않으면 다음 줄에 추가해야합니다 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256
. 전체 라인 :
set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256
Tomcat 7.0 Windows Service Installer Version. / bin에 catalina.bat가 없습니다. 따라서 / bin에서 Tomcat7w.exe를 열고 타격 JVM 인수를 추가해야합니다.
-XX:PermSize=256m -XX:MaxPermSize=512m
Java Tab의 Java Option에서 이와 같이. 다른 옵션도 추가합니다.
또 다른 방법으로 IntellijIDEA를 사용하는 경우 이와 같이 서버 구성에 JVM 인수를 추가해야합니다.
@AndreSmiley의 코드가 나를 위해 일했습니다.
수정 만 필요합니다.
-XX : MaxPermSize = 256 m
"m"은 MB를 의미합니다.
실제로 내 응용 프로그램은 다소 크기 때문에 성능을 위해 1024m로 만드는 것이 좋습니다.
CentOS 6.6에서 tomcat7을 실행하고 있습니다. 새 /usr/share/tomcat/bin/setenv.sh 파일을 만들고 JAVA_OPTS
및 CATALINA_OPTS
. 그러나 tomcat은 다시 시작할 때 값을 선택하지 않습니다. 다음 줄을 /etc/tomcat/tomcat.conf에 넣을 때 :
CATALINA_OPTS="-Xms128m -Xmx1024m -XX:MaxPermSize=1024m"
tomcat은 새로운 환경 변수를 선택했습니다. 나는 이것을 실행하여 확인했다.
ps aux | grep 바람둥이
출력에서 새 설정을 확인합니다. 진단하는 데 오랜 시간이 걸렸고 다른 사람이 제안하는 것을 보지 못했기 때문에 인터넷 커뮤니티에 버릴 것이라고 생각했습니다.
Tomcat과 함께 Eclipse를 사용하는 경우 아래 단계를 따르십시오.
On server window Double click on tomcat, It will open the tomcat's Overview window .
In the Overview window you will find Open launch configuration under General information and click on Open launch configuration.
- In the edit Configuration window look for Arguments and click on It.
- In the arguments tag look for VM arguments.
- simply paste this -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m to the end of the arguments.
I tried the same on Intellij Ideav11.
It was not picking up the settings after checking the process using grep. In case it does not, give the mem settings for JAVA_OPTS in catalina.sh instead.
tomcat 프로세스를 종료 (강제적으로 Linux의 경우 kill -9)하고 다시 시작하면 문제가 해결됩니다. 내 생각 엔 tomcat 인스턴스는 shutdown.bat를 사용하여 제대로 죽지 않습니다. 따라서 프로세스를 강제 종료하고 다시 시작해야합니다.
참조 URL : https://stackoverflow.com/questions/10392255/permgen-space-error-in-tomcat
'programing' 카테고리의 다른 글
SVN 커밋 실패 : 디렉터리가 오래되었습니다. (0) | 2021.01.17 |
---|---|
Go 언어에서 런타임에 변수 유형을 확인하는 방법 (0) | 2021.01.17 |
다른 테이블 값을 기반으로하는 MySQL 업데이트 테이블 (0) | 2021.01.17 |
내 애플리케이션에 AsyncTask 또는 IntentService를 사용해야합니까? (0) | 2021.01.17 |
.net 사용자 지정 구성 enum ConfigurationProperty를 구문 분석하는 대 / 소문자를 구분하지 않는 방법 (0) | 2021.01.16 |