线上问题排查时需要从各个方面查看系统的情况,在此列举常用的排查命令,按类别区分如下
系统信息
内核版本信息
1 | cat /proc/version |
系统版本信息
1 | lsb_release -a |
硬盘信息
1 | # 查看各分区使用情况 |
CPU信息
1 | # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 |
内存信息
1 | free -h |
系统负载信息
1 | uptime |
用户信息
1 | cat /etc/password |
进程信息
1 | ps -ef | grep <pid或者进程名关键字> |
问题排查
- 查看本机host配置
1 | cat /etc/hosts |
- 查看服务器主机是否网络可达
1 | ping ip |
- 追踪路由信息
1 | traceroute |
- 查看域名解析
1 | dig |
- telnet端口连通性
1 | telnet 域名/IP port |
- 查看当前运行程序
1 | ps -ef | grep <pid或者进程名关键字> |
- 查看网络连接状态
1 | netstat -ntlp |
- 查看系统打开文件
1 | lsof -i :port |
- 查看防火墙配置
1 | iptables |
-
查看nginx配置和日志
-
查看web容器 - access log
-
查看应用日志
-
抓包工具:charles、wireshark
CPU满负载问题
- 找出消耗cpu最高的进程PID
top -c (显示进程运行信息列表,默认CPU使用率排序) - 根据PID查出消耗cpu最高的线程号
top -Hp pid (显示一个进程的线程运行信息列表,默认CPU使用率排序)
2.1 线程id十进制转16进制:
printf “%x\n” xxoo - 导出进程快照
jstack -l pid > pid.stack - 根据线程号查出对应的java线程,进行处理
cat pid.stack | grep ‘十六进制线程号’ -C 10 - 如果是GC线程,再查看gc情况:jstat -gcutil pid 2000 10
- 如果是普通线程,可以dump出内存:jmap -dump:format=b,file=pid.dump.bin pid,然后再用工具visualvm分析;或者线上不方便可以使用:jmap -histo pid 直接打印内存占用情况
jps -l 输出java进程pid-进程名信息
top -Hp pid 输出指定java进程线程消耗cpu排行
jstack -l pid 导出java进程的堆栈信息