문제

최근 웹 애플리케이션에서 다음 오류가 발생했습니다.

java.lang.OutOfMemory오류:PermGen 공간

이는 Tomcat 6 및 JDK 1.6에서 실행되는 일반적인 Hibernate/JPA + IceFaces/JSF 애플리케이션입니다.분명히 이는 애플리케이션을 몇 번 재배포한 후에 발생할 수 있습니다.

원인은 무엇이며 이를 방지하려면 어떻게 해야 합니까?문제를 어떻게 해결하나요?

도움이 되었습니까?

해결책

해결책은 Tomcat이 시작될 때 JVM 명령줄에 다음 플래그를 추가하는 것이었습니다.

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

Tomcat 서비스를 종료한 다음 Tomcat/bin 디렉터리로 이동하여 tomcat6w.exe를 실행하면 됩니다."Java" 탭에서 "Java 옵션" 상자에 인수를 추가합니다."확인"을 클릭한 후 서비스를 다시 시작하세요.

오류가 발생하는 경우 지정된 서비스가 설치된 서비스로 존재하지 않습니다. 당신은 실행해야합니다 :

tomcat6w //ES//servicename

어디 서비스 이름 services.msc에 표시된 서버의 이름입니다.

원천:orx의 의견 에릭의 애자일 답변.

다른 팁

시도해 보는 게 좋을 거야 -XX:MaxPermSize=128M 오히려 -XX:MaxPermGen=128M.

이 메모리 풀의 정확한 용도를 알 수는 없지만 JVM에 로드되는 클래스 수와 관련이 있습니다.(따라서 tomcat에 대한 클래스 언로드를 활성화하면 문제가 해결될 수 있습니다.) 애플리케이션이 실행 중에 클래스를 생성하고 컴파일하는 경우 기본값보다 더 큰 메모리 풀이 필요할 가능성이 높습니다.

여러 배포 후에 발생하는 앱 서버 PermGen 오류는 컨테이너가 이전 앱의 클래스 로더에 보유하고 있는 참조로 인해 발생할 가능성이 높습니다.예를 들어 사용자 정의 로그 수준 클래스를 사용하면 앱 서버의 클래스 로더에서 참조를 보유하게 됩니다.jmap 및 jhat과 같은 최신(JDK6+) JVM 분석 도구를 사용하여 앱에서 어떤 클래스가 계속 유지되는지 확인하고 해당 클래스의 사용을 재설계하거나 제거함으로써 이러한 클래스 간 로더 누수를 감지할 수 있습니다.일반적인 용의자는 데이터베이스, 로거 및 기타 기본 프레임워크 수준 라이브러리입니다.

보다 클래스로더 누출:두려운 "java.lang.OutOfMemoryError:PermGen 공간" 예외, 그리고 특히 그 후속 게시물.

사람들이 저지르는 흔한 실수는 힙 공간과 퍼미겐 공간이 동일하다고 생각하는 것인데, 이는 전혀 사실이 아닙니다.힙에 많은 공간이 남아 있을 수 있지만 여전히 permgen에서는 메모리가 부족할 수 있습니다.

PermGen에서 OutofMemory의 일반적인 원인은 ClassLoader입니다.클래스가 JVM에 로드될 때마다 클래스 로더와 함께 모든 메타 데이터는 PermGen 영역에 보관되며 해당 클래스를 로드한 클래스 로더가 가비지 수집 준비가 되면 가비지 수집됩니다.Classloader에 메모리 누수가 있는 경우 로드된 모든 클래스는 메모리에 남아 있어 몇 번 반복하면 permGen 메모리 부족이 발생합니다.고전적인 예는 다음과 같습니다. Java.lang.OutOfMemoryError:Tomcat의 PermGen 공간.

이제 이 문제를 해결하는 두 가지 방법이 있습니다.
1.메모리 누수의 원인이나 메모리 누수가 있는지 찾아보세요.
2.JVM 매개변수를 사용하여 PermGen 공간 크기 늘리기 -XX:MaxPermSize 그리고 -XX:PermSize.

당신은 또한 확인할 수 있습니다 2 Java.lang.OutOfMemoryError 해결 방법 자세한 내용은 Java에서 확인하세요.

