`

java-jvm-cpu (cpu)高问题排查

 
阅读更多

1、通过top命令发现 cpu高的进程

根据top命令,发现PID  为22143的Java进程占用CPU 17.8%


2、根据cpu高的进程,查找引起cpu高的线程

命令:ps -mp 22143 -o THREAD,tid,time|sort -k1 -nr|head -15


方案二:
 top -H -p pid 

这样是是看pid对应下的线程对应的的cpu 占用率,可以定位到cpu高的线程 
(这个图是后补的)

3、收集进程的堆栈信息上下文

jstack -F pid >data.txt 即可把线程的堆栈信息统计到 文件中

 

注意:jstack -F 这个 -F参数,最好不加,因为加上-F打印的线程挂起的栈信息

4、根据线程id定位代码

查找22328 线程对应的线程:

 

 

注意:不是每次jstack 都能拿到cpu 高的线程,我试验的时候,不是每次都能的。

 

如果没有加  -F 参数,输出的如下:

可以通过

echo "ibase=10;obase=16;22328"|bc

 

输出:0x5738

 

"main" prio=10 tid=0x00007f52fc008800 nid=0x5738 waiting for monitor entry [0x00007f53032b1000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at Test.main(Test.java:26)
        - waiting to lock <0x00000000eb64c2d8> (a java.util.HashMap)
 

 

 

参考:http://www.blogjava.net/hankchen/archive/2012/05/09/377735.html

 

 

 

(1)load average:此值反映了任务队列的平均长度;如果此值超过了CPU数量,则表示当前CPU数量不足以处理任务,负载过高
(2)%us:用户CPU时间百分比;如果此值过高,可能是代码中存在死循环、或是频繁GC等
(3)%sy:系统CPU时间百分比;如果此值过高,可能是系统线程竞争激烈,上下文切换过多,应当减少线程数
(4)%wa:等待输入、输出CPU时间百分比;如果此值过高,说明系统IO速度过慢,CPU大部分时间都在等待IO完成
(5)%hi:硬件中断CPU百分比;当硬件中断发生时,CPU会优先去处理硬件中断;比如,网卡接收数据会产生硬件中断
(6)swap used:被使用的swap;此值过高代表系统因为内存不足在进行频繁的换入、换出操作,这样会影响效率,应增大内存量
(7)%CPU:进程使用CPU的百分比;此值高表示CPU在进行无阻塞运算等

  • 大小: 26 KB
  • 大小: 13.2 KB
  • 大小: 7.3 KB
  • 大小: 18 KB
  • 大小: 12.2 KB
  • 大小: 23.6 KB
分享到:
评论

相关推荐

    show-busy-java-threads

    用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。 目前只支持Linux。原因是Mac、Windows的ps命令不支持列出进程的线程...

    jvm排查cpu占用过高的线程

    cpu占用过高,服务器卡死,问题排查 java进程占用CPU过高常见的两种情况: 代码中有死循环或者接近死循环的操作 快速创建大量临时变量,导致频繁触发gc回收 问题解决: 1、用top命令找到cpu占用率最高的进程号是...

    java进程高CPU占用故障排查.txt

    java进程高CPU占用故障排查

    Linux中使用Shell脚本查看Java线程的CPU使用情况

    线上Java应用,在业务高峰期的时候经常出现CPU跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用CPU情况,结合jstack日志,排查到具体的线程类名。 一、首先获得jvm的进程...

    线上排查思路,一些关于服务器排查的命令与案例

    下面将针对磁盘不足、CPU 过高和 Tomcat假死三种常见的问题进行排查思路和命令案例的讲解。 1. 磁盘不足 当磁盘不足时,应用会抛出异常。排查思路包括: 1.1.2.1 利用 df 查询磁盘状态,结果是: ``` df -h ``` ...

    《Java并发编程的艺术》源代码

    第2章介绍Java并发编程的底层实现原理,介绍在CPU和JVM这个层面是如何帮助Java实现并发编程的。 第3章介绍深入介绍了Java的内存模型。Java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员,本...

    Java并发编程的艺术

    第2章Java并发编程的底层实现原理,从CPU和JVM2个层面剖析。第3章详细深入介绍了Java的内存模型。第4章从介绍多线程技术带来的好处开始,讲述了如何启动和终止线程以及线程的状态,详细阐述了多线程之间进行通信的...

    Java并发编程的艺术_非扫描

    本书对原理的剖析不仅仅局限于Java层面,而是深入到JVM,甚至CPU层面来进行讲解,帮助读者从更底层看并发技术。本书结合线上应用,给出了一些并发编程实战技巧,以及线上处理并发问题的步骤和思路。读者对象·Java...

    关于内存溢出导致的服务器崩溃问题分享

    本文将分享关于内存溢出导致的服务器崩溃问题,包括问题现象、问题排查、问题分析、问题原因、什么是内存溢出、内存溢出可能的原因、相关总结等内容。 问题现象: 在生产环境中,服务器的CPU经常飙升至700%、800%,...

    Jvmm是一个同时支持操作系统监控和Java虚拟机监控的工具,提供有丰富的监控功能

    提供有丰富的监控功能:OS监控(内存状态、CPU负载、磁盘IO吞吐率、磁盘健康状态、网卡IO等)、JVM监控(内存、线程、GC、类加载器等),还提供生成火焰图、Java代码热更、反编译功能,支持以服务形式对外提供接口...

    java动态日志注入工具anylog.zip

     如果需要扩展新的功能(例如输出jvm的cpu占用,内存大小等),只需要实现spi中的  com.github.jobop.anylog.spi.TransformDescriptor   和com.github.jobop.anylog.spi.TransformHandler接口,  然后把实现的...

    show-busy-threads

    此命令通过结合Linux操作系统的ps命令和jvm自带的jstack命令,查找Java进程内CPU利用率最高的线程,一般适用于服务器负载较高的场景,并需要快速定位导致负载高的原因。

    leetcode分类-java:个人学习java语言的路线,从入门到精通,code

    JVM 课程的代码 根据韩顺平老师的 java数据结构与算法 课程的代码 根据牛客网的编程初学者入门训练按从入门到困难分类写的代码 根据牛客网的剑指Offer按从入门到困难分类写的代码 下面代码我会用√的方法表示代码...

    阿里P7面试题整理集合

    乐观锁悲观锁等)、唯一索引和普通索 引的区别聊到了changeBuffer,聊了页分裂合页合并)比重较大 3)jvm调优(可达性分析算法中根节点有哪些、cms和G1区别、怎样GC调优、 怎样排查CPU彪高、内存彪高、逃逸分析) 4...

    常用的后端性能优化六种方式:缓存化+服务化+异步化等

    一个高性能的后端系统可以提高用户体验、增加系统的可扩展性和可维护性、本降低系统的运营成本。今天我们将讨论六种常用的后端性能优化方式:缓存化、服务化、异步化等。 一、硬件升级 硬件升级是后端性能优化的...

Global site tag (gtag.js) - Google Analytics