Java 线上cpu占用过高分析
转载于:https://blog.csdn.net/ch999999999999999999/article/details/113151519
感谢作者:ch999999999999999999
Java 线上cpu占用过高分析
1、top 命令查看占用过高线程
9401 root 20 0 3163948 43592 11932 S 1.3 1.2 0:15.81 java 2609 polkitd 20 0 1333984 209256 11044 S 0.3 5.6 1:27.59 mysqld
13301 root 10 -10 145952 20784 5980 S 0.3 0.6 84:17.34 AliYunDun
23125 polkitd 20 0 1780292 514228 11512 S 0.3 13.8 19:45.03 mysqld
- 1
- 2
- 3
- 4
可以看出pid 为9401的线程占用过高
2、查看是哪个线程占用过高, 哪个线程耗费了多长时间
ps -mp 9401 -o THREAD,tid,time参数
// 参数解释
-m 显示所有的线程
-p pid 进程使用cpu的时间
-o 该参数是用户自定义格式
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 1.8 - - - - - - 00:00:20
root 0.0 19 - futex_ - - 9401 00:00:00
root 1.7 19 - n_tty_ - - 9402 00:00:19
root 0.0 19 - futex_ - - 9403 00:00:00
root 0.0 19 - futex_ - - 9404 00:00:00
root 0.0 19 - futex_ - - 9405 00:00:00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
可以看出9402线程 占用过高
3、将线程id转换为16进制格式(英文字母小写格式) -> printf “%x\n” 有问题的线程id
printf "%x\n" 9402
- 1
结果: 24ba
4、jstack 进程ID|grep tid(16进制线程小写英文) -A60
jstack 9402 | grep 24ba -A60
- 1
结果:
"main" #1 prio=5 os_prio=0 tid=0x00007fc380009800 nid=0x2c84 runnable [0x00007fc387caa000]java.lang.Thread.State: RUNNABLEat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:326)at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)- locked <0x00000000c701b490> (a java.io.BufferedOutputStream)at java.io.PrintStream.write(PrintStream.java:482)- locked <0x00000000c7004fb0> (a java.io.PrintStream)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)- locked <0x00000000c7004f70> (a java.io.OutputStreamWriter)at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)at java.io.PrintStream.newLine(PrintStream.java:546)- eliminated <0x00000000c7004fb0> (a java.io.PrintStream)at java.io.PrintStream.println(PrintStream.java:737)- locked <0x00000000c7004fb0> (a java.io.PrintStream)at TestJavaLinux.main(TestJavaLinux.java:11)
“VM Thread” os_prio=0 tid=0x00007fc380073000 nid=0x2c87 runnable
“GC task thread#0 (ParallelGC)” os_prio=0 tid=0x00007fc38001e800 nid=0x2c85 runnable
“GC task thread#1 (ParallelGC)” os_prio=0 tid=0x00007fc380020800 nid=0x2c86 runnable
“VM Periodic Task Thread” os_prio=0 tid=0x00007fc3800bf000 nid=0x2c8e waiting on condition
JNI global references: 5
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
由此可见是 at TestJavaLinux.main(TestJavaLinux.java:11) 我们的11行代码产出的原因
我们在代码里面写了死循环
5、注意:
注意:这里要使用程序启动的用户执行此命令
使用root会提示:
Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding
Java 线上cpu占用过高分析相关推荐
- java线上CPU、内存打满处理
java线上内存打满处理 1.环境说明 2.mac 启动jvisualvm 3.模拟堆内存溢出 4. JVM参数-XX:+HeapDumpOnOutOfMemoryError 5.执行模块方法 6.发 ...
- 一次jvm导致线上内存占用过高问题定位
背景:8G物理内存,8核CPU,jvm使用的G1垃圾回收器. 问题:线上内存占用告警,内存占用超过85%,且现象一直持续. 分析 看一下jvm启动参数配置: -Xms6144m -Xmx6144m - ...
- Java线上CPU内存冲高问题排查步骤
1 引言 作为一名从事Java开发快一年的程序员,在线上经常碰到某个模块的Pod发出CPU与内存告警的问题,而这些问题会导致系统响应缓慢甚至是服务不可用.一般情况下可以通过重启或者调高Pod的资源量或 ...
- java 一次CPU占用过高问题的排查及解决,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- 线上CPU负载过高处理
一.背景 线上CPU报警 占用率过 90% 告警了一晚上 第二天才处理的. 二.处理 1.top 命令 使用 top 命令查看后,load average 也是超负荷的状态,用户态的CPU占比 确实很 ...
- java应用CPU占用过高分析、C2 Compiler Thread高CPU占用分析
文章目录 1. 查找进程下占用过高CPU的线程 1.1 查找应用对应的pid 1.2 查看哪个线程cpu占用高,确定对应的线程id: 1.3 计算线程id的十六进制值 1.4 打印线程堆栈内容 2. ...
- 记录一次线上CPU负载过高的排查过程
背景 一大早收到运维同学反馈.线上某台机器cpu的负载达到了97%以上,为了不影响机器上服务的正常运行,急需找到导致负载过高的原因并将负载降到合理的区间. 用到命令 top/uptime:查看负载情况 ...
- Java项目服务器cpu占用过高怎么办?
借用汤师爷的一句话:"麻匪一定要缴---没有麻匪的日子才是好日子". 作为程序员,bug一定是要处理的,没有bug的日子才是好日子!你想想,你正吃着火锅唱着歌,突然收到生产环境异常 ...
- 如何定位线上CPU占用过高的问题
服务器线上问题开发系列 文章目录 服务器线上问题开发系列 前言 一.定位问题流程 二.使用实例流程 1.代码 2.定位问题实践过程 总结 前言 一.定位问题流程 项目上线,CPU飙高不下,触发报警,如 ...
最新文章
- PS2019画笔工具、铅笔工具、颜色替换工具
- 防护很重要!教你教你认识和检验安防产品的IP防护等级
- Git的冲突解决过程
- java类似goto_原来java中也有类似goto语句的标签啊--java label标签
- Sql 语句收集——行转列
- 4.6上午口语练习 阅读词汇
- redhat linux 7 ntp,技术|RHCE 系列(十):在 RHEL/CentOS 7 中设置 NTP(网络时间协议)服务器...
- Java的几个不错的网站
- vue2.0 $set()的用法
- iPhone手机硬件拆解介绍
- element el-table表头添加背景图片
- 如何根据IP地址获取局域网内的主机名称
- 二分查找的左右逼近法
- Jzoj4896 兔子
- C# Find() 与 FindAll()方法的使用
- 操作系统的概念 (OS学习笔记)
- Mathcad使用数学表达式
- 一部值得收藏的PDA进化史
- Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码
- python3中文件的读与写
热门文章
- (附源码)springboot旧物回收管理系统 毕业设计 221713
- pqc的中文全称_PQC ,IQC ,QC 这三个之间是什么关系?有什么不同?
- 决定面试成败的3个独立思考能力面试题
- hao123网址之家--智能计算器 html源代码
- Android 浅谈适配全面屏、刘海屏、水滴屏
- 卸载百度软件修复服务器,技术员修复win10系统重装后自带百度卫士无法卸载的办法...
- 【MATLAB教程案例4】直接序列扩频通信系统的MATLAB仿真
- ubuntu打开rar文件方法
- C语言中whlie(1)跳出循环的三种结束方式
- Office含有多个“需要激活。。。”授权信息无法删除的解决办法(包含了管理员切换到指定目录,在最后面)