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开发,搞得懂移动端,电脑客户端更是 ...
随机推荐
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
- C#编程 XML文档
XML 指可扩展标记语言,XML 被设计用来传输和存储数据.XML 被设计用来结构化.存储以及传输信息. xml文档展示 <?xml version="1.0" encodi ...
- Linux 使用中history 默认记录数不够用了?
1.默认情况下,系统能保存1000条的历史命令. #echo $HISTSIZE 2.那么1000条不够用,该怎么办呢? #vi /etc/profile 修改HISTSIZE=1000 > ...
- nginx reload的原理
nginx启动时,会启动两个进程: 一个是Master进程和worker进程.改变配置后nginx做的事1)改变了nginx配置之后,HUP signal的信号需要发送给主进程.2)主进程首先会检测新 ...
- 记一次 Vultr配置
这里不想排版,因为心情复杂. 第一次搞这个VPS,真的是很气人,由于中英文的关系我一开始就误操作了,让VPS一直挂载着Ubuntu18.10,所以系统一直是在光盘的引导界面,这个问题知道我注册后的四个 ...
- java去除数组中的空值
public String[] deleteArrayNull(String []string) { String []array = string; // 声明一个list List<Stri ...
- 【Linux开发】linux设备驱动归纳总结(六):3.中断的上半部和下半部——工作队列
linux设备驱动归纳总结(六):3.中断的上半部和下半部--工作队列 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- 语言模型评价指标Perplexity
在信息论中,perplexity(困惑度)用来度量一个概率分布或概率模型预测样本的好坏程度.它也可以用来比较两个概率分布或概率模型.(应该是比较两者在预测样本上的优劣)低困惑度的概率分布模型或概率模型 ...
- Hadoop系列读书笔记
<Hadoop应用架构>是Orilley旗下精品系列的图书 Hadoop序列化 Thrift 不支持内部压缩 不能分片 缺少MapReduce的原生支持 Protocol Buffers ...
- orzdba工具配置
./orzdba -lazy -rt -S /u01/svr/working/my3306/run/mysql.sock mysql -s --skip-column-names -h127.0.0. ...