3、基础检查清单:网络连通性、端口监听、进程存活、CPU/内存使用率

服务无响应了,别慌。

我个人的习惯是,先做一轮「基础四连」检查。说白了,就是看看网络通不通、端口开没开、进程在不在、资源够不够。这四个点,能筛掉至少 70% 的常见故障。

你想想看,很多时候问题其实没那么复杂。可能就是网络断了,或者进程挂了,结果我们绕了一大圈去查代码。嗯,先做基础检查,这是性价比最高的操作。

3.1 网络连通性:先确认「路」通不通

服务无响应,第一个要排除的就是网络问题。我遇到过好几次,大家围着服务器查了半天,最后发现是网线松了。尴尬不?

怎么查?

  • ping 命令:最直接。从客户端 ping 服务端 IP,看丢包率和延迟。
  • telnet 或 nc:ping 通不代表端口通。用 telnet IP 端口nc -vz IP 端口 测试。
  • traceroute:如果 ping 不通,用这个看路由在哪断了。

核心要点:

网络连通性检查,不只是看 ping。ping 通只说明 ICMP 协议通,不代表应用层端口通。我建议你养成习惯:先 ping,再 telnet。

# 检查网络连通性
ping -c 4 192.168.1.100

# 检查端口是否可达
telnet 192.168.1.100 8080
nc -vz 192.168.1.100 8080

# 路由追踪
traceroute 192.168.1.100

我的小技巧:

如果 ping 通但 telnet 不通,别急着怀疑防火墙。先看看服务端本机能不能连自己的端口。有时候是服务根本没监听。

3.2 端口监听:服务「开门」了没?

网络通了,接下来看端口。服务要对外提供服务,必须有一个端口在监听。如果端口没开,客户端当然连不上。

怎么查?

  • ss 命令:现代 Linux 推荐用 ss -tlnp。比 netstat 快,信息也更全。
  • netstat 命令:老牌工具,netstat -tlnp 也能看。
  • lsof 命令lsof -i :端口号,看哪个进程占用了端口。

注意:

我曾经遇到过一个情况,端口明明在监听,但客户端就是连不上。查了半天,发现服务只监听了 127.0.0.1,没监听 0.0.0.0。所以,看端口监听时,一定要看它绑定的 IP 地址。

# 查看所有监听中的 TCP 端口
ss -tlnp

# 查看特定端口(比如 8080)
ss -tlnp | grep 8080

# 用 netstat 查看
netstat -tlnp | grep 8080

# 用 lsof 查看端口占用
lsof -i :8080

重点关注:

LISTEN 状态。如果端口状态是 LISTEN,说明服务在正常监听。如果是 CLOSE_WAITTIME_WAIT,那是连接关闭的问题,不是端口监听的问题。

3.3 进程存活:服务「活着」吗?

端口在监听,不代表进程就健康。有时候进程卡死了,端口还在,但已经不处理请求了。所以,我们要确认进程确实在运行,而且状态正常。

怎么查?

  • ps 命令ps -ef | grep 进程名,看进程是否存在。
  • top 或 htop:看进程的实时状态,是不是在运行(R)、睡眠(S)、还是僵尸(Z)。
  • systemctl status:如果服务是用 systemd 管理的,直接 systemctl status 服务名

我的经验:

ps -ef 看到进程在,不代表它活着。我遇到过进程变成「僵尸」状态,PID 还在,但已经不干活了。这时候要看 top 里的状态列,如果是 Z,那就是僵尸进程,需要 kill 掉父进程才能清理。

# 查看进程是否存在
ps -ef | grep nginx

# 查看进程状态(R=运行,S=睡眠,Z=僵尸)
top -bn1 | grep nginx

# 用 systemd 查看服务状态
systemctl status nginx

避坑指南:

我曾经用 ps -ef | grep java 查到进程在,就以为服务正常。结果发现是旧版本的进程没杀掉,新版本根本没启动。所以,我建议你同时检查进程的启动时间和 PID,确认是你要的那个进程。

3.4 CPU/内存使用率:资源够不够?

网络通、端口开、进程在,但服务还是慢?那多半是资源不够了。CPU 跑满、内存耗尽,服务自然无响应。

怎么查?

  • top 命令:看整体 CPU 和内存使用率,以及每个进程的资源占用。
  • free 命令:专门看内存使用情况,free -h 以人类可读格式显示。
  • vmstat 命令:看系统整体的 CPU、内存、IO 状况。
  • uptime 命令:看系统负载(load average),快速判断系统是否过载。

核心指标:

指标 正常范围 告警阈值
CPU 使用率 < 70% > 90%
内存使用率 < 80% > 90%
系统负载 (load) < CPU 核心数 > CPU 核心数 * 1.5
Swap 使用率 0 > 0
# 查看 CPU 和内存使用率
top

# 查看内存使用情况
free -h

# 查看系统负载
uptime

# 查看 CPU 核心数
nproc

我的判断方法:

如果 CPU 使用率 100%,但 load average 不高,说明 CPU 在密集计算,可能只是某个任务占满了。如果 load average 很高(比如 4 核 CPU,load 到了 8),说明系统在排队,大量进程在等待 CPU,这时候服务肯定会变慢。

另外,内存不够时,系统会开始用 Swap。一旦 Swap 开始被使用,性能会急剧下降。我建议你监控 Swap 使用率,只要大于 0,就要警惕了。

避坑指南:

我曾经遇到一个情况,CPU 和内存看起来都正常,但服务就是慢。后来发现是磁盘 IO 满了。所以,资源检查不能只看 CPU 和内存,还要看磁盘 IO 和网络带宽。不过那是后面章节的内容了,这里先记住:CPU 和内存只是基础,不是全部。

好了,基础检查清单就这些。网络连通性、端口监听、进程存活、CPU/内存使用率,这四个点,你每次排查服务无响应问题时,都应该先过一遍。我敢说,大部分问题在这一步就能定位到原因。

下一章,我们会深入聊一聊日志分析。毕竟,基础检查只能告诉我们「出了什么问题」,而日志能告诉我们「为什么出问题」。