명령줄 매개변수 사용 -XX:MaxPermSize=128m Sun JVM의 경우(분명히 필요한 크기에 따라 128로 대체)

노력하다 -XX:MaxPermSize=256m 그래도 문제가 지속되면 시도해 보세요. -XX:MaxPermSize=512m

추가됨 -XX: MaxPermSize = 128m (가장 효과적인 것을 실험해 볼 수 있습니다) VM 인수 나는 Eclipse IDE를 사용하고 있기 때문에.대부분의 JVM에서는 기본 PermSize 주변에 있다 64MB 프로젝트에 클래스가 너무 많거나 문자열 수가 너무 많으면 메모리가 부족해집니다.

Eclipse의 경우에는 다음에도 설명되어 있습니다. 답변.

1 단계 :Tomcat 서버를 두 번 클릭하십시오. 서버

enter image description here

2 단계 : 오픈 런칭 컨퍼런스 그리고 추가하세요 -XX: MaxPermSize = 128m 기존의 끝까지 VM 논쟁.

enter image description here

복잡한 웹 애플리케이션을 배포 및 배포 취소하는 동안에도 이 문제에 대해 고민해 왔으며 설명과 솔루션을 추가해야겠다고 생각했습니다.

Apache Tomcat에 애플리케이션을 배포하면 해당 앱에 대한 새 ClassLoader가 생성됩니다.그런 다음 ClassLoader를 사용하여 모든 애플리케이션의 클래스를 로드하고 배포 취소 시 모든 것이 잘 사라질 것입니다.그러나 실제로는 그렇게 간단하지 않습니다.

웹 애플리케이션의 수명 동안 생성된 하나 이상의 클래스는 어딘가에서 ClassLoader를 참조하는 정적 참조를 보유합니다.참조는 원래 정적이므로 가비지 수집을 아무리 많이 해도 이 참조가 정리되지 않습니다. ClassLoader와 로드된 모든 클래스는 그대로 유지됩니다.

그리고 몇 번 재배포한 후에 OutOfMemoryError가 발생합니다.

이제 이것은 상당히 심각한 문제가 되었습니다.재배포할 때마다 Tomcat이 다시 시작되도록 할 수 있지만 재배포되는 애플리케이션이 아닌 전체 서버가 중단되는 경우가 많으며 이는 종종 불가능합니다.

그래서 대신 Apache Tomcat 6.0에서 작동하는 솔루션을 코드로 구성했습니다.다른 응용 프로그램 서버에서는 테스트하지 않았으며 강조해야 할 점은 이는 다른 응용 프로그램 서버에서 수정하지 않으면 작동하지 않을 가능성이 높습니다..

나는 또한 개인적으로 이 코드를 싫어한다고 말하고 싶습니다. 적절한 종료 및 정리 방법을 사용하도록 기존 코드를 변경할 수 있는 경우 누구도 이를 "빠른 수정"으로 사용해서는 안 됩니다..이 기능을 사용해야 하는 유일한 경우는 코드가 자체 정적 참조를 정리할 수 있는 수단을 제공하지 않는 외부 라이브러리(내 경우에는 RADIUS 클라이언트)가 있는 경우입니다.

어쨌든, 코드를 살펴보세요.이는 서블릿의 destroy 메소드 또는 (더 나은 접근 방식) ServletContextListener의 contextDestroyed 메소드와 같이 애플리케이션이 배포 취소되는 지점에서 호출되어야 합니다.

//Get a list of all classes loaded by the current webapp classloader
WebappClassLoader classLoader = (WebappClassLoader) getClass().getClassLoader();
Field classLoaderClassesField = null;
Class clazz = WebappClassLoader.class;
while (classLoaderClassesField == null && clazz != null) {
    try {
        classLoaderClassesField = clazz.getDeclaredField("classes");
    } catch (Exception exception) {
        //do nothing
    }
    clazz = clazz.getSuperclass();
}
classLoaderClassesField.setAccessible(true);

List classes = new ArrayList((Vector)classLoaderClassesField.get(classLoader));

