linux查看某个进程CPU消耗较高的具体线程或程序的方法

目前我们的监控,可以发现消耗较高CPU的进程(阀值为3个CPU),通过监控我们可以找到消耗较高CPU的进程号;

通过进程号pid,我们在linux上可以通过top –H –p <pid>命令,显示该进程中每个线程的CPU资源消耗情况。

然后通过threadump命令,可以打印出某个应用JVM中某时刻所有线程的调用情况,通过线程号我们就可以对应找到线程调用的程序了。

另:

使用jrcmd命令也可以进行threadump和进程执行线程情况的查看,但该命令为jrockit 5.0 新带的命令,在wls81用户下,我们没有执行权限,但可以联系中间件帮忙执行。

1. 进入到jrockit/bin目录下
2. 打./jrcmd 回车,会看到当前所有在执行中的java进程的PID号
3. 打./jrcmd [PID] help 回车,会看到指定java进程支持的操作
4. 打./jrcmd [PID] print_threads > xxxFile,可以把当前java进程中的所有线程堆栈轨迹打印到指定文件中

示例:

[[email protected] wls]$ top

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+ 
COMMAND

228961 wls81     15   0  714m 637m 1804 S 755.7  0.2 383:24.53 java

[[email protected] wls]$ top -H -p 228961

top - 13:37:01 up 156 days, 16:11,  8 users,  load average: 14.24, 13.82, 12.88

Tasks: 140 total,  23 running, 117 sleeping,   0 stopped,   0 zombie

Cpu(s): 25.6%us,  1.6%sy,  0.0%ni, 72.6%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st

Mem:  264120292k total, 217896772k used, 46223520k free,  4547804k buffers

Swap:  3145720k total,      464k used,  3145256k free, 153619224k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+ 
COMMAND

229077
wls81     15   0  714m 637m 1804 R 32.6  0.2   7:11.79
ExecuteThread:

229093
wls81     15   0  714m 637m 1804 R 32.6  0.2  23:41.47
ExecuteThread:

229073
wls81     15   0  714m 637m 1804 R 32.2  0.2   2:24.30
ExecuteThread:

229076
wls81     15   0  714m 637m 1804 R 32.2  0.2   2:22.75
ExecuteThread:

229078
wls81     15   0  714m 637m 1804 R 32.2  0.2   7:21.38
ExecuteThread:

229082
wls81     15   0  714m 637m 1804 R 32.2  0.2  10:14.74
ExecuteThread:

229084
wls81     15   0  714m 637m 1804 R 32.2  0.2   8:43.72
ExecuteThread:

229085
wls81     15   0  714m 637m 1804 R 32.2  0.2  12:45.62
ExecuteThread:

229087
wls81     15   0  714m 637m 1804 R 32.2  0.2  19:11.79
ExecuteThread:

229089
wls81     15   0  714m 637m 1804 R 32.2  0.2  23:22.67
ExecuteThread:

229075
wls81     15   0  714m 637m 1804 R 31.9  0.2   5:06.52 ExecuteThread:

229088
wls81     15   0  714m 637m 1804 R 31.9  0.2  13:19.55
ExecuteThread:

229090
wls81     15   0  714m 637m 1804 R 31.9  0.2  23:53.55
ExecuteThread:

229092
wls81     15   0  714m 637m 1804 R 31.9  0.2  24:20.10
ExecuteThread:

229094
wls81     15   0  714m 637m 1804 R 31.9  0.2  33:25.41
ExecuteThread:

229095
wls81     15   0  714m 637m 1804 R 31.9  0.2  33:41.20
ExecuteThread:

229096
wls81     15   0  714m 637m 1804 R 31.9  0.2  36:22.72
ExecuteThread:

229081
wls81     15   0  714m 637m 1804 R 31.6  0.2   7:28.80
ExecuteThread:

229083
wls81     15   0  714m 637m 1804 R 31.6  0.2  11:05.48
ExecuteThread:

229086
wls81     15   0  714m 637m 1804 R 31.6  0.2  11:40.36
ExecuteThread:

229091
wls81     15   0  714m 637m 1804 R 31.6  0.2  17:53.92
ExecuteThread:

