堆空间 - 内存管理

时间:2016-06-15 14:17:18

标签: java linux sockets memory synchronization

我们有一个应用程序,每天一次使用整个分配的堆内存。 我做了一个堆空间的内存转储,以帮助我找到这个问题的原因,它可以在这个链接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

我想提供任何提示或支持,因为应用程序非常庞大。

服务器...

  • 架构:x86_64
  • CPU op-mode(s):32位,64位
  • 字节顺序:Little Endian
  • CPU(s):4
  • 在线CPU列表:0-3
  • 每个核心的线程:1
  • 每个插座的核心:1
  • Socket(s):4
  • NUMA节点:1
  • 供应商ID:GenuineIntel
  • CPU系列:6
  • 型号:42
  • 步进:2
  • CPU MHz:2294.472
  • BogoMIPS:4588.94
  • 虚拟机管理程序供应商:VMware
  • 虚拟化类型:完整
  • L1d缓存:32K
  • L1i缓存:32K
  • 二级缓存:256K
  • L3缓存:15360K
  • 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)

  • Java版本:1.5.0_22 x64
  • DB4O版本:6.1

我需要更多信息,感谢任何可以提供帮助的人。

2 个答案:

答案 0 :(得分:1)

看起来您需要关闭套接字连接。.

查看转储,您的套接字连接永远不会关闭,从而分配不必要的内存。

答案 1 :(得分:0)

使用JVisualVM(在java目录中)在运行时分析应用程序。然后,您可以查看总内存使用情况,还可以查看不同类型对象的内存占用量。