Linux 服务器性能排查:15 个必会命令与实战套路

一、整体概览

Bash
# 系统负载(1/5/15 分钟)
uptime
# 16:30:01 up 30 days,  2:15,  1 user,  load average: 4.20, 3.80, 3.10

# 实时进程
top -c
htop   # 更友好

# 综合性能(需安装 sysstat)
vmstat 1 5

二、CPU 排查

Bash
# 查看每个 CPU 核心使用率
mpstat -P ALL 1

# 查看进程 CPU 占用
pidstat -u 1 5

# 找出最耗 CPU 的线程
top -Hp <pid>
printf "%x\n" <tid>   # 转成 16 进制
jstack <pid> | grep -A 20 <nid>   # Java 应用

关键指标:

  • us 高:用户态代码问题(算法、死循环)
  • sy 高:内核态(频繁系统调用、上下文切换)
  • wa 高:等待 IO(磁盘瓶颈)
  • cs 高:上下文切换频繁

三、内存排查


Bash
free -h
#              total   used   free   shared  buff/cache  available
# Mem:          7.7G    3.2G   1.1G    200M        3.4G        4.0G

# 查看进程内存
ps aux --sort=-%mem | head -10

# 查看内存泄漏
pmap -x <pid> | tail -1

四、磁盘 IO

Bash
# 磁盘使用率
df -h

# 各分区 IO 情况
iostat -x 1

# 找出占用大的目录
du -sh /var/* | sort -hr | head

# 找出被删除但仍占用空间的文件
lsof | grep deleted

iostat 关键列:%util(设备繁忙度,>80% 说明饱和)、await(IO 等待时间)

五、网络排查

Bash
# 连接统计
ss -antp | awk '{print $1}' | sort | uniq -c

# 查看端口占用
ss -lntp | grep 8080

# 实时流量
iftop
nethogs

# 抓包
tcpdump -i eth0 port 80 -w /tmp/http.pcap

六、实战案例:CPU 突然飙到 800%

现象:监控告警,某 Java 服务 CPU 800%,接口大量超时。

排查过程:

Bash
# 1. 找到进程
top -c  # PID 23451,CPU 800%

# 2. 找线程
top -Hp 23451  # 线程 23480 占用 780%
printf "%x\n" 23480  # 5bb8

# 3. 导出堆栈
jstack 23451 > /tmp/stack.txt
grep -A 30 "nid=0x5bb8" /tmp/stack.txt

根因:正则表达式灾难性回溯(ReDoS),某条用户输入的字符串导致 Pattern 匹配进入指数级回溯。

修复:

Java
// 问题代码
Pattern.compile("^(a+)+$");

// 修复:加超时或使用非回溯写法
Pattern.compile("^a+$");

七、常用一行命令

Bash
# 统计访问最多的 IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

# 统计耗时最长的接口
awk '{print $7, $NF}' access.log | sort -k2 -nr | head

# 监控某进程网络流量
watch -n 1 'cat /proc/<pid>/net/dev'
打赏作者 已有 0 人打赏,共 ¥0.00
我的打赏
运维老王
运维老王
Lv7 普通VIP 原创 3 粉丝 2730

K8s / Docker / CICD 一线运维,踩坑专业户

  • 3文章
  • 13.2万总阅读
  • 4649获赞
  • 2730粉丝

评论(0)

💬

还没有评论,来说两句吧