for (Object o : classes) {
    Class c = (Class)o;
    //Make sure you identify only the packages that are holding references to the classloader.
    //Allowing this code to clear all static references will result in all sorts
    //of horrible things (like java segfaulting).
    if (c.getName().startsWith("com.whatever")) {
        //Kill any static references within all these classes.
        for (Field f : c.getDeclaredFields()) {
            if (Modifier.isStatic(f.getModifiers())
                    && !Modifier.isFinal(f.getModifiers())
                    && !f.getType().isPrimitive()) {
                try {
                    f.setAccessible(true);
                    f.set(null, null);
                } catch (Exception exception) {
                    //Log the exception
                }
            }
        }
    }
}

classes.clear();

또는 permgen을 sun의 jvm과 다르게 처리하는 JRockit으로 전환할 수도 있습니다.일반적으로 성능도 더 좋습니다.

http://www.oracle.com/technetwork/middleware/jrockit/overview/index.html

1) PermGen 메모리 크기 늘리기

가장 먼저 할 수 있는 일은 영구 생성 힙 공간의 크기를 더 크게 만드는 것입니다.이는 일반적인 –xms (초기 힙 크기 설정) 및 –xmx (최대 힙 크기 설정) JVM 인수로 수행 할 수 없습니다. 언급 한 바와 같이, 영구 생성 힙 공간은 일반적인 Java 힙 공간과 완전히 분리되어 있기 때문에 이러한 인수 세트. 이 일반적인 자바 힙 공간의 공간.그러나 영구 생성 힙의 크기를 더 크게 만들기 위해 (적어도 Sun/OpenJDK jvms에서는) 사용할 수 있는 유사한 인수가 있습니다.

 -XX:MaxPermSize=128m

기본값은 64m입니다.

2) 스위핑 활성화

이를 영원히 처리하는 또 다른 방법은 PermGen이 부족하지 않도록 클래스를 언로드하도록 허용하는 것입니다.

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

과거에는 그런 것들이 나에게 마법처럼 작용했습니다.하지만 한 가지, 이를 사용하면 상당한 성능 저하가 있습니다. 왜냐하면 permgen 스윕은 사용자가 요청하는 모든 요청에 ​​대해 추가로 2개의 요청을 생성하기 때문입니다.사용과 장단점의 균형을 맞춰야 합니다.

이 오류에 대한 세부정보를 확인할 수 있습니다.

http://faisalbhagat.blogspot.com/2014/09/java-outofmemoryerror-permgen.html

그만큼 java.lang.OutOfMemoryError: PermGen space 메시지는 영구 세대의 메모리 영역이 모두 사용되었음을 나타냅니다.

모든 Java 애플리케이션은 제한된 양의 메모리를 사용할 수 있습니다.특정 응용 프로그램이 사용할 수 있는 정확한 메모리 양은 응용 프로그램 시작 중에 지정됩니다.

Java 메모리는 다음 이미지에서 볼 수 있는 여러 영역으로 구분됩니다.

enter image description here

메타공간:새로운 추억의 공간이 탄생하다

JDK 8 HotSpot JVM은 이제 클래스 메타데이터 표현을 위해 기본 메모리를 사용하며 Metaspace라고 합니다.Oracle JRockit 및 IBM JVM과 유사합니다.

좋은 소식은 더 이상 의미가 없다는 것입니다 java.lang.OutOfMemoryError: PermGen 공간 문제가 있으므로 더 이상 다음을 사용하여 이 메모리 공간을 조정하고 모니터링할 필요가 없습니다. Java_8_다운로드 또는 더 높게.

여기서 말하는 문제가 있었습니다. 제 시나리오는 eclipse-helios + tomcat + jsf이고 여러분이 하고 있던 작업은 tomcat에 간단한 애플리케이션을 배포하는 것이었습니다.나는 여기서 같은 문제를 보여주고 있었고 다음과 같이 해결했습니다.

일식에서 다음으로 이동 서버 내 경우 tomcat 7.0의 경우 탭에서 등록된 서버를 두 번 클릭하면 내 파일 서버가 열립니다. 일반 등록 정보입니다.섹션에 "일반 정보" 링크를 클릭하세요 "실행 구성 열기" , 그러면 이 두 항목 끝에 추가된 VM 인수의 인수 탭에서 서버 옵션 실행이 열립니다.

-XX: MaxPermSize = 512m
-XX: PermSize = 512m

