Linux排查问题工具汇总
一、Linux问题排查命令
uptime

top

free

vmstat
iostat
ifstat
二、Sun JDK自带工具
jps(虚拟机进程状况工具)
[peng@manjaro java]$ jps -l
SynAddRunnable
sun.tools.jps.Jps
[peng@manjaro ~]$ jps -l
sun.tools.jps.Jps
[peng@manjaro ~]$ jps -v
Jps -Denv.class.path=.:/opt/jdk1..0_212lib:/opt/jdk1..0_212/jre/lib -Dapplication.home=/opt/jdk1..0_212 -Xms8m
jstat(虚拟机统计信息工具)
该工具比较常用,可以查看GC 的详细信息,比如eden ,from,to,old 等区域的内存使用情况。
例如,查询虚拟机的运行状态信息,每隔1000ms,总共5次。
[peng@manjaro ~]$ jstat -gc
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
5120.0 5120.0 0.0 352.0 31744.0 21905.2 84992.0 8.0 4864.0 2467.5 512.0 264.6 0.001 0.000 0.001
5120.0 5120.0 0.0 352.0 31744.0 21905.2 84992.0 8.0 4864.0 2467.5 512.0 264.6 0.001 0.000 0.001
5120.0 5120.0 0.0 352.0 31744.0 21905.2 84992.0 8.0 4864.0 2467.5 512.0 264.6 0.001 0.000 0.001
5120.0 5120.0 0.0 352.0 31744.0 21905.2 84992.0 8.0 4864.0 2467.5 512.0 264.6 0.001 0.000 0.001
5120.0 5120.0 0.0 352.0 31744.0 21905.2 84992.0 8.0 4864.0 2467.5 512.0 264.6 0.001 0.000 0.001
jmap(Java内存映射工具)
可以生成堆转储快照(一般称为heapdump或dump文件)。获取Java堆转储快照的方式有以下几种:
①(自动生成)使用-XX:+HeapDumpOnOutOfMemoryError参数,让虚拟机在OOM后自动生成dump文件
②(手动生成)使用-XX:+HeapDumpOnCtrlBreak参数,在Windows下可以使用Ctrl+Break键让虚拟机生成dump文件,
Linux下通过kill -3命令发送进程退出信号“吓唬”一下虚拟机,也能拿到dump文件。
③使用jmap命令
jhat(虚拟机堆转储快照分析工具)
目前已经有更好的工具,比如MAT,jhat在JDK9中已正式被移除
jinfo(Java配置信息工具)
可以实时的查看当前 jvm 使用了哪些参数,并且也可以在不停机的情况下修改参数。
jstack(java堆栈跟踪工具)
替代品jcmd
官网:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html
jcmd是jdk7中引入的,可以代替jstack。
三、可视化分析工具
JConsole
Java Visual VM
Java Visual VM (JVisualVM) 自JDK6u23开始到JDK8为止为Oracle JDK的一部分, JDK9及之后作为独立项目。
四、其它工具
Btrace
官网:https://github.com/btraceio/btrace
Arthas
阿里重磅开源在线分析诊断工具,官网地址:https://alibaba.github.io/arthas/
MAT(Memory Analyzer Tool)
官网:https://www.eclipse.org/mat/downloads.php
主要用于诊断内存泄漏和高内存占用问题。
Jprofiler
官网:https://www.ej-technologies.com/products/jprofiler/overview.html
JProfiler是用于分析Java软件性能瓶颈并能准确定位到类或者方法有效解决性能问题的主流工具,它通常需要与性能测试工具(如LoadRunner)配合使用,因为往往只有当系统处于压力状态下才能反映出性能问题。Jprofiler是收费的。
四、常见问题排查思路
1.CPU彪高
思路:首先找到 CPU 飚高的那个 Java 进程,因为你的服务器会有多个 JVM 进程。然后找到那个进程中的 “问题线程”,最后根据线程堆栈信息找到问题代码。最后对代码进行排查。
具体步骤:
- 通过 top 命令找到 CPU 消耗最高的进程,并记住进程 ID。
- 再次通过 top -Hp [进程 ID] 找到 CPU 消耗最高的线程 ID,并记住线程 ID.
- 通过 JDK 提供的 jstack 工具 dump 线程堆栈信息到指定文件中。具体命令:jstack -l [进程 ID] >jstack.log。
- 由于刚刚的线程 ID 是十进制的,而堆栈信息中的线程 ID 是16进制的,因此我们需要将10进制的转换成16进制的,并用这个线程 ID 在堆栈中查找。使用 printf "%x\n" [十进制数字] ,可以将10进制转换成16进制。
- 通过刚刚转换的16进制数字从堆栈信息里找到对应的线程堆栈。就可以从该堆栈中看出端倪。

