use*_*934 2 java heap performance garbage-collection heap-memory
嗨,我正在研究基于Web的java工具.我们在两个独立的服务器中部署了两个工具实例 - 一个在生产中(由许多客户同时使用),另一个在我很少使用的开发环境中.实例,开发和生产都部署在具有相同硬件规范的完全相同的服务器中,具有确切的代码,堆大小,应用程序服务器,版本等.
但是我观察到生产实例的速度慢得多,相比之下,甚至在客户使用率为零的夜晚的奇数小时(我们有工具来监控客户在生产中的使用情况).这是令人惊讶的,因为所有因素都是相同的.我假设由于生产实例使用率很高,因此堆中的堆几乎已满且碎片化,而dev中的堆相对空闲且未分段.这就是为什么dev实例要快得多,即使一切都相同.这是一个合理的假设,因为碎片几乎完整的堆将花费更多时间在对象创建中,从而降低性能?
大多数GC执行复制和压缩,以避免任何碎片.只有Concurrent Mark Sweep可以获得一些碎片,但在大多数情况下这应该不是问题.
而不是猜测你的问题是什么,我建议你测量系统正在做什么.理想情况下,您想要分析您的生产系统.例如在夜间或低负荷下.例如VisualVM(免费)或YourKit(更好,不是免费的!)如果这不是一个选项,你可以监控它的内存使用情况以及它花费多少时间进行GCing.例如jstat
但是,如果您尚未对应用程序进行概要分析,我建议您这样做,因为可能会有一些明显而简单的事情可以帮助您提高性能,即使您在开发时运行相当实际的工作负载也是如此.
您确定网络扫描仪没有扫描服务器吗?(他们往往不会睡觉,可以在白天/晚上的任何时间活动)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |