1. Tomcat 메모리 설정 문제 모음
Java 프로그램을 사용하여 데이터베이스에서 많은 양의 데이터를 쿼리하거나 응용 프로그램 서버 (Tomcat, Jboss, Weblogic)가 JAR 패키지를로드하는 경우 나타납니다. java.lang.outofMemoryError 예외가 나타납니다. 이는 주로 응용 프로그램 서버의 메모리가 충분하지 않기 때문입니다. 이 예외는 종종 다음과 같은 상황을 가지고 있습니다 (예를 들어 Tomcat 환경을 예로 들어 Jboss, Weblogic 등과 같은 다른 웹 서버 등).
1. java.lang.outofMemoryError : Permgen 공간
Permgen 공간의 전체 이름은 영구 생성 공간으로, 메모리의 영구 저장 영역을 나타냅니다. 텍스트 관점에서, 그것은 메모리 오버플로이며, 해결책은 메모리를 높이는 것입니다. 메모리가 넘치는 이유는 무엇입니까? 이 메모리는 주로 수업 및 메타 정보에서 JVM에 의해 저장되기 때문입니다. 클래스는 Permgen 공간 영역이로드되면 배치됩니다. 인스턴스가 저장되는 힙 영역과 다릅니다. GC (Garbage Collection)는 메인 프로그램 실행 중에 Permgen 공간을 정리하지 않습니다. 따라서 앱에 많은 클래스를로드하면 Permgen 공간 오류가 발생할 가능성이 높습니다. 이 오류는 웹 서버가 JSP를 사전 컴퓨터 할 때 일반적입니다. 웹 앱에서 많은 타사 항아리를 사용하는 경우 크기가 JVM (4m)의 기본 크기를 초과하면이 오류 메시지가 생성됩니다.
해결책 : MaxPermsize 크기를 수동으로 설정하십시오
에이. BAT 모드에서 Tomcat이 시작된 경우 다음 설정은 다음과 같습니다.
tomcat_home/bin/catalina.sh를 수정하십시오
catalina_base를 사용하여 "echo"에 다음 줄을 추가하십시오 : $ catalina_base ":
java_opts = " -서버 -xx : permsize = 64m -xx : maxpermsize = 128m
비. Tomcat이 Windows 서비스로 등록되어 서비스를 시작한 경우 레지스트리의 해당 키 값을 수정해야합니다.
레지스트리를 열고 디렉토리를 찾으십시오 HKEY_LOCAL_MACHINE/소프트웨어/APACHE 소프트웨어 재단/PROCRUN 2.0/HTFTY/PARAMETERS/JAVA를 찾으십시오. 디렉토리 주소의 적색 표시 (예 : HTFTY)는 다른 상황에 따라 수정해야하며 Tomcat 서비스를 Windows 서비스의 이름으로 등록해야합니다. JVMMS가 가장 작은 메모리 사용 매개 변수를 설정하고 JVMMX가 가장 큰 메모리 사용 매개 변수를 설정하는 JVMMS 및 JVMMX 항목을 볼 수 있습니다. JVMMS 및 JVMMX 항목의 값을 설정하고 Tomcat 서버를 다시 시작하여 적용됩니다.
권장 사항 : JAR 문서의 반복 메모리 사용량을 줄이기 위해 동일한 타사 JAR 파일을 Tomcat/Shared/Lib 디렉토리로 이동하십시오.
2. java.lang.outofMemoryError : Java 힙 공간
JVM 힙의 설정은 JVM이 Java 프로그램 작동 중에 제공 할 수있는 메모리 공간의 설정을 나타냅니다. JVM이 시작되면 힙 크기의 값을 자동으로 설정합니다. 초기 공간 (즉, -xms)은 물리적 메모리의 1/64이고 최대 공간 (-xmx)은 물리적 메모리의 1/4입니다. -XMN -XMS -XMX 및 JVM에서 제공하는 기타 옵션을 사용하여 설정할 수 있습니다. 힙 크기의 크기는 젊은 세대와 임기 시온의 합입니다. 시간의 98%가 GC에 사용되고 사용 가능한 힙 크기가 2% 미만인 경우이 예외 메시지가 발생합니다.
해결책 : 힙 크기를 수동으로 설정하십시오
에이. BAT 모드에서 Tomcat이 시작된 경우 다음 설정은 다음과 같습니다.
tomcat_home/bin/catalina.sh를 수정하십시오
catalina_base를 사용하여 "echo"에 다음 줄을 추가하십시오 : $ catalina_base ":
java_opts = " -서버 -xms800m -xmx800m -xx : maxnewsize = 256m"
비. Tomcat이 Windows 서비스로 등록되어 서비스를 시작한 경우 레지스트리의 해당 키 값을 수정해야합니다.
레지스트리를 열고 디렉토리를 찾으십시오 HKEY_LOCAL_MACHINE/소프트웨어/APACHE 소프트웨어 재단/PROCRUN 2.0/HTFTY/PARAMETERS/JAVA를 찾으십시오. 디렉토리 주소의 적색 표시 (예 : HTFTY)는 다른 상황에 따라 수정해야하며 Tomcat 서비스를 Windows 서비스의 이름으로 등록해야합니다. JVMMS가 가장 작은 메모리 사용 매개 변수를 설정하고 JVMMX가 가장 큰 메모리 사용 매개 변수를 설정하는 JVMMS 및 JVMMX 항목을 볼 수 있습니다. JVMMS 및 JVMMX 항목의 값을 설정하고 Tomcat 서버를 다시 시작하여 적용됩니다.
팁 : 최대 힙 크기는 사용 가능한 물리적 메모리의 80%를 초과해서는 안됩니다. 일반적으로 -xms 및 -xmx 옵션을 동일하게 설정하고 -xmn은 -xmx 값의 1/4입니다.
2. Tomcat 자체는 컴퓨터에서 직접 실행할 수 없으며 하드웨어 및 Java 가상 머신을 기반으로 운영 체제에 의존해야합니다. Java 프로그램이 시작되면 JVM은 초기 메모리와 최대 메모리를 응용 프로그램에 할당합니다. 이 초기 메모리와 최대 메모리는 프로그램의 성능에 어느 정도 영향을 미칩니다. 예를 들어, 응용 프로그램이 최대 메모리를 사용하는 경우 JVM은 먼저 쓰레기 수집을 수행하고 일부 점유 메모리를 해제해야합니다. 따라서 시작시 Tomcat의 초기 메모리와 최대 메모리를 조정하려면 JVM에 선언해야합니다. 일반적으로 Java 프로그램은 실행할 때 -xms -xmx를 통해 응용 프로그램의 초기 메모리와 최대 메모리를 조정할 수 있습니다.이 두 값의 크기는 일반적으로 요구에 따라 설정됩니다. 초기화 힙 크기는 가상 머신이 시작시 시스템에 요청하는 메모리 크기를 실행합니다. 일반적 으로이 매개 변수는 중요하지 않습니다. 그러나 일부 응용 프로그램은 큰 하중에서 더 많은 메모리를 빠르게 차지합니다. 현재이 매개 변수는 매우 중요합니다. 가상 머신이 시작될 때 사용 된 메모리가 작아 지고이 경우 많은 객체가 초기화되면 가상 머신은 사용을 만족시키기 위해 메모리를 반복적으로 증가시켜야합니다. 이러한 이유로 일반적으로 -xms 및 -xmx를 동일한 크기로 설정하고 힙의 최대 값은 시스템에서 사용하는 물리적 메모리에 의해 제한됩니다. 일반적으로 많은 양의 데이터가있는 응용 프로그램은 지속적인 객체를 사용하고 메모리 사용량이 빠르게 증가 할 수 있습니다. 응용 프로그램에서 요구하는 메모리가 힙의 최대 값을 초과하면 가상 머신이 메모리 오버플로를 자극하고 애플리케이션 서비스가 충돌합니다. 따라서 일반적으로 사용 가능한 메모리의 최대 값의 80%로 힙의 최대 값을 설정하는 것이 좋습니다.
Tomcat은 기본적으로 메모리를 기본적으로 사용할 수 있습니다. 더 큰 응용 프로그램 프로젝트에서는이 메모리로는 충분하지 않으며 증가해야합니다. 선택하는 방법에는 여러 가지가 있습니다.
첫 번째 방법 :
Windows에서 /BIN/CATALINA.BAT 파일 /BIN/CATALINA.SH 파일의 파일에서 다음 설정을 추가하십시오.
java_opts = '-xms 【메모리 크기 초기화】 -xmx 【사용할 수있는 최대 메모리】'
이 두 매개 변수의 값을 증가시켜야합니다. 예를 들어:
java_opts = '-xms256m -xmx512m'
이는 초기화 메모리가 256MB이고 사용할 수있는 최대 메모리는 512MB임을 의미합니다.
두 번째 방법 : 환경 변수에서 변수 이름을 설정 : java_opts 변수 값 : -xms512m -xmx512m
세 번째 방법 : 첫 번째 두 가지 방법은 Catalina.bat가 빈 디렉토리 (예 : 직접 압축 압축 된 Tomcat 등)에있는 상황을 목표로하지만 일부 Tomcat의 설치 버전에는 Catalina.bat가 없습니다. 현재 다음 방법을 사용할 수 있습니다. 물론이 방법은 가장 일반적인 방법입니다. Tomcathome // bin // tomcat5w.exe를 열고 Java 탭을 클릭하면 초기 메모리 풀과 최대 메모리 풀의 두 가지 항목이 있음을 알 수 있습니다. 이는 초기화 설정의 메모리 크기입니다. 최대 메모리 풀이 최대 메모리 크기입니다. 설정을 설정 한 후 OK를 누르고 Tomcat을 다시 시작하십시오. Tomcat에서 JVM에서 사용할 수있는 메모리가 변경되었음을 알 수 있습니다.
고려해야 할 또 다른 점은 Java가 제공하는 쓰레기 수집 메커니즘입니다. 가상 기계의 힙 크기는 쓰레기 수집에 대한 가상 기계 지출의 시간과 빈도를 결정합니다. 허용되는 쓰레기 수집 속도는 응용 프로그램과 관련이 있으며 실제 쓰레기 수집의 시간과 빈도를 분석하여 조정해야합니다. 힙 크기가 크면 완전한 쓰레기 수집은 느리지 만 주파수는 줄어 듭니다. 힙 크기를 메모리 요구와 일치하게하면 전체 컬렉션이 빠르지 만 더 빈번합니다. 힙을 크기를 조정하는 목적은 특정 시간 내에 고객 요청 처리를 극대화하기 위해 쓰레기 수집 시간을 최소화하는 것입니다. 벤치마킹 중에 최상의 성능을 보장하기 위해 전체 벤치마킹 프로세스 중에 쓰레기 수집이 발생하지 않도록 힙 크기가 커야합니다. 시스템이 쓰레기를 수집하는 데 많은 시간을 소비하면 힙 크기를 줄입니다. 완전한 쓰레기 수집은 3-5 초를 초과하지 않아야합니다. 쓰레기 수집이 병목 현상이되면 생성의 크기를 지정해야하고 쓰레기 수집의 상세한 출력을 확인하고 가비지 수집 매개 변수가 성능에 미치는 영향을 연구합니다. 일반적으로 물리적 기억의 80%를 힙 크기로 사용해야합니다. 프로세서를 추가 할 때는 할당을 병렬로 수행 할 수 있고 쓰레기 수집은 병렬이 아닌 메모리를 늘리는 것을 잊지 마십시오.
주목할만한 점 : 가장 높은 값과 가장 낮은 값의 차이를 좁히는 것이 좋습니다. 그렇지 않으면 많은 메모리가 낭비됩니다. 가장 낮은 값이 증가하고 가장 높은 값은 마음대로 설정 될 수 있지만 실제 물리적 메모리를 기반으로해야합니다. 예를 들어 메모리 설정이 너무 크면 최대 메모리가 설정되어 있지만 512m가 사용 가능한 메모리가 없으면 Tomcat을 시작할 수 없습니다. 시스템에 의해 메모리가 재활용되고 프로세스가 종료되는 상황이있을 수 있습니다.
Tomcat 메모리 오버플로 및 크기 조정을 구현하는 위의 방법은 내가 공유 한 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.