用户CPU占用过大后的分析过程

找到最耗CPU的java线程ps命令 命令:ps -mp pid -o THREAD,tid,time   或者  ps -Lfp pid 结果展示:

这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息。 比如你想分析一下一个java进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的最后一列。 比如这里找到了一个TID : 30834 ,所占用的TIME时间最高。 通过 printf "%x\n" 30834 首先转化成16进制, 继续通过jstack命令dump出当前的jvm进程的堆栈信息。 通过Grep命令即可以查到对应16进制的线程id信息,很快就可以找到对应最耗CPU的代码快在哪。  

简单的解释下,jstack下这一串线程信息内容:    "DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]nid : 对应的linux操作系统下的tid,就是前面转化的16进制数字 tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上,我自己还没到那种程度,所以先放下 top命令 命令:top -Hp pid  结果显示:

和前面的效果一下,你可以实时的跟踪并获取指定进程中最耗cpu的线程。 再用前面的方法提取到对应的线程堆栈信息。   判断I/O瓶颈 mpstat命令 命令:mpstat -P ALL 1 1000 结果显示:

注意一下这里面的%iowait列,CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。 通过这个参数可以比较直观的看出当前的I/O操作是否存在瓶颈   iostat命令 命令: iostat -m -x 1 1000

同样你可以观察对应的CPU中的%iowait数据,除此之外iostat还提供了一些更详细的I/O状态数据,比如比较重要的有:  avgqu-sz :  The average queue length of the requests that were issued to the device. (磁盘队列的请求长度,正常的话2,3比较好。可以和cpu的load一样的理解) await : The average time (in milliseconds) for I/O requests issued to the device to be served. (代表一个I/O操作从wait到完成的总时间) svctm和%util都是代表处理该I/O请求花费的时间和CPU的时间比例。 判断是否瓶颈时,这两个参数不是主要的   r/s w/s 和 rMB/s  wMB/s 都是代表当前系统处理的I/O的一些状态,前者是我们常说的tps,后者就是吞吐量。这也是评价一个系统的性能指标   pid命令 命令: pidstat -p pid -u -d -t -w -h 1 1000   结果显示:

相当实用的一个命令,可以基于当个进程分析对应的性能数据,包括CPU,I/O,IR , CS等,可以方便开发者更加精细化的观察系统的运行状态。不过pidstat貌似是在2.6内核的一些较新的版本才有,需要安装sysstat包。 ubuntu下,可以通过sudo apt-get install sysstat进行安装。 sar命令 命令:sar -x pid 1 1000

sar也可以指定对应的pid,关注固定的几个参数,没有pidstat那么强大。 看不到对应的I/O, IR等信息。 sar的功能可以覆盖mpstat , iostat的相关功能。 dstat命令 命令:dstat -y --tcp 1 1000通过dstat --tcp可以比较方便的看到当前的tcp的各种状态,不需要每次netstat -nat去看其他命令 netstat -natp : 查看对应的网络链接,关注下Recv-Q , Send-Q , State。 lsof -p pid : 查找对应pid的文件句柄 lsof -i : 80 : 查找对应端口被哪个进程占用 lsof /tmp/1.txt :查找对应文件被哪个进程占用 tcpdump / wireshark :抓包分析工具 jstat / jmap / jstack / jps 等一系列的java监控命令 最后 如果你想做一些性能调优的工作,一定要善于利用一些工具进行关注相应的状态。通过linux命令你可以比较方便的观测到CPU , I/O , network等一些比较外围的状态, 很多时候就已经可以解决大部分的问题。jvm内部的一些运行状态监控,得需要借助一些特有的工具进行细粒度的观测。

时间: 2024-07-31 14:21:46

用户CPU占用过大后的分析过程的相关文章

12月9日 - SQL server CPU占用率过高的分析过程

故障描述:今日二中的服务器CPU占用率一直非常高,几乎接近100%   分析步骤: 需要使用 SQL server自带的 Profiler工具

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

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