그리고 준비.

요즘 가장 간단한 대답은 Java 8을 사용하는 것입니다.

더 이상 PermGen 공간을 위해 독점적으로 메모리를 예약하지 않으므로 PermGen 메모리가 일반 메모리 풀과 혼합될 수 있습니다.

비표준을 모두 제거해야 함을 명심하십시오. -XXPermGen...=... Java 8이 아무것도 하지 않는다고 불평하는 것을 원하지 않는 경우 JVM 시작 매개변수입니다.

  1. 시작 메뉴에서 Tomcat의 빈 디렉토리 또는 유형 모니터 Tomcat에서 Tomcat7W를 엽니 다 (다양한 서비스 정보가 포함 된 탭 창이 열린다).
  2. Java 옵션 텍스트 영역에 다음 줄을 추가합니다.

    -XX:MaxPermSize=128m
    
  3. 초기 메모리 풀을 1024로 설정합니다(선택 사항).
  4. 최대 메모리 풀을 1024로 설정합니다(선택 사항).
  5. 확인을 클릭하세요.
  6. Tomcat 서비스를 다시 시작합니다.

코드 실행을 위해 jvm이 제공한 공간이 아닌 큰 공간을 사용하기 때문에 Perm 생성 공간 오류가 발생합니다.UNIX 운영 체제에서 이 문제를 해결하는 가장 좋은 방법은 bash 파일의 일부 구성을 변경하는 것입니다.다음 단계에 따라 문제가 해결됩니다.

명령 실행 gedit .bashrc 터미널에.

만들다 JAVA_OTPS 다음 값을 갖는 변수:

export JAVA_OPTS="-XX:PermSize=256m -XX:MaxPermSize=512m"

bash 파일을 저장합니다.터미널에서 exec bash 명령을 실행합니다.서버를 다시 시작하십시오.

이 접근 방식이 귀하의 문제에 효과가 있기를 바랍니다.8보다 낮은 Java 버전을 사용하는 경우 이 문제가 가끔 발생합니다.그러나 Java 8을 사용하면 문제가 발생하지 않습니다.

영구 생성 크기를 늘리거나 GC 매개변수를 조정하는 것은 실제 메모리 누수가 있는 경우 도움이 되지 않습니다.귀하의 애플리케이션이나 일부 타사 라이브러리에서 클래스 로더가 누출되는 경우 유일하고 영구적인 해결책은 이 누출을 찾아 수정하는 것입니다.당신을 도울 수 있는 도구가 많이 있습니다. 최근 도구 중 하나는 다음과 같습니다. 배관공, 필요한 기능을 갖춘 새 버전이 출시되었습니다.

또한 웹앱에서 log4j를 사용하는 경우 log4j에서 이 단락을 확인하세요. 선적 서류 비치.

사용하신다면 그럴 것 같습니다. PropertyConfigurator.configureAndWatch("log4j.properties"), 웹앱 배포를 취소할 때 메모리 누수가 발생합니다.

나는 Hibernate+Eclipse RCP의 조합을 가지고 있습니다. -XX:MaxPermSize=512m 그리고 -XX:PermSize=512m 그리고 그것은 나를 위해 일하는 것 같습니다.

세트 -XX:PermSize=64m -XX:MaxPermSize=128m.나중에 당신은 또한 증가를 시도할 수도 있습니다 MaxPermSize.그것이 효과가 있기를 바랍니다.나에게도 마찬가지입니다.설정만 MaxPermSize 나를 위해 일하지 않았습니다.

나는 몇 가지 답변을 시도했고 마침내 작업을 수행한 유일한 것은 pom의 컴파일러 플러그인에 대한 다음 구성이었습니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <fork>true</fork>
        <meminitial>128m</meminitial>
        <maxmem>512m</maxmem>
        <source>1.6</source>
        <target>1.6</target>
        <!-- prevent PermGen space out of memory exception -->
        <!-- <argLine>-Xmx512m -XX:MaxPermSize=512m</argLine> -->
    </configuration>
</plugin>

이것이 도움이 되기를 바랍니다.

나에게도 이 문제가 해결되었습니다.그러나 나는 서블릿 재시작 시간이 훨씬 더 나쁘다는 것을 알았습니다. 그래서 프로덕션에서는 더 좋았지만 개발에서는 일종의 지연이었습니다.

