Tomcat Web 应用程序间歇性冻结

Tomcat Web 应用程序间歇性冻结

我有一个 Grails Web 应用程序(只是一个标准 war 文件),部署在运行 tomcat 6 的 Ubuntu 10.10 服务器上。我的数据库是 postgresql。

问题是,当我尝试登录此 Web 应用程序时,它时常会冻结(一天一次或两次,在不活动后)。我可以导航到登录页面,但当我尝试登录时(第一次访问数据库,可能是一个线索...?),应用程序会无限期冻结,没有 500 响应代码...浏览器只是等待和等待。

我按照详细的说明这里

因为所描述的问题听起来和我的问题一样。我的 GC 日志显示没有长时间运行的 GC,所有时间都在 10 ...

当应用程序冻结 jmap 堆输出时...

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 536870912 (512.0MB)
   NewSize          = 21757952 (20.75MB)
   MaxNewSize       = 87228416 (83.1875MB)
   OldSize          = 65404928 (62.375MB)
   NewRatio         = 7
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 19595264 (18.6875MB)
   used     = 11411976 (10.883308410644531MB)
   free     = 8183288 (7.804191589355469MB)
   58.23843965562291% used
Eden Space:
   capacity = 17432576 (16.625MB)
   used     = 9249296 (8.820816040039062MB)
   free     = 8183280 (7.8041839599609375MB)
   53.05754009046053% used
From Space:
   capacity = 2162688 (2.0625MB)
   used     = 2162680 (2.0624923706054688MB)
   free     = 8 (7.62939453125E-6MB)
   99.99963008996212% used
To Space:
   capacity = 2162688 (2.0625MB)
   used     = 0 (0.0MB)
   free     = 2162688 (2.0625MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 101556224 (96.8515625MB)
   used     = 83906080 (80.01907348632812MB)
   free     = 17650144 (16.832489013671875MB)
   82.62032270912317% used
Perm Generation:
   capacity = 85983232 (82.0MB)
   used     = 62866832 (59.95448303222656MB)
   free     = 23116400 (22.045516967773438MB)
   73.1152232100324% used

有人知道“来自太空:”是什么吗?

您对进一步查找故障有什么想法吗?我对这种类型的故障查找没有太多经验。

答案1

您的延迟听起来太长了,不可能与 gc 有关。我会在登录页面添加一些检测代码,并测量数据库和页面响应等内容。然后手动或使用 Grinder 等负载测试工具重现该问题。

另外,您是在什么上运行这个程序的?专用硬件还是虚拟机?

呼呼!

汤姆·普尔

相关内容