我正在使用带有 maven 的码头服务器运行 Web 应用程序。该应用程序在列表和映射中包含大量静态对象,导致 2.8GB 的物理内存使用量。几个小时后,服务器以最大 CPU 使用率挂起。这发生在没有任何用户交互或在服务器上发出请求的情况下。
我注意到在这几个小时内,虽然服务器运行良好,但内存慢慢减少到 1.7GB。我怀疑这可能是与垃圾收集相关的问题。
问题:
- 可能是 GC 在错误地收集或检查我的大型对象池及其引用时挂起?
- 我将如何调试和解决这个问题?
请注意,在 Windows 上我没有这个问题。一旦应用程序启动并填满它的池,它会占用 3.4GB 并保持完全相同而不会崩溃。
服务器启动及环境:
setenforce 0
export MAVEN_OPTS="-Xmx5120m -Xms5120m -XX:+UseConcMarkSweepGC -Xgcthreads1 -XX:MaxGCPauseMillis=2000 -XX:GCTimeRatio=10"
sudo nohup mvn -D jetty.port=80 jetty:run &
操作系统:
Ubuntu 12.04.1 LTS
爪哇:
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
马文:
Apache Maven 3.0.4
码头:
8.1.8.v20121106