【问题标题】:Tomcat heap space fullTomcat 堆空间已满
【发布时间】:2018-07-18 11:58:50
【问题描述】:

在 tomcat 上运行我的 java 应用程序几天后,我在 tomcat 进程上获得了 100% 的 CPU 负载。我做了jmap 来检测内存已满。应用仍在处理所有传入的 TCP 请求,但不启动网页(因为内存已满)

为什么 CPU 达到 100%?因为运行 Java 垃圾收集器?但为什么需要几个小时?我不得不再次手动终止该进程并重新启动 tomcat。

如何使用参数XmsXmx 更好地设置tomcat 内存?

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 0
   MaxHeapFreeRatio = 100
   MaxHeapSize      = 1073741824 (1024.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 536870912 (512.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 84410368 (80.5MB)
   used     = 84410368 (80.5MB)
   free     = 0 (0.0MB)
   100.0% used
From Space:
   capacity = 3670016 (3.5MB)
   used     = 0 (0.0MB)
   free     = 3670016 (3.5MB)
   0.0% used
To Space:
   capacity = 3670016 (3.5MB)
   used     = 0 (0.0MB)
   free     = 3670016 (3.5MB)
   0.0% used
PS Old Generation
   capacity = 715653120 (682.5MB)
   used     = 715497816 (682.3518905639648MB)
   free     = 155304 (0.14810943603515625MB)
   99.97829898373111% used
PS Perm Generation
   capacity = 78643200 (75.0MB)
   used     = 78253152 (74.62802124023438MB)
   free     = 390048 (0.371978759765625MB)
   99.5040283203125% used

31605 interned Strings occupying 3556200 bytes.

【问题讨论】:

  • 这样的行为通常表示内存泄漏。您是否尝试过使用某些工具对此进行调查?
  • @Leviand - 任何建议如何检测在 tomcat 上运行的应用程序的内存泄漏?

标签: java tomcat garbage-collection jvm heap-memory


【解决方案1】:

正如cmets中所说,当内存以这种方式爆裂时,这可能是由内存泄漏引起的。

检测这种情况的唯一方法是使用专用工具。

我建议你使用 JProfiler ,你可以找到指南here 了解如何查找内存泄漏。

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多