메모리 구성은 앱의 특성에 따라 다릅니다.

뭐하세요?

처리된 거래 금액은 얼마입니까?

얼마나 많은 데이터를 로드하고 있나요?

등.

등.

아마도 앱을 프로파일링하고 앱에서 일부 모듈 정리를 시작할 수 있을 것입니다.

분명히 이는 애플리케이션을 몇 번 재배포한 후에 발생할 수 있습니다.

Tomcat에는 핫 배포 기능이 있지만 메모리를 소비합니다.가끔씩 컨테이너를 다시 시작해 보세요.또한 프로덕션 모드에서 실행하는 데 필요한 메모리 양을 알아야 합니다. 이는 해당 연구에 좋은 시기인 것 같습니다.

Tomcat의 최신 버전(6.0.28 또는 6.0.29)이 서블릿 재배포 작업을 처리한다고 합니다. 많이 더 나은.

나는 똑같은 문제에 직면했지만 불행히도 제안된 솔루션 중 어느 것도 나에게 실제로 효과가 없었습니다.배포 중에는 문제가 발생하지 않았으며 핫 배포도 수행하지 않았습니다.

내 경우에는 웹 응용 프로그램을 실행하는 동안 (최대 절전 모드를 통해) 데이터베이스에 연결하는 동안 동일한 지점에서 매번 문제가 발생했습니다.

이 링크 (앞서 언급한) 문제를 해결하는 데 충분한 내부 정보를 제공했습니다.jdbc-(mysql)-driver를 WEB-INF에서 jre/lib/ext/ 폴더로 이동하면 문제가 해결된 것 같습니다.최신 JRE로 업그레이드하려면 드라이버를 다시 설치해야 하므로 이는 이상적인 솔루션이 아닙니다.유사한 문제를 일으킬 수 있는 또 다른 후보는 log4j이므로 해당 항목도 이동하는 것이 좋습니다.

이러한 경우 첫 번째 단계는 GC가 PermGen에서 클래스를 언로드할 수 있는지 확인하는 것입니다.표준 JVM은 이와 관련하여 다소 보수적입니다. 클래스는 영원히 살기 위해 태어났습니다.따라서 일단 로드되면 클래스는 더 이상 코드를 사용하지 않는 경우에도 메모리에 유지됩니다.이는 애플리케이션이 동적으로 많은 클래스를 생성하고 생성된 클래스가 장기간 필요하지 않은 경우 문제가 될 수 있습니다.이러한 경우 JVM이 클래스 정의를 언로드하도록 허용하는 것이 도움이 될 수 있습니다.시작 스크립트에 하나의 구성 매개변수만 추가하면 됩니다.

-XX:+CMSClassUnloadingEnabled

기본적으로 이는 false로 설정되어 있으므로 이를 활성화하려면 Java 옵션에서 다음 옵션을 명시적으로 설정해야 합니다.CMSClassUnloadingEnabled를 활성화하면 GC는 PermGen도 스윕하고 더 이상 사용되지 않는 클래스를 제거합니다.이 옵션은 아래 옵션을 사용하여 UseConcMarkSweepGC도 활성화된 경우에만 작동합니다.따라서 ParallelGC 또는 Serial GC를 실행할 때 다음을 지정하여 GC를 CMS로 설정했는지 확인하십시오.

-XX:+UseConcMarkSweepGC

Tomcat에 더 많은 메모리를 할당하는 것은 적절한 해결책이 아닙니다.

올바른 해결 방법은 컨텍스트가 삭제되고 다시 생성된 후(핫 배포) 정리를 수행하는 것입니다.해결책은 메모리 누수를 막는 것입니다.

Tomcat/Webapp 서버에서 드라이버(JDBC) 등록을 취소하지 못했다는 메시지가 표시되면 등록을 취소하세요.이렇게 하면 메모리 누수를 막을 수 있습니다.

ServletContextListener를 생성하고 web.xml에서 구성할 수 있습니다.다음은 샘플 ServletContextListener입니다.

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;

import com.mysql.jdbc.AbandonedConnectionCleanupThread;

/**
 * 
 * @author alejandro.tkachuk / calculistik.com
 *
 */
public class AppContextListener implements ServletContextListener {

    private static final Logger logger = Logger.getLogger(AppContextListener.class);

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        logger.info("AppContextListener started");
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        logger.info("AppContextListener destroyed");

        // manually unregister the JDBC drivers
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver driver = drivers.nextElement();
            try {
                DriverManager.deregisterDriver(driver);
                logger.info(String.format("Unregistering jdbc driver: %s", driver));
            } catch (SQLException e) {
                logger.info(String.format("Error unregistering driver %s", driver), e);
            }

        }

        // manually shutdown clean up threads
        try {
            AbandonedConnectionCleanupThread.shutdown();
            logger.info("Shutting down AbandonedConnectionCleanupThread");
        } catch (InterruptedException e) {
            logger.warn("SEVERE problem shutting down AbandonedConnectionCleanupThread: ", e);
            e.printStackTrace();
        }        
    }
}

여기에서는 web.xml에서 이를 구성합니다.

<listener>
    <listener-class>
        com.calculistik.mediweb.context.AppContextListener 
    </listener-class>
</listener>  

"그들"은 6.0.29를 실행하고 있고 모든 옵션을 설정한 후에도 동일한 문제가 있기 때문에 틀렸습니다.위에서 Tim Howland가 말했듯이 이러한 옵션은 피할 수 없는 일을 지연시킬 뿐입니다.재배포할 때마다 오류가 발생하기 전에 3번 재배포할 수 있습니다.

매개변수를 설정한 후에도 Eclipse IDE에서 이를 얻는 경우--launcher.XXMaxPermSize, -XX:MaxPermSize, 등, 여전히 동일한 오류가 발생하는 경우 Eclipse가 일부 타사 애플리케이션에 의해 설치되고 기본값으로 설정된 버그가 있는 JRE 버전을 사용하고 있을 가능성이 높습니다.이러한 버그 버전은 PermSize 매개변수를 선택하지 않으므로 무엇을 설정하더라도 이러한 메모리 오류가 계속 발생합니다.따라서 eclipse.ini에 다음 매개변수를 추가하세요.

-vm <path to the right JRE directory>/<name of javaw executable>

또한 Eclipse의 환경 설정에서 기본 JRE를 올바른 Java 버전으로 설정했는지 확인하십시오.

나에게 도움이 된 유일한 방법은 JRockit JVM을 사용하는 것이었습니다.MyEclipse 8.6이 있습니다.

JVM의 힙은 실행 중인 Java 프로그램에서 생성된 모든 개체를 저장합니다.자바는 new 연산자를 사용하여 객체를 생성하고 새 객체에 대한 메모리는 런타임에 힙에 할당됩니다.가비지 수집은 프로그램에서 더 이상 참조하지 않는 개체에 포함된 메모리를 자동으로 해제하는 메커니즘입니다.

비슷한 문제가 발생했습니다.내 것은 JDK 7 + Maven 3.0.2 + Struts 2.0 + Google GUICE 종속성 주입 기반 프로젝트입니다.

내가 달리려고 할 때마다 mvn clean package 명령을 실행하면 다음과 같은 오류가 표시되었습니다. "빌드 실패" 발생

org.apache.maven.surefire.util.SurefireReflectionException:java.lang.reflect.InvocationTargetException;중첩된 예외는 java.lang.reflect.InvocationTargetException입니다.null java.lang.reflect.invocationTargetexception :java.lang.OutOfMemory오류:PermGen 공간

위의 유용한 팁과 요령을 모두 시도했지만 불행히도 아무것도 효과가 없었습니다.나에게 도움이 된 것은 아래에 단계별로 설명되어 있습니다 :=>

  1. pom.xml로 이동하세요.
  2. 검색 <artifactId>maven-surefire-plugin</artifactId>
  3. 새로 추가 <configuration> 요소 다음 <argLine> 패스하는 하위 요소 -Xmx512m -XX:MaxPermSize=256m 아래 그림과 같이 =>

<configuration> <argLine>-Xmx512m -XX:MaxPermSize=256m</argLine> </configuration>

도움이 되길 바랍니다. 즐거운 프로그래밍 되세요 :)

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