簡體   English   中英

Tomcat7-超出了GC開銷限制

[英]Tomcat7 - GC overhead limit exceeded

我在tomcat7中使用以下bin配置運行我的spring應用程序,

#!/bin/sh
#

CATALINA_HOME=/usr/share/tomcat7

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)
JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME_TMP="$jdir"
        # checks for a real JDK like environment, needed to check if
        # really the java-gcj-compat-dev package is installed
        if [ -r "$jdir/bin/jdb" ]; then
            JAVA_HOME="$JAVA_HOME_TMP"
        fi
    fi
done
CATALINA_OPTS="-server -Xms512M -Xmx512M -XX:+UseG1GC"

# Default Java options
if [ -z "$JAVA_OPTS" ]; then
        #JAVA_OPTS="-Djava.awt.headless=true -Xmx128M"
        JAVA_OPTS="-server -Xms512M -Xmx512M -XX:+UseG1GC"
fi

但是我仍然面臨着“ java.lang.OutOfMemoryError:超出了GC開銷限制 ”。

我在哪里做錯了?

對於此類錯誤,Java工具提供了捕獲重要信息的所有機制。 如果不使用它,可能會很復雜並且浪費時間。 如果您的問題是可重現的,我建議您在運行Java進程並嘗試重現問題時啟用內存調試標志。

第一次,我建議您添加您的catalina opts:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapDumpOOME.log

拋出OutOfMemory錯誤時,它將創建一個堆轉儲,並且它是免費的,因為僅在發生錯誤時才會消耗資源和CPU。

如果這還不夠,請啟用GCC日志以獲取有關使用情況內存以及gcc在應用程序運行期間的工作方式的更多信息。

查看https://confluence.atlassian.com/confkb/how-to-enable-garbage-collection-gc-logging-300813751.html
它說明了如何在Tomcat中執行此操作。

有了它,您應該對內存不足的原因有精確的指示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM