我们有一个应用程序,每天一次使用整个分配的堆内存。 我做了一个堆空间的内存转储,以帮助我找到这个问题的原因,它可以在这个链接https://drive.google.com/file/d/0BwMd9KDnQRfQT3dzRTZfUWdjMU0/view?usp=sharing上找到。 我认为应用程序实现不当,或者它可能与DB4O技术相关,它的对象在客户端和服务器之间发送,或者在用户在系统和服务器之间同步数据后向服务器开放的连接。 该服务没有提供错误:内存不足:堆空间,但我按照您的资源分配来说明。
我正在使用此shell脚本启动应用程序...
set +x
export BRANCHOFFICE_HOME=/bat/orquestra/branchoffice/live18
cd ${BRANCHOFFICE_HOME}
echo BRANCHOFFICE_HOME = ${BRANCHOFFICE_HOME}
# classpath
OQT_CLASSPATH=${BRANCHOFFICE_HOME}/classes/:${BRANCHOFFICE_HOME}/classes/branchoffice.jar
for libFile in ${BRANCHOFFICE_HOME}/lib/*.jar
do
OQT_CLASSPATH=${OQT_CLASSPATH}:${libFile}
done
export OQT_CLASSPATH
echo OQT_CLASSPATH = ${OQT_CLASSPATH}
# JVM arguments
JAVA_ARGS=-server
JAVA_ARGS=${JAVA_ARGS}" -Xms2048m"
JAVA_ARGS=${JAVA_ARGS}" -Xmx2048m"
JAVA_ARGS=${JAVA_ARGS}" -XX:+UseLargePages"
JAVA_ARGS=${JAVA_ARGS}" -Duser.timezone=America/Sao_Paulo"
JAVA_ARGS=${JAVA_ARGS}" -Duser.country=BR"
JAVA_ARGS=${JAVA_ARGS}" -Duser.language=pt"
JAVA_ARGS=${JAVA_ARGS}" -cp "${OQT_CLASSPATH}
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote=synchengine.SynchEngine"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.port=1207"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.password.file="${BRANCHOFFICE_HOME}"/config/passwordFile"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.access.file="${BRANCHOFFICE_HOME}"/config/accessFile"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.snmp.acl.file="${BRANCHOFFICE_HOME}"/config/acl"
JAVA_ARGS=${JAVA_ARGS}" -Dcom.sun.management.jmxremote.ssl=false"
export JAVA_ARGS
echo JAVA_ARGS = ${JAVA_ARGS}
# APP arguments
export APP_ARGS=${BRANCHOFFICE_HOME}/config/SynchEngine.xml
echo APP_ARGS = ${APP_ARGS}
echo Starting Synchronization Engine
我想提供任何提示或支持,因为应用程序非常庞大。
服务器...
NUMA node0 CPU(s):0-3
Linux版本3.0.101-0.21-default(geeko @ buildhost)(gcc版本4.3.4 [gcc-4_3-branch revision 152973](SUSE Linux))#1 SMP Mon Apr 7 12:32: 42 UTC 2014(172cdff)
我需要更多信息,感谢任何可以提供帮助的人。
答案 0 :(得分:1)
看起来您需要关闭套接字连接。.
查看转储,您的套接字连接永远不会关闭,从而分配不必要的内存。
答案 1 :(得分:0)
使用JVisualVM(在java目录中)在运行时分析应用程序。然后,您可以查看总内存使用情况,还可以查看不同类型对象的内存占用量。