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开发,搞得懂移动端,电脑客户端更是 ...
随机推荐
- ubuntu安装成功之后需要做些什么?
1.安装VMtool 1.1打开虚拟机之后-> 安装VMtool 1.2 点击之后,桌面就会出现一个VMtool光驱文件,如果提示光驱被占用就先用root登录 1.3在命令行挂载 sudo mo ...
- 分布式架构-Redis 从入门到精通 完整案例 附源码
导读 篇幅较长,干货十足,阅读需要花点时间,全部手打出来的字,难免出现错别字,敬请谅解.珍惜原创,转载请注明出处,谢谢~! NoSql介绍与Redis介绍 什么是Redis? Redis是用C语言开发 ...
- 解决android studio的Gradle一直在sync的办法
出现问题的原因就是gradle下载太慢了. 打开gradle-wrapper.properties文件.查看gradle版本.如下: distributionUrl=https\://services ...
- DES、AES和RSA加密算法
DES加密算法简介 DES(Data Encryption Standard)是目前最为流行的加密算法之一(它是分组密码). 强加密使用的基本操作 -> 混淆与扩散 混淆:是一种使密钥与密文之间 ...
- 2019牛客暑期多校训练营(第一场)-B.Integration()
链接:https://ac.nowcoder.com/acm/contest/881/B 题意:给出n,和数组a[n],求特定表达式取模后的值. 思路:用到列项相消:
- Python input/output boilerplate for competitive programming
The following code is my submission for Codeforces 1244C The Football Season. import io import sys i ...
- 双指针(最大删除子串)Codeforces Round #579 (Div. 3)--Remove the Substring (hard version)
题目链接:https://codeforces.com/contest/1203/problem/D2 题意: 给你S串.T串,问你最长删除多长的子串使得S串里仍然有T的子序列. 思路: 想了好久,先 ...
- 使用GPU训练TensorFlow模型
查看GPU-ID CMD输入: nvidia-smi 观察到存在序号为0的GPU ID 观察到存在序号为0.1.2.3的GPU ID 在终端运行代码时指定GPU 如果电脑有多个GPU,Tensorfl ...
- vscode 插件 配置
第一页 第二页 第三页 settings.json配置 { "editor.fontSize": 20, "files.autoSave": "off ...
- js三级内联
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...