我目前面临一个非常奇怪的问题。我编写了一个简单的 servlet,它在自托管码头容器中运行。此 servlet 是 JS 脚本的日志记录端点。所以脚本只运行非常简单的代码来记录到 graylog 和一些文件(由 log4j 文件附加程序管理。)
管理员向我抱怨说 servlet 占用了高达 10.5GB 的虚拟内存,导致整台机器速度变慢。这对其他一些监控服务的性能产生了影响。
重新启动 servlet 暂时解决了问题,但问题是如何找到并修复代码中导致这种内存占用的问题?
编辑:我用-Xmx50m
开关启动应用程序。
编辑:已经调查了以下事情:我启动了 Eclipse Memory Analyzer 和 jConsole 来查看应用程序,同时一些 ruby 脚本发送了请求。(每分钟 40 到 70 个请求。这比 servlet 目前投入生产的要多。)
使用此设置:
- 堆大小:4MB
- 平均运行线程数:19(峰值为 23)
- 虚拟内存:5GB
重新启动 servlet 加速了服务器。servlet 唯一可疑的参数是 10.5GB 虚拟内存。