229097
wls81     15   0  714m 637m 1804 R 31.6  0.2  32:41.28
ExecuteThread:

229079 wls81     15   0  714m 637m 1804 R 31.2  0.2   7:33.44 ExecuteThread:

229080
wls81     15   0  714m 637m 1804 S  1.3  0.2   0:14.13
ExecuteThread:

228963
wls81     15   0  714m 637m 1804 S  0.7  0.2   0:13.44 (GC Main
Thread

229070
wls81     15   0  714m 637m 1804 S  0.7  0.2   0:05.97
ExecuteThread:

229664 wls81     15   0  714m 637m 1804 S  0.7  0.2   0:08.69 pool-1-thread-7

Threadump信息片段:

229083:

"ExecuteThread: ‘35‘ for queue: ‘weblogic.kernel.Default‘" id=44 idx=0xd4 tid=229083 prio=5 alive, daemon

at java/util/HashMap.get(HashMap.java:319)

at com/paic/abbs/biz/service/common/impl/HardCodeServiceImpl.getString(HardCodeServiceImpl.java:115)

at com/paic/abbs/biz/service/util/impl/UtilServicesImpl.isExpected(UtilServicesImpl.java:45)

at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.policyIssuing(AbbsInternetServiceImpl.java:3156)

at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.procRequest(AbbsInternetServiceImpl.java:218)

at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.handleRequest(AbbsInternetServiceImpl.java:122)

at
com/paic/abbs/biz/service/common/impl/AbbsInternetService_gwxgqo_EOImpl.handleRequest(AbbsInternetService_gwxgqo_EOImpl.java:262)

at sun/reflect/GeneratedMethodAccessor287.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)

at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodA

时间: 2025-01-31 08:53:17

linux查看某个进程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下分析某个进程CPU占用率高的原因

  Linux下分析某个进程CPU占用率高的原因 通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用  1.top 查到占用cpu高的进程pid 2.查看该pid的线程:top -H -p 9532 3.查看这个线程所有系统调用:strace -p 10017 不停循环输出Connection timed out,让开发查看问题 原文地址:https://www.cnblogs.com/chenjw-note/p/8370679.html

linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定

背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况.一. linux ps命令,查看某进程cpu和内存占用率情况[[email protected] vhost]# ps auxUSER       PID  %CPU    %MEM    VSZ   RSS TTY      STAT    START   TIME COMMAND解释:linux 下的ps命令USER 进程运行用户PID    进程编号%CPU 进程的cpu占用率%MEM 进程的内存占用率VSZ

linux查看占用内存/cpu最高的进程情况

linux查看占用cpu最高的进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head 或者top (然后按下M,注意这里是大写) linux查看占用内存最高的进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head 或者top (然后按下P,注意这里是大写) 该命令组合实际上是下面两句命令: ps aux|head -1 ps aux|grep -v PID|sort -rn -k

Linux命令之查看内存和CPU消耗命令TOP使用

1)输入top ,按enter键,即可查看服务器内存消耗情况 注意:其中PID表示进程号 :%cpu表示cpu消耗情况:%M表示内存消耗情况:通常在做性能测试的时候用到该命令: 默认为实时刷新:按s键可以设置刷新间隔 原文地址:https://www.cnblogs.com/fengyiru6369/p/10033631.html

Linux环境下的CPU消耗分析

在Linux系统中, CPU 主要用于中断,内核以及用户进程的任务处理,优先级为 中断 > 内核 > 用户进程.在CPU消耗分析中,我们还经常遇到下面几个概念. 上下文切换         每个CPU在同一时间只能执行一个线程, Linux 中线程是抢占式调度的. 也就是说每个线程分配一定的执行时间,当到达执行时间,线程中有IO阻塞或者高优先级线程要执行时,Linux将切换执行的线程,在切换时要存储目前线程的的执行状态,并恢复要执行的线程的状态,这个过程就称为上下文切换.在java 应用程序中

使用jstack分析cpu消耗过高的问题

我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2    18   0 1817m 776m 9712 S  3.3  4.9  12:03.24 java                                                                                           5284 co_ad    

排查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