排查linux下java应用cpu占用过高

用于快速排查JavaCPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。
目前只支持Linux。原因是MacWindowsps命令不支持列出进程的线程id,更多信息参见#33,欢迎提供解法。

PS,如何操作可以参见@bluedavy《分布式Java应用》的【5.1.1 CPU消耗分析】一节,说得很详细:

  1. top命令找出消耗CPU高的Java进程及其线程id

    1. 开启线程显示模式(top -H,或是打开top后按H
    2. CPU使用率排序(top缺省是按CPU使用降序,已经合要求;打开top后按P可以显式指定按CPU使用降序)
    3. 记下Java进程id及其CPU高的线程id
  2. 查看消耗CPU高的线程栈:
    1. 用进程id作为参数,jstack出有问题的Java进程
    2. 手动转换线程id成十六进制(可以用printf %x 1234
    3. jstack输出中查找十六进制的线程id(可以用vim的查找功能/0x1234,或是grep 0x1234 -A 20
  3. 查看对应的线程栈,分析问题

查问题时,会要多次上面的操作以分析确定问题,这个过程太繁琐太慢了。

转自:https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#-show-busy-java-threads

原文地址:https://www.cnblogs.com/think-in-java/p/10483956.html

时间: 2024-08-27 17:23:01

排查linux下java应用cpu占用过高的相关文章

Linux下java进程CPU占用率高分析方法

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97 Tasks: 105 total, 1 running

Linux下java进程CPU占用率高-分析方法

今天登陆同事的一台gateway 开始以为hive环境登陆不了了,仔细一看看了下是因为机器很卡,我每次等几秒没登陆就ctrl+c了,看了下是有个java进程cpu:340.4%  mem:14.6% 一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1. 通过top命令找到可疑进程PID top 一下 可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138 2. 找出消耗资源最高的线程 top -H -p  29580 

Linux下java获取CPU、内存、磁盘IO、网络带宽使用率

一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数." 从/proc文件系统获取cpu使用情况:    cat /proc/stat 在Linux的内核中,有一个全 局变量:Jiffies. Jiffies代表时间.它的单位随硬件平台的不同而不同.系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目.这样ji

JVM探秘:线上CPU占用过高故障排查

线上系统突然变得卡顿或无法访问,排除网络异常的情况下,检查服务器资源占用情况,如果CPU.内存.磁盘IO等资源占用过高,就会导致无法继续处理HTTP请求. 如果是CPU占用飙高,有可能是程序中存在死循环.死锁导致的,也有可能是内存紧张从而频繁GC导致的,要具体问题具体分析. 排查过程 这里记录一次线上CPU占用过高的故障排查过程,重点会用到jstack命令. top命令 首先,使用top命令查看服务器资源使用情况,找到CPU占用过高的进程. 发现pid为29167的Java进程CPU占用很高,已

当windows7系统CPU占用过高该怎办?

电脑变慢卡死的其中一个原因就是被安装了很多流氓软件,曾经有一个笑话,自从某人安装了某软件之后,一周之后电脑满屏都是它推荐安装的软件.本次我就为大家带来如Win7电脑CPU占用过高该怎办,大家一定要认真阅读! 随着电脑文档越来越多,电脑也越来越卡,有时候玩游戏都卡的要死.有用户在使用Win7系统的时候,运行非常卡,随后发现是CPU使用了过高所致,那么是什么原因导致CPU使用率过高呢?有没有什么办法可以降低CPU使用率,下面小编就给大家介绍下Win7电脑CPU占用过高的解决方法. 要解决CPU使用率

一次java Cpu占用过高的排查

某一个项目CPU占用率一直很高,经常在40%-50%之间,最近比较闲,就开始了挂查工作. 1.通过 jstack命令输出进程的堆栈信息 jstack 2788 >C:\log.txt 将堆栈信息输出到log.txt "dubbo-remoting-client-heartbeat-thread-1" #46 daemon prio=5 os_prio=0 tid=0x000000005c53e000 nid=0x240c waiting on condition [0x00000

Linux下Java性能监控

Linux下Java性能监控 一.JVM堆内存使用监控 获取thread dump的3种方法: 1)使用$JAVA_HOME/bin/jcosole中的MBean,到MBean>com.sun.management>HotSpotDiagnostic>操作>dumpHeap中,点击 dumpHeap按钮.生成的dump文件在java应用的根目录下面. 2)jmap -heap 1234 (1234为进程号) 3)cmd ->jvisualvm,远程连接,选择堆Dump生成he

Linux下Java线程详细监控和其dump的分析使用----分析Java性能瓶颈

这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: (一):通过[top -p 12377 -H] 查看java进程的有哪些线程的运行情况:       和通过[jstack 12377 > stack.log]生成Java线程的dump详细信息: 先用top命令找出占用资源厉害的java进程id,如图:# top 如上

linux下java环境变量的设置,形参个数可变的方法

首先我们执行jdk二进制文件: 生成一个jdk目录,将这个目录mv到/usr/loca/jdk # vim /etc/profile export JAVA_HOME=/usr/local/jdkexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PAT# vim Varargs.java #source /etc/profile 例子: #vim test.java 这个例子中test方法形参个数可变,在形参列表中,最后一个形参