linux系统下排查cpu过高原因
2021/10/27 7:14:41
本文主要是介绍linux系统下排查cpu过高原因,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
上篇讲到windows下排查cpu过高原因,后续将demo放到了linux系统里面,再写篇linux下排查cpu高
1、首先查看当前linux下跑的cpu
命令:top,查看cpu使用异常的进程PID,我本地环境的异常进程时71983
2、查看所有java进程找到具体哪个项目的进程
命令:ps - ef | grep java 查看具体是哪个项目 可以看到71983是我的一个websocket-recive的demo项目
3、使用top -H -p PID 查看异常线程
命令: top -H -p 进程号(71983),查看此项目的异常线程,可以看到72331这个线程一直再占用cpu
4、步骤三展示PID是10进制的,系统语言记录的是16进制需要转换
命令:printf "%x\n" 线程号(72331)
5、使用jdk的命令 jstack 进程号(71983) | grep 16进制线程号(11a8b) -A90
命令:jstack 进程号(71983) | grep 16进制线程号(11a8b) -A90 可以找到指定异常线程的代码所在
6、可以看到对应的实体类中对应的代码逻辑
分析后得出结论:
线程会一直查询活跃线程和线程队列是否大于0。此时所有线程都不会释放,导致cpu飙升。应该在队列没数据时和不存在可用线程后休眠
7、重新上传项目后,查看CPU使用,会发现问题项目所用cpu降下来了。
注意事项:
如果提示 -bash: jstack: command not found,则可以找到jdk的目录,进入bin目录,再执行 ./jstack 进程号 | grep 16进制异常线程号 -A90 即可。
如果提示 well-known file is not secure,则是因为账号权限的问题。在/tmp/hsperfdata_$USER/目录,有一个以进程号命名的文件,当我们执行jmap或者jstack出现上叙信息时,先检查执行该命令的用户是否和hsperfdata_$USER这个文件所属的用户一致,如果不一致,切换至成一致再执行。执行:sudo -u 有权限的账号 ./jstack 进程号 | grep 16进制异常线程号 -A50 即可。
这篇关于linux系统下排查cpu过高原因的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南