分析 dump 文件的可视化工具,MAT,Jprofile,jvisualvm 等,这些工具可以分析 jmap dump 下来的文件,看看哪个对象使用的内存较多,通常是能够查出问题的。
出现问题的常见场景:
①一般是某个业务死循环没有出口,这种情况可以根据业务进行修复。
②还有 C2 编译器执行编译时也会抢占 CPU,什么是 C2编译器呢?当 Java 某一段代码执行次数超过10000次(默认)后,就会将该段代码从解释执行改为编译执行,也就是编译成机器码以提高速度。而这个 C2编译器就是做这个的。如何解决呢?项目上线后,可以先通过压测工具进行预热,这样,等用户真正访问的时候,C2编译器就不会干扰应用程序了。如果是 GC 线程导致的,那么极有可能是 Full GC ,那么就要进行 GC 的优化。
2.内存问题排查
一种是内存泄露,一种是未泄露。
内存溢出的情况可以通过加上 -XX:+HeapDumpOnOutOfMemoryError 参数,该参数作用是在程序内存溢出时输出 dump 文件。有了 dump 文件,就可以通过 dump 分析工具进行分析了,比如常用的MAT,Jprofile,jvisualvm 等工具都可以分析,这些工具都能够看出到底是哪里溢出,哪里创建了大量的对象等等信息。
参考:Java虚拟机线上问题排查的2个基本操作,你知不知道?
总结:
GC
①gc的状况:jmap ,jcmd(oracle 官方推荐使用 jcmd 代替 jmap,因为 jcmd 确实能代替 jmap 很多功能。jmap 可以打印对象的分布信息,可以 dump 文件,注意,jmap 和 jcmd dump 文件的时候会触发 FGC ,使用的时候注意场景。)
②还有一个比较常用的工具是 jstat,该工具可以查看GC 的详细信息,比如eden ,from,to,old 等区域的内存使用情况。
③还有一个工具是 jinfo,该工具可以查看当前 jvm 使用了哪些参数,并且也可以在不停机的情况下修改参数。
分析 dump 文件的可视化工具
①MAT
②Jprofile
③jvisualvm
Linux排查问题工具汇总的更多相关文章
- (转)超全整理!Linux性能分析工具汇总合集
超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...
- Linux 性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
- [转]Linux性能分析工具汇总合集
出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...
- 超全整理!Linux性能分析工具汇总合集
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
- Linux下性能分析工具汇总
来自:http://os.51cto.com/art/201104/253114.htm 本文讲述的是:CPU性能分析工具.Memory性能分析工具.I/O性能分析工具.Network性能分析工具. ...
- Linux性能分析命令工具汇总
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
- [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...
- 腾讯优测干货精选| 安卓开发新技能Get -常用必备小工具汇总
文/腾讯公司 陈江峰 优测小优有话说: 移动研发及测试干货哪里找?腾讯优测-优社区你值得拥有~ 开发同学们都知道,安卓开发路上会碰到很多艰难险阻,一不小心就被KO.这时候,没有新技能傍身怎么行?今天我 ...
- C#(Net)软件开发常用工具汇总,提高你的开发效率
C#(Net)软件开发常用工具汇总,提高你的开发效率 写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用技术文章. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是 ...
随机推荐
- spring-boot集成2:集成lombok
Why lombok? lombok可以帮我们从实体类的getter.setter.constructor和toString等样板代码中解脱出来,使用lombok可以开发出更优雅的代码 1.maven ...
- Spring MVC模式下,获取WebApplicationContext的工具类 方法
在已有的注解类型下,获取WebApplicationContext的工具类 通过 WebApplicationContextUtils.getRequiredWebApplicationContex ...
- laravel 5.8 实现消息推送
以下教程是基于5.6 的,在使用5.8实现时遇到一些问题,做一下记录 在我看来,实时通信才是 APP 应用的将来. Socket 服务通常不是那么容易实现,但是 Laravel Echo 服务改变了这 ...
- LeetCode.1103-向人们分发糖果(Distribute Candies to People)
这是小川的第393次更新,第425篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第256题(顺位题号是1103).我们通过以下方式向一排n = num_people个人分 ...
- 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试
转载自:http://bbs.zol.com.cn/diybbs/d34441_76103.html 4K这个概念也在最近几年开始流行了起来,无论是4K显示器.4K电视盒子,还是4K游戏对硬件的要求也 ...
- 必备idea 插件plugins 提高编码效率
最近发现了几个非常好用 提高编码效率 的idea 插件 跟大家分享一下 因为idea自带的插件下载可能连接不上服务器而导致插件下载失败,所以这里推荐使用引入外部插件的方式 插件包也给你们准备好了( ...
- java_实现一个类只能声明一个对象
public class StaticDemo { public int a=10; private static StaticDemo s= new StaticDemo(); private St ...
- celery异步发送邮件
利用Django框架发送邮件的详细过程,在前两天的博客中有所记录,但是单纯的那样发邮件是有非常大的问题的,这就需要celery异步发送来解决 首先我们来看一下邮件发送的过程: Django网站先发送到 ...
- Manacher模版
现在讲的也是一种处理字符串的方法,叫做Manacher,有点像“马拉车” 1179: [视频][Manacher]最长回文子串 时间限制: 1 Sec 内存限制: 128 MB提交: 209 解决 ...
- git diff 命令介绍
https://www.jianshu.com/p/6e1f7198e76a https://www.jianshu.com/p/5b6a014ac3db https://blog.csdn.net/ ...