【疑难问题】Java疑难CPU高定位

1   CPU高分析

1.1   说明(root执行)

建议使用root账号执行命令,使用其他账号登录可能会无法看到部分进程信息。

1.2   查看服务进程ID(ps)

命令格式:  ps –ef | grep XXXX

1.3   查看机器CPU占用情况(top)

命令格式:  top

执行结果如下,结果会动态刷新

%CPU取值说明:以347949为例,58.7%并不是类似Windows的整体CPU占用率。CPU通常是多核,命令执行机器是8核CPU,则CPU全部可用率为8*100%=800%;所以:相对Windows整个机器来说:CPU占用率是 58.7% / 800% = 7.35%

  1. 第一行是任务队列信息

  1. 第二、三行为进程和CPU的信息

  1. 第四、五行为内存(物理+交换)信息。

二.  进程信息

1.4   查看指定服务内部线程CPU占用情况(top)

命令格式:  top -p 267396 -H

说明:

1)267396为进程PID信息,参考章节1.2获取;

2)执行结果会动态刷新

3)执行结果默认只显示下半部分信息,可以按下主键盘区域数字1,增加显示上部信息。

4)左侧PID对应内部线程ID(十进制表示)

1.5   安装JDK

通常部署环境没有JDK命令(即没有jstack,jmap等后续命令),需要找到匹配JDK并安装到环境中。

确认方法:可以先通过root切换到根目录查找jstack

命令格式:#find / -name jstack

如果找不到则需要参考章节“如何获取环境匹配的JDK”进行安装。

1.6   使用jstack命令保存堆栈信息(jstack)

命令格式:  jstack 267396 > /tmp/stack1.txt

说明:

通常机器不会安装jstack信息,需使用到root账号优先查找本机jstack是否存在,否则需要自行安装。

其中nid字段对应16进制的线程ID(对应章节1.4中10进制线程信息)。

比如如下的垃圾回收线程

1.7   根据待分析TOP线程ID到jstack查找获取线程详细信息

注意: jstack中nid线程ID是十六进制;top命令结果中线程ID是十进制,查询前需要提前转换。

原文地址:https://www.cnblogs.com/clarino/p/12681276.html

时间: 2024-08-30 12:28:25

【疑难问题】Java疑难CPU高定位的相关文章

Java进程CPU高

Java进程CPU高1-1) 查看$PID进程里面的线程CPU占用状况    top -H -p $PID1-2) 显示线程列表,并按照CPU占用高的线程排序     ps -mp $PID -o THREAD,tid,time | sort -rn2) 找出CPU消耗较多的线程id, 并转换成16进制     printf "%x\n" $TID3) 查询出具体的线程状态     jstack $PID | grep -A 10 0x$TID

java进程CPU高分析

https://blog.csdn.net/moranzi1/article/details/89341480 JVM导致系统CPU高的常见场景内存不足,JVM gc频繁,一般会伴随OOMJVM某个线程死循环或者递归调用 定位和解决1.内存不足,gc频繁可参考我的这遍文章解决.https://blog.csdn.net/moranzi1/article/details/886702042.JVM某个线程死循环或者递归调用.这种情况关键是找到导致CPU高的线程.然后根据具体线程具体分析为什么该线程

查看JAVA占用CPU高的线程日志

# 1. 查看主进程占用cpu高 top # 1647 java # 2. 按照线程占用cpu由高到低进行排查: ps -mp 1647 -o THREAD,tid,time | sort -rn |head -6 # USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME # root 1.6 - - - - - - 00:02:07 # root 0.1 19 - futex_ - - 1767 00:00:11 # root 0.1 19 - futex

jstack命令定位java程序CPU利用率高的代码位置

高手是怎么使用jstack精确找到异常代码的(java程序CPU利用率高的情况) 请jstack神器来帮忙 本文介绍Linux环境下使用jstack定位问题的秘笈s1.[top命令]找到CPU利用率持续比较高的进程,获取[进程号],此处PID为 1289112891 s2.[ps p 12891 -L -o pcpu,pid,tid,time,tname,cmd 命令]找到上述进程中,CPU利用率比较高的[线程号TID](十进制数),此处为 12946ps p 12891 -L -o pcpu,

记一次java应用cpu利用率过高调试经历

1,现象 写的一个storm应用,主要是通过mysql的binlog来同步表到hbase.运行一段时间后发现,经常会出现cpu使用率飙升到200%以上,然后各种消息堆积报警等等出现各种问题 2,调研过程 cpu使用率很高,所以首先找到该进程,通过top命令,监控该进程的使用率,然后通过H,查看各个线程的cpu使用率情况,记下cpu使用率高的线程id,然后通过jstack pid,获取各个线程栈,听过top获取的线程id转化成16进制后,发现有问题的线程栈如下: 发现主要问题原来出现在HashMa

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 

Java应用程序高CPU故障诊断(troubleshooting)思路

系统运行出现高CPU报警,一般可以通过top或者任务管理器找到哪些进程在使用CPU,但这个粒度不能让我们知道得更多,我们需要找到程序的哪部分在占用CPU并且在占用CPU做什么,这样才有利于我们以后调优,下面介绍一种可行的思路: 找到占用CPU高的进程p 找到进程p中占用CPU高的线程t 找到线程t在做什么 本文以Linux下Java应用程序为例,其他环境或程序可参照该思路,只要思路清晰就好办了 打开top,在top中按shift+p按照CPU使用量倒序显示进程,找到占用CPU较高的进程号pid,

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

用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用.目前只支持Linux.原因是Mac.Windows的ps命令不支持列出进程的线程id,更多信息参见#33,欢迎提供解法. PS,如何操作可以参见@bluedavy的<分布式Java应用>的[5.1.1 CPU消耗分析]一节,说得很详细: top命令找出消耗CPU高的Java进程及其线程id: 开启线程显示模式(top -H,或是打开top

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