使用jstack分析java程序cpu占用率过高的问题

1,使用jps查找出java进程的pid,如3707
2,使用top -p 14292 -H观察该进程中所有线程的CPU占用。
[root@cp01-game-dudai-0100.cp01.baidu.com ~]# top -p 14292 -H top - 22:14:13 up 33 days, 7:29, 4 users, load average: 25.68, 32.11, 33.76 Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie Cpu(s): 68.3%us, 6.3%sy, 0.0%ni, 20.2%id, 0.1%wa, 0.2%hi, 4.9%si, 0.0%st Mem: 65965312k total, 65451232k used, 514080k free, 82164k buffers Swap: 975864k total, 972052k used, 3812k free, 9714400k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15844 root 15 0 6889m 5.7g 4864 S 20.6 9.1 814:13.29 java 15848 root 15 0 6889m 5.7g 4864 S 13.0 9.1 460:25.17 java 15611 root 15 0 6889m 5.7g 4864 S 12.7 9.1 468:17.77 java 15613 root 15 0 6889m 5.7g 4864 S 11.7 9.1 479:40.45 java 15743 root 15 0 6889m 5.7g 4864 S 11.7 9.1 443:04.80 java 15612 root 15 0 6889m 5.7g 4864 S 11.0 9.1 453:43.68 java 15965 root 15 0 6889m 5.7g 4864 S 10.3 9.1 371:00.33 java 15490 root 15 0 6889m 5.7g 4864 S 7.7 9.1 255:32.74 java 15587 root 15 0 6889m 5.7g 4864 S 7.3 9.1 282:27.58 java 15590 root 15 0 6889m 5.7g 4864 S 7.3 9.1 205:48.37 java 15491 root 15 0 6889m 5.7g 4864 R 6.3 9.1 279:09.08 java 15689 root 15 0 6889m 5.7g 4864 S 5.7 9.1 251:42.36 java 16935 root 15 0 6889m 5.7g 4864 S 5.7 9.1 190:34.37 java 15665 root 15 0 6889m 5.7g 4864 S 5.3 9.1 250:07.34 java 16920 root 15 0 6889m 5.7g 4864 S 5.3 9.1 241:34.50 java 15671 root 15 0 6889m 5.7g 4864 S 5.0 9.1 239:49.97 java 15492 root 15 0 6889m 5.7g 4864 S 4.7 9.1 210:23.09 java 14322 root 16 0 6889m 5.7g 4864 S 4.3 9.1 107:39.61 java 14316 root 16 0 6889m 5.7g 4864 S 4.0 9.1 107:18.43 java 14317 root 16 0 6889m 5.7g 4864 S 4.0 9.1 107:29.13 java 15591 root 15 0 6889m 5.7g 4864 S 4.0 9.1 114:34.90 java 14313 root 16 0 6889m 5.7g 4864 S 3.7 9.1 107:12.70 java 14314 root 15 0 6889m 5.7g 4864 S 3.7 9.1 107:28.05 java 14319 root 16 0 6889m 5.7g 4864 S 3.7 9.1 107:27.43 java 14321 root 15 0 6889m 5.7g 4864 S 3.3 9.1 108:01.12 java 15589 root 15 0 6889m 5.7g 4864 R 3.0 9.1 109:01.91 java 15615 root 15 0 6889m 5.7g 4864 S 3.0 9.1 114:55.29 java 16808 root 15 0 6889m 5.7g 4864 S 2.7 9.1 279:05.03 java 14315 root 15 0 6889m 5.7g 4864 S 2.0 9.1 107:45.00 java 14320 root 15 0 6889m 5.7g 4864 S 2.0 9.1 107:48.30 java 15489 root 15 0 6889m 5.7g 4864 S 1.7 9.1 57:38.46 java 15670 root 15 0 6889m 5.7g 4864 S 1.3 9.1 5:55.43 java 14318 root 15 0 6889m 5.7g 4864 S 0.7 9.1 107:45.88 java 14826 root 15 0 6889m 5.7g 4864 S 0.7 9.1 25:07.64 java
3,找出CPU消耗较多的线程id,如15844,将15844转换为16进制0x3de4,注意是小写哦
4,使用jstack 14292|grep -A 10 0x3de4来查询出具体的线程状态。
[root@cp01-game-dudai-0100.cp01.baidu.com ~]# jstack 14292|grep -A 10 0x3de4
"pool-52-thread-1" prio=10 tid=0x000000005a08e000 nid=0x3de4 waiting on condition [0x00002ae63d917000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006f9a0a110> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:662)
通过这些线程状态便可基本定位问题之所在。
解决办法:
方法1
1.jps 获取Java进程的PID。
2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。
3.top -H -p PID 查看对应进程的哪个线程占用CPU过高。
4.echo “obase=16; PID” | bc 将线程的PID转换为16进制,大写转换为小写。
5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。
6.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。
方法2
1.使用top 定位到占用CPU高的进程PID
top
通过ps aux | grep PID命令
2.获取线程信息,并找到占用CPU高的线程
ps -mp pid -o THREAD,tid,time | sort -rn
3.将需要的线程ID转换为16进制格式
printf "%x\n" tid
4.打印线程的堆栈信息
jstack pid |grep tid -A 30
总结
以上就是本文关于java应用cpu占用过高问题分析及解决方法的全部内容,希望对大家有所帮助,如果有什么疑问,可以随时留言,小编会及时回复大家的。感谢朋友们对网站的支持。
# java
# 应用
# cpu
# 过高
# java程序占用cpu过高
# java占用cpu过高
# Java进程cpu占用过高问题解决
# Java实现获取cpu、内存、硬盘、网络等信息的方法示例
# java实战CPU占用过高问题的排查及解决
# Java应用CPU使用率过高排查方式
# Java获取CPU和内存占用率最简单的方法
# java应用cpu飙升(超过100%)故障排查步骤
# Java服务cpu100%的解决过程分享
# java cpu飙升问题的详细分析和处理方法
# 转换为
# 都是
# 有什么
# 朋友们
# 便可
# 较多
# 解决方法
# 可以随时
# 解决办法
# 第二步
# 小编
# 占用率
# SHR
# RES
# TIME
# MEM
# PR
# USER
# VIRT
相关文章:
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何在IIS中新建站点并配置端口与IP地址?
如何配置支付宝与微信支付功能?
如何选择CMS系统实现快速建站与SEO优化?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
创业网站制作流程,创业网站可靠吗?
如何彻底删除建站之星生成的Banner?
如何在云指建站中生成FTP站点?
高端云建站费用究竟需要多少预算?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
制作表格网站有哪些,线上表格怎么弄?
如何在腾讯云服务器快速搭建个人网站?
Java解压缩zip - 解压缩多个文件或文件夹实例
文字头像制作网站推荐软件,醒图能自动配文字吗?
建站之星如何配置系统实现高效建站?
香港服务器租用费用高吗?如何避免常见误区?
建站与域名管理如何高效结合?
如何选择最佳自助建站系统?快速指南解析优劣
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
专业网站建设制作报价,网页设计制作要考什么证?
linux top下的 minerd 木马清除方法
建站之星如何快速解决建站难题?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何在腾讯云免费申请建站?
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何通过二级域名建站提升品牌影响力?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何用搬瓦工VPS快速搭建个人网站?
历史网站制作软件,华为如何找回被删除的网站?
建站之星Pro快速搭建教程:模板选择与功能配置指南
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何自定义建站之星模板颜色并下载新样式?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
免费ppt制作网站,有没有值得推荐的免费PPT网站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
青岛网站建设如何选择本地服务器?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何用低价快速搭建高质量网站?
红河网站制作公司,红河事业单位身份证如何上传?
如何选择适合PHP云建站的开源框架?
制作证书网站有哪些,全国城建培训中心证书查询官网?
ui设计制作网站有哪些,手机UI设计网址吗?
简历在线制作网站免费版,如何创建个人简历?
*请认真填写需求信息,我们会在24小时内与您取得联系。