php-cgi进程占用cpu资源过大原因分析及解决

一,开启日志记录,为以后排查做准备 1.1 开启php-fpm.conf的错误日志和慢执行日志和常规日志, 采样一个小时,就可以根据这些日志的内容进行分析问题error_log = /tmp/error.log //错误日志access.log = /tmp/access.$pool.log //常规日志,记录每次访问时间,记录不同参数,以防止恶意攻击,后面会详细解析access.format = "%R – %u %t \"%m %r%Q%q\" %s %f %{mili}

sqlserver 索引优化 CPU占用过高 执行分析 服务器检查

原文:sqlserver 索引优化 CPU占用过高 执行分析 服务器检查 1. 管理公司一台服务器,上面放的东西挺多的.有一天有个哥们告诉我现在程序卡的厉害.我给他说,是时候读点优化的书了.别一天到晚没个正形,现在写的程序卡的跑不动.他说我本地 是好好的,跑的很快.我说别扯那么多没用的,服务器不比你的本子强得多.待洒家上去看看.不看不知道一看吓一跳,CPU占用在95上下.开个程序是不卡,可整点有些时间是卡的一匹.这就令人很难受了. 本来服务器上也没有什么,就一个网站和几个数据库.那一个个分析吧,

工具运行过程中,CPU占用过高的分析定位

之前使用Java Swing开发了一款设备档案收集工具.支持多台设备同时收集,每个设备使用一个线程.在同时收集多台设备信息时,发现CPU占用率居然达到了97%,而且高居不下.显然这样的性能是令人无法忍受的. 我们知道,通过jdk自带的工具jvisualvm可以查看每个线程的执行情况,但就是无法分析每个线程的CPU占用情况.由于工具是运行在Windows系统上的,所以也没办法像Linux下面那样通过命令去分析线程的CPU占用.而微软的process explorer工具可以解决这一难题.通过这个强

Linux jstack分析cpu占用100%

背景: 运行测试程序后,top命令发现某个进程(pid)占用cpu达到100%. 查看哪个线程占用最多资源: ps mp pid -o THREAD,tid,命令查看这个进程下面的所有线程占用情况. 发现线程324占用最多. 使用jstack进行跟踪: jstack pid 进行查看输出到临时文件 jstack 324> test 将刚刚发现占用cpu最多的线程id(324)换算成16进制,324==>144 查看jstack 生成的文件: 下面可以看出是哪行代码导致,查看那行代码发现有死循环

w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法

对于IIS 管理员来说,经常会碰到 Web 服务器 CPU 占用 100% 的情况,以下是个人的日常工作总结和一些解决办法,主要用来剖析 w3wp.exe(IIS )  占用 CPU 100% 的一些原因 和解决方案,希望能对你有所帮助 w3wp.exe的解释 : 全名,IIS Application Pool Process. w3wp.exe是IIS工具的一部.w3wp.exe是在IIS(因特网信息服务器)与应用程序池相关联的一个进程,如果你有多个应用程序池,就会有对应的多个w3wp.exe

多线程程序 怎样查看每个线程的cpu占用

可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序.这样就可以找到占用处理器的线程了. 直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号,然后跳转到3.查看哪个进程线程

java web服务器cpu占用过高的处理

平时项目中有时遇到cpu过高的情况,在此基于自己有限的经验写个分享,此处的服务器都是基于linux平台. cpu的占有线程类型总的来说分为两种:us :用户空间占用CPU百分比sy :内核空间占用CPU百分比在linux下可以通过top命令查看详细,示例如下: 一般来讲CPU us高的解决方法:CPU us 高的原因主要是执行线程不需要任何挂起动作,且一直执行,导致CPU 没有机会去调度执行其他的线程.CPU sy高的解决方法:CPU sy 高的原因主要是线程的运行状态要经常切换,对于这种情况,