Linux排查问题命令

线上问题排查时需要从各个方面查看系统的情况,在此列举常用的排查命令,按类别区分如下

系统信息

内核版本信息

1
2
cat /proc/version
uname -a

系统版本信息

1
2
3
lsb_release -a
cat /etc/redhat-release
cat /etc/issue

硬盘信息

1
2
3
4
5
6
7
8
9
10
# 查看各分区使用情况
df -ah
# 查看指定目录的大小
du -sh <目录名>
# 查看挂接的分区状态
mount | column -t
# 查看目录所在的挂载分区
df <目录绝对路径>
fdisk -l # 查看所有分区
swapon -s # 查看所有交换分区

CPU信息

1
2
3
4
5
6
7
8
9
10
11
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

内存信息

1
2
free -h
cat /proc/meminfo

系统负载信息

1
2
3
4
uptime
cat /proc/loadavg
tload -d 1 (指定间隔1秒采集一次)
top -c

用户信息

1
2
3
4
5
6
7
8
9
10
cat /etc/password
# 文件目录权限
ls -al <文件或目录>
#修改文件或目录权限
#rwx-权限
chmod
#文件所属用户
chown
#文件所属用户组
chgrp

进程信息

1
2
3
ps -ef | grep <pid或者进程名关键字>
ps -ef | grep <pid或者进程名关键字>
top -c

问题排查

  1. 查看本机host配置
1
cat /etc/hosts
  1. 查看服务器主机是否网络可达
1
2
ping ip
pingonline网址,防止dns污染
  1. 追踪路由信息
1
2
traceroute
tracepath(不需要root)
  1. 查看域名解析
1
2
3
dig
nslookup
host
  1. telnet端口连通性
1
telnet 域名/IP port
  1. 查看当前运行程序
1
2
ps -ef | grep <pid或者进程名关键字>
ps -ef | grep <pid或者进程名关键字>
  1. 查看网络连接状态
1
2
3
4
5
6
7
8
netstat -ntlp
-a: 显示所有listening和非listening中的socket连接
-t: tcp
-n: 显示数字地址
-l: 监听中listening
-p: 显示进程名称和PID

netstat -anp | grep port/app #因为服务器可能是多网卡配置,绑定地址 127.0.0.1(本机地址) 和 0.0.0.0(无限制) 区别)
  1. 查看系统打开文件
1
lsof -i :port
  1. 查看防火墙配置
1
2
3
4
5
6
iptables
firewall
#selinux是否关闭
getenforce/sestatus -v:查看selinux状态
setenforce 0:临时关闭selinux
vi /etc/selinux/config: 永久关闭, 需要重启服务器
  1. 查看nginx配置和日志

  2. 查看web容器 - access log

  3. 查看应用日志

  4. 抓包工具:charles、wireshark

CPU满负载问题

  1. 找出消耗cpu最高的进程PID
    top -c (显示进程运行信息列表,默认CPU使用率排序)
  2. 根据PID查出消耗cpu最高的线程号
    top -Hp pid (显示一个进程的线程运行信息列表,默认CPU使用率排序)
    2.1 线程id十进制转16进制:
    printf “%x\n” xxoo
  3. 导出进程快照
    jstack -l pid > pid.stack
  4. 根据线程号查出对应的java线程,进行处理
    cat pid.stack | grep ‘十六进制线程号’ -C 10
  5. 如果是GC线程,再查看gc情况:jstat -gcutil pid 2000 10
  6. 如果是普通线程,可以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进程的堆栈信息

-------------本文结束感谢您的阅读-------------
Good for you!