java - CPU 使用率高,几乎所有线程都处于阻塞状态

标签 java multithreading

我在 tomcat 容器中运行 Java 应用程序。线程转储显示大多数线程处于 BLOCKED 状态。当我看到堆使用时,我得到以下输出:

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 2147483648 (2048.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 652214272 (622.0MB)
   used     = 652214264 (621.9999923706055MB)
   free     = 8 (7.62939453125E-6MB)
   99.99999877340925% used
From Space:
   capacity = 31981568 (30.5MB)
   used     = 0 (0.0MB)
   free     = 31981568 (30.5MB)
   0.0% used
To Space:
   capacity = 31981568 (30.5MB)
   used     = 0 (0.0MB)
   free     = 31981568 (30.5MB)
   0.0% used
PS Old Generation
   capacity = 1431830528 (1365.5MB)
   used     = 1281314952 (1221.957160949707MB)
   free     = 150515576 (143.54283905029297MB)
   89.48789168434325% used
PS Perm Generation
   capacity = 71303168 (68.0MB)
   used     = 71127952 (67.83290100097656MB)
   free     = 175216 (0.1670989990234375MB)
   99.75426617790671% used

27815 interned Strings occupying 4203968 bytes.

谁能帮我调试一下。配置有问题吗?

编辑:

CPU 使用率:

Cpu(s): 97.7%us,  1.0%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3840320k total,  3741664k used,    98656k free,   103276k buffers
Swap:  4194300k total,   160692k used,  4033608k free,   783984k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         
23112 root      20   0 3562m 2.4g 8040 S  195 65.2 397:25.18 java  

最佳答案

你所有的内存都被使用了,所以可能那里发生了什么。您需要一个堆转储并使用像 Eclipse MemoryAnalizer 这样的工具来查看是否存在内存泄漏。也许应用程序只是在颠簸,线程正在阻塞等待 IO。听起来很有可能。

但可能还有其他问题。该应用程序是否使用数据库、消息队列、FTP 站点、REST 服务等?单独的 JVM 不会像那样发疯和爆炸,这是你试图做的事情导致的。

关于java - CPU 使用率高,几乎所有线程都处于阻塞状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494484/

相关文章:

java - 来自多个数据库的 Hibernate 实体

java - 我应该创建一个新线程作为扩展 Thread 的类,还是只进行一个新的 Thread 对象实例化?

iphone - 带有返回值的performSelectorOnMainThread

Java池连接优化

ios - 如何在 `init` 中初始化线程安全变量?

java - IntelliJ 项目及其子项目

java - Dagger 依赖冲突 android studio

java - split 二叉树

java - 获取内部类类型名称

multithreading - VBScript线程