Linux服务器性能指标过载排查思路

当 Linux 服务器 的 CPU、内存 或 网络 出现过载时,通常意味着系统正在面临资源瓶颈或异常行为。为了排查这个问题,需要通过一系列的系统工具和方法来诊断和识别瓶颈的根本原因。以下是一些常见的排查步骤:

  1. 检查 CPU 使用情况

查看整体 CPU 使用情况:
• 使用 top 或 htop 命令查看当前系统的 CPU 使用率。

1
top

htop 提供了更加友好的界面,可以使用它来动态地查看 CPU 负载。
• %us:用户空间的 CPU 使用比例
• %sy:内核空间的 CPU 使用比例
• %id:空闲 CPU 时间
• %wa:等待 I/O 的 CPU 时间
• %st:虚拟机偷取的 CPU 时间

查看每个进程的 CPU 使用情况:
• 使用 top 或 ps 命令查看当前占用 CPU 的进程。

1
top -o %CPU

或者使用 ps 列出占用 CPU 的进程:

1
ps aux --sort=-%cpu | head -n 10

检查是否有进程陷入 无响应状态:
• 如果进程处于 D(uninterruptible sleep) 状态,表示它在等待 I/O 操作完成,可能导致 CPU 被阻塞。

1
ps aux | grep ' D '

检查系统负载(load average):
• 使用 uptime 或 top 命令查看系统负载:

1
uptime

负载均衡值(load average)显示的是在过去 1 分钟、5 分钟和 15 分钟内的平均进程数。高负载可能意味着系统 CPU 资源紧张。

  1. 检查内存使用情况

使用 free 命令查看内存使用:
• free -m 可以查看系统内存的使用情况(单位是 MB)。

1
free -m
•	Mem:总内存、已用内存、剩余内存。
•	Swap:交换分区的使用情况。高 swap 使用可能意味着物理内存不足,导致系统频繁交换数据到磁盘。

检查进程的内存占用情况:
• 使用 top 或 ps 命令查看占用内存最多的进程。

1
top -o %MEM

或者使用 ps 查看内存使用最多的进程:

1
ps aux --sort=-%mem | head -n 10

检查是否有 内存泄漏:
• 如果系统的可用内存持续下降,可以使用 smem(或者 pmap)查看各个进程的内存使用情况,排查是否有内存泄漏。

1
smem -r

使用 vmstat 查看虚拟内存情况:
• vmstat 提供了系统的内存、交换区、I/O、进程、CPU 等信息。

1
vmstat 1
•	si 和 so 分别表示交换内存的输入和输出。高交换活动通常意味着物理内存不足。

检查内存是否有 OOM(Out of Memory) 错误:
• 如果系统没有足够的内存,它可能会启动 OOM Killer 来终止一些进程以释放内存。可以通过查看 /var/log/messages 或 /var/log/syslog 日志文件来确认是否发生了 OOM 错误。

1
cat /var/log/syslog | grep -i "out of memory"
  1. 检查网络使用情况

使用 netstat 或 ss 查看网络连接:
• netstat 或 ss 可以查看当前的网络连接及其状态。

1
netstat -tulnp

或者:

1
ss -tuln
•	通过 -t 查看 TCP 连接,-u 查看 UDP 连接,-l 查看正在监听的端口,-n 显示数字格式。

检查网络带宽使用情况:
• 使用 iftop 或 nload 监控网络流量。

1
iftop

或者:

1
nload

这些工具可以帮助你实时查看每个连接的流量情况,找出是否存在异常的流量高峰。

检查 TCP 状态:
• 使用 ss 查看 TCP 连接的状态,查找是否存在大量的 TIME_WAIT 或 CLOSE_WAIT 状态的连接,可能意味着有大量的关闭连接或连接未正常关闭。

1
ss -s

你可以检查 TIME_WAIT 和 CLOSE_WAIT 状态,如果这些连接积压过多,可能导致网络性能下降。

网络丢包或延迟:
• 使用 ping 测试到其他主机的连通性,检查是否有丢包现象:

1
ping -c 10 <destination_ip>

你可以查看是否存在高延迟或丢包,丢包可能指示网络硬件或带宽问题。

  1. 检查磁盘 I/O 使用情况

使用 iostat 查看磁盘 I/O 情况:
• 使用 iostat 检查磁盘的读取/写入情况。

1
iostat -x 1
•	%util:磁盘利用率,如果值接近 100%,表示磁盘繁忙。
•	await:磁盘操作的平均等待时间,较高的 await 值可能表示磁盘性能瓶颈。

使用 dstat 或 iotop 监控磁盘 I/O:
• dstat 或 iotop 可以显示实时的磁盘 I/O 使用情况,帮助你定位是否有某些进程正在占用大量磁盘 I/O。

1
dstat -cdlmn

或者使用 iotop:

1
sudo iotop
  1. 分析日志文件
    • 查看 /var/log/syslog、/var/log/messages、/var/log/dmesg 等系统日志,可能会有有关硬件故障、磁盘问题或其他异常行为的警告或错误信息。

    1
    2
    cat /var/log/syslog | grep -i "error"
    cat /var/log/messages | grep -i "error"
  2. 其他工具
    • sar(System Activity Reporter):可以查看过去的系统性能数据,帮助你发现历史上的问题。

    1
    2
    sar -u 1 3  # 查看 CPU 使用情况
    sar -r 1 3 # 查看内存使用情况

    • dmesg:检查内核日志,查看是否有硬件故障或内存错误。

1
dmesg | grep -i error

总结

当 Linux 服务器出现 CPU、内存或网络过载时,需要结合多种工具来诊断问题。通过 top/htop 查看 CPU 和进程状态,使用 free/iostat 监控内存和磁盘使用情况,利用 iftop/ss 排查网络瓶颈,以及通过日志文件了解系统错误和警告。系统性能问题往往是多因素的,定位问题时需要逐步排查。