进程占用cpu过高分析总结

2024-08-22 18:08

本文主要是介绍进程占用cpu过高分析总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

cpu排查过程记录

1. 使用top命令获取占用CPU最高的进程号

top
top - 10:21:31 up 783 days, 23:45,  1 user,  load average: 157.74, 144.77, 125.50
Tasks: 833 total,   5 running, 828 sleeping,   0 stopped,   0 zombie
Cpu(s): 48.5%us, 49.8%sy,  0.0%ni,  1.1%id,  0.0%wa,  0.0%hi,  0.6%si,  0.0%st
Mem:  132124464k total, 60951572k used, 71172892k free,    49348k buffers
Swap: 32767992k total,     1260k used, 32766732k free, 17250188k cachedPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                             
63080 sms_pt    20   0 56.8g  14g  11m S 3030.6 11.2   7335:30 java                                                                                                               
34482 sms_pt    20   0 56.4g 6.0g  11m S 743.1  4.8 509:42.39 java                                                                                                                
54999 sms_pt    20   0 57.1g  14g  11m S 724.1 11.9   5422:52 java     

可以看到进程号63080的进程占用CPU瞬时值达到3000多。

2. 根据进程号查看线程信息

ps -o THREAD,tid.time -mp $PID
#输出的内容比较多,不一一列出,可以根据自己的需要进行排序
#可以按照自己的需求进行排序
#命令如下:
# ps -o THREAD,tid.time -mp $PID|sort -nk $列数
#为了能获取完整结果,建议重定向

我把CPU的占用时间进行排序,截取一部分内容显示

sms_pt    1.3  19    - poll_s    -      - 36638 00:10:36
sms_pt    1.3  19    - poll_s    -      - 36720 00:10:31
sms_pt    1.3  19    - poll_s    -      - 36861 00:10:32
sms_pt    1.3  19    - poll_s    -      - 36907 00:10:38
sms_pt    1.3  19    - poll_s    -      - 36995 00:10:28
sms_pt    1.3  19    - poll_s    -      - 37020 00:10:38
sms_pt    1.3  19    - poll_s    -      - 37087 00:10:30
sms_pt    1.3  19    - poll_s    -      - 37136 00:10:32
sms_pt    1.3  19    - poll_s    -      - 37142 00:10:32
sms_pt    1.3  19    - poll_s    -      - 37368 00:10:29
sms_pt    1.4  19    - poll_s    -      - 55366 00:14:12
sms_pt    1.5  19    - poll_s    -      - 56871 00:14:36
sms_pt    1.6  19    - ep_pol    -      - 54976 00:16:00
sms_pt    2.6  19    - ep_pol    -      - 55221 00:25:22
sms_pt    2.6  19    - ep_pol    -      - 55222 00:25:23
sms_pt    3.0  19    - -         -      - 36818 00:24:39
sms_pt    3.0  19    - poll_s    -      - 37148 00:24:29
USER     %CPU PRI SCNT WCHAN  USER SYSTEM   TID     TIME
sms_pt   11.5  19    - -         -      - 55223 01:52:28
sms_pt    798   -    - -         -      -     - 5-09:38:31

3 查看堆栈信息

#堆栈信息重定向到文件
jstack $PID >> $file_name
#在堆栈信息里面tid(线程号)是用16进制显示,先将线程号转为16进制
$ printf "%x\n" 37148
911c
$ grep "911c" -A20 $filename
"http-nio-20002-exec-714" daemon prio=10 tid=0x00007f6250343800 nid=0x911c waiting on condition [0x00007f5e02221000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x0000000086a80be8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:86)at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:32)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)

给开发反馈之后,mq占用CPU资源比较多,已经在修改。

4. 根据自己的需要统计信息

统计线程的运行状态

# 这样会返回所有的状态
grep "java.lang.Thread.State:" $filename|awk '{print $2}'
#稍微改一下获取统计结果
$ grep "java.lang.Thread.State:" $filename|awk '{++s[$2]}END{for( a in s ) print s[a],a}'
7 WAITING
790 TIMED_WAITING
2 BLOCKED
299 RUNNABLE

这篇关于进程占用cpu过高分析总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097013

相关文章

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请