Java 问题排查工具

程序出问题了,我们需要知道问题出在哪里,才可能修复问题

快速定位问题是一门学问

Linux命令类

less

操作和 vim 部分类似,性能好,打开几十 M 的文件也不会卡

比 tail 好用太多

/ 向下查找 n下一个 N上一个
?向上查找 n上一个 N下一个
f 向下翻页
b 向上翻页

基本够用了

grep

grep forest f.txt     #文件查找
grep forest f.txt cpf.txt #多文件查找
grep 'log' /home/admin -r -n #目录下查找所有符合关键字的文件
cat f.txt | grep -i shopbase    
grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件后缀
grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配
seq 10 | grep 5 -A 3    #上匹配
seq 10 | grep 5 -B 3    #下匹配
seq 10 | grep 5 -C 3    #上下匹配,平时用这个就妥了
cat f.txt | grep -c 'SHOPBASE'

find

find /home/admin /tmp /usr -name \*.log  #多个目录去找
find . -iname \*.txt  #大小写都匹配
find . -type d        #当前目录下的所有子目录
find /usr -type l     #当前目录下所有的符号链接
find /usr -type l -name "z*" -ls  #符号链接的详细信息 eg:inode,目录
find /home/admin -size +250M      #超过250M的文件,当然+改成-就是小于了
find /home/admin -type f -perm 777 -exec ls -l {} \;  #按照权限查询文件
find /home/admin -atime -1   #1天内访问过的文件
find /home/admin -ctime -1   #1天内状态改变过的文件    
find /home/admin -mtime -1   #1天内修改过的文件
find /home/admin -amin -1    #1分钟内访问过的文件
find /home/admin -cmin -1    #1分钟内状态改变过的文件    
find /home/admin -mmin -1    #1分钟内修改过的文件

top、free、df、du

top 查看进程相关信息和基本负载情况

free 查看内存信息

df 查看磁盘信息

top、free、df linux三板斧

磁盘满了可以使用 du 来定位哪些文件夹过大,使用 find 可以查找大文件

神兵利器

Greys、arthas

Greys是杜琨的大作吧。说几个挺棒的功能(部分功能和btrace重合):

sc -df xxx: 输出当前类的详情,包括源码位置和classloader结构

另外相关联的是 arthas,他是基于Greys的,感兴趣的再移步

Java 自带命令

jps

我只用一条命令:

jps -mlvV

jstack

普通用法:

jstack 2815

jinfo

可看系统启动的参数,如下

jinfo -flags 2815

jmap

两个用途

  1. 查看堆的情况
jmap -heap 2815
  1. dump
jmap -dump:live,format=b,file=/tmp/heap2.bin 2815

或者

jmap -dump:format=b,file=/tmp/heap3.bin 2815

jstat

jstat参数众多,但是使用一个就够了

jstat -gcutil 2815 1000