线上问题排查
1.磁盘空间不足问题
先从总体查看磁盘状态:df -h
找到不足的磁盘,进入目录查看具体文件大小:du -sh *(ls -lh只能看文件大小,文件夹的看不出来)
2.cpu和内存使用率过高问题
查看所有进程:top
查看单个进程:top -p pid
查看单个进程的线程:top -p pid -H
只看内存使用情况:free -h
只看交换区:swapon
3.网络延迟
查看所有连接中的 socket:netstat -a
查看所有 tcp 连接的信息,包括进程号: netstat -tnpa
得到进程号后就好说了配合 top 命令,ps -ef 命令,查看相关进程信息
实时流量数据:iftop -P
4.java进程问题
查看java进程号:jps
查看堆内存设置与当前使用情况:jmap -heap pid
统计当前堆内对象使用情况:jmap -histo:live pid
dump堆快照文件,后续用mat等工具分析:jmap -dump:format=b,file=heapdump.phrof pid
查看 jvm 线程运行信息(推荐一个分析stack文件的网站fastthread.io):jstack
直接用第三方工具也很方便,推荐阿里的arthas
5.一些无法本地debug的调式技巧
对于一些线上问题不方便本地调试,这里推荐一个阿里的工具:arthas
- watch 命令可以实时观察一个方法的入参和出参。
- trace 命令可以跟踪某个方法的耗时,而且可以深入这个方法所调用的方法的各个耗时。
- dashboard 全局监控
- thread 查看所有线程信息,包括状态和 CPU 使用率
- thread -b 甚至可以直接定位到死锁信息
- jad 命令进行反编译
甚至可以代码热替换,更多详细功能可以参考arthas官网的文档