如何回答“线上CPU100%排查”面试问题
2024-10-21 09:51:20
案例:
public class App
{
public static void main( String[] args )
{
int a = 0;
while (a < 100) {
a *= 10;
}
}
}
把上述代码放到项目中,打成jar包,然后丢到服务器上,使用java -jar xxx.jar命令运行jar包;
使用 top -c 查看cpu情况:
使用 top -Hp 126018 查看一个进程的线程运行信息列表,可按下P,进程按照cpu使用率排序
上图pid是十进制的数据,需要将其转为十六进制,使用命令 printf '%x' 126019 输出 :1ec43
[appdeploy@CNSZ22VL3901:/home/appdeploy]$printf '%x' 126019
1ec43
使用命令将进程快照导出:
jstack -l 126018 > ./126018.stack
然后使用less命令查看线程1ec43干了什么:
"main" #1 prio=5 os_prio=0 tid=0x00007f9eac008800 nid=0x1ec43 runnable [0x00007f9eb294a000]
java.lang.Thread.State: RUNNABLE
at com.sf.App.main(App.java:13) Locked ownable synchronizers:
- None "VM Thread" os_prio=0 tid=0x00007f9eac0f9000 nid=0x1ec46 runnable "GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f9eac01d800 nid=0x1ec44 runnable "GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f9eac01f800 nid=0x1ec45 runnable "VM Periodic Task Thread" os_prio=0 tid=0x00007f9eac155000 nid=0x1ec4d waiting on condition JNI global references: 9
从上面日志可以看出该线程存在死锁《Locked ownable synchronizers》,具体代码:com.sf.App.main(App.java:13)
执行过程中遇到的如下问题:
no main manifest attribute, in demo-1.0.jar
最新文章
- 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践
- SqlServer删除表中重复记录
- 【mysql】压缩myisam数据表
- Ubuntu/CentOS使用BIND配置DNS服务器
- 数据结构复习:直接插入排序与二分插入排序的C++实现
- [转] 三步将你的 React Native 项目运行在 Web 浏览器上面
- JS 查找遍历子节点元素
- 微信JS图片上传与下载功能--微信JS系列文章(三)
- 在JBoss AS7中进行项目部署
- spring-mvc List及数组的配置接收
- express整合webpack的打包文件dist
- 在Intellij idea 2017中运行tomcat 8.5
- 使用python实现人脸检测
- 运维监控利器Nagios之:nagios配置详解
- Abp.vNext 权限备注
- pytest框架之fixture详细使用
- Flask 系列之 FlaskForm
- Intelij U
- linux:scp从入门到刚入门
- Java 工程名上有个红色叹号