网站首页 > java教程 正文
文章目录
- 前言
- 1.高手怎样定位CPU高问题
- 1.1找到Cpu消耗比较高的进程:
- 1.2通过问题进程找到线程:
- 1.3通过线程id进行打印问题代码:
- 1.4通过上面步骤的异常代码查询定位代码:
- 1.5总结:
- 2.其他的定位问题的命令:
- 2.1 jps和jmap
- 2.2 jinfo命令:
- 2.3 jstat命令:
- 2.4 jstack命令:
- 3总结
前言
现在我们部署jar包服务都是在linux上面,仅仅是代码写的好还不行,我们还要能够进行排查问题,利用一些常用的linux命令来分析运行日志、异常堆栈信息、堆使用、GC信息、JVM参数分析、线程分析等等
1.高手怎样定位CPU高问题
1.1找到Cpu消耗比较高的进程:
top -c
#-c可以让我们更好的看到执行的命令
1.2通过问题进程找到线程:
假设进程id为36
ps p 36 -L -o pcpu,pid,tid,time,tname,cmd
1.3通过线程id进行打印问题代码:
现在定位的问题线程id为46
printf "%x\n" 46
找到对应的nid(native thread id. 每一个nid对应于linux下的一个tid) 信息
1.4通过上面步骤的异常代码查询定位代码:
jstack -l 3036 |grep 'nid对应的异常信息'
1.5总结:
上面就是通用的服务器上面运行jar包进行定位问题的流程,但是现在很多公司已经采用Docker容器技术,可能上面的定位问题的方法有些地方已经不再适用。下面会继续介绍其他的容器中也能使用的命令来定位问题。
2.其他的定位问题的命令:
2.1 jps和jmap
jps -v
该命令和jmap 的heap很像,但是没有jmap的命令全面,只是简单的输出了jvm的运行参数:
jmap的命令
显示Java堆详细信息
jmap -heap 进程id
效果图:
jmap的histo命令:
显示堆中对象的统计信息:
jmap -hsito pid
效果图:
生成dump文件命令:
jmap -dump:format=b,file=heapdump.phrof pid
生成堆转储快照dump文件后可以进行拷贝到外面用工具进行分析。
2.2 jinfo命令:
jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态地修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息.
。
命令:
jinfo pid
效果图:
2.3 jstat命令:
主要是为了查看和分析gc的相关情况:
jstat -gc pid
效果图:
2.4 jstack命令:
jstack是分析jdk线程的命令,比较重要,命令:
jstack -l 37
效果图:
jstack是比较重要的线程分析的命令,进行查看线程的创建情况,运行状态等等,其中我们需要重点关注的是死锁的线程、阻塞的线程等。
线程状态 | 备注 |
死锁 | Deadlock(重点关注) |
执行中 | Runnable |
等待资源 | Waiting on cond分析名tion(重点关注) |
等待获取监视器 | Waiting on monitor entry(重点关注) |
暂停 | Suspended |
对象等待中 | Object.wait() 或 TIMED_WAITING |
阻塞 | Blocked(重点关注) |
停止 | Parked |
3总结
不同的运行环境可能会出现不同的问题,程序员要做的就是尽量上线前能够诊断出来自己的代码问题,上线后能够根据问题的表象进行定位和解决问题,希望这篇文章能够帮助到大家。
猜你喜欢
- 2025-05-08 idea最新激活jetbrains-agent.jar包,亲测有效
- 2025-05-08 Java开发者手把手教你配置数据库连接池
- 2025-05-08 解决idea配置自定义的maven失败的问题
- 2025-05-08 Spring概述:Spring中lOC和DI介绍,Spring框架用啥方式配置数据
- 2025-05-08 Java中如何将文件内容读取为字符串
- 2025-05-08 springboot的jar如何读取外部的yml配置文件
- 2025-05-08 Spring Boot中通过@PropertySource注解读取yaml或yml配置文件
- 2025-05-08 详细介绍一下使用@ConfigurationProperties读取复杂配置
- 2025-05-08 SpringBoot多模块配置文件读取(springboot多模块配置文件加载)
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)