服务器运行状态从来不是单一指标,而是硬件、系统、应用、业务四个层面状态的集合体。判断服务器是否健康,需要同时观察硬件健康度、操作系统资源占用、核心进程存活情况以及业务接口响应速度,任何单一指标正常都不能代表服务器整体运行状态良好。
服务器运行状态怎么查看?先分清四个层面
很多人一上来就敲 top 命令看CPU,这没错,但只看到了冰山一角,服务器运行状态是个立体概念,业内专家指出,日常运维至少要关注四个层面:硬件层、系统层、应用层、业务层。
硬件层状态:电源、硬盘、内存条、风扇
硬件状态是服务器运行的最底层支撑,服务器电源是否冗余、硬盘是否有坏道、内存条是否报错、风扇转速是否异常,这些硬件问题往往先于系统故障出现。
- 电源状态:查看电源指示灯是否正常,双电源服务器是否两个电源都在工作,如果其中一个电源故障,服务器会发出蜂鸣报警。
- 硬盘状态:使用
smartctl -a /dev/sda命令查看硬盘SMART信息,重点关注Reallocated_Sector_Ct(重映射扇区计数)和Pending_Sector(待映射扇区),这两个数值一旦大于0,硬盘就在退化的边缘。 - 内存状态:通过
dmidecode -t memory查看内存条状态,如果系统日志中出现ECC纠错记录,说明内存颗粒已经不稳定。 - 风扇转速:在IPMI或带外管理界面里查看风扇转速值,转速为0或者明显低于同型号其他风扇,意味着散热模块失效。
系统层状态:负载、内存、磁盘、网络
系统层状态是运维人员最常打交道的部分,也是”服务器运行状态有哪些”这个问题最常见的答案范围。
系统负载(Load Average):uptime 命令输出的三个数值分别代表1分钟、5分钟、15分钟平均负载,行业共识认为,负载值长期超过CPU核心数的70%,系统就处于高负荷状态,比如8核CPU的服务器,负载持续超过5.6就该警惕。
内存使用:free -h 查看内存总量和剩余量,真正要关注的是Swap的使用情况,如果Swap used持续增长,说明物理内存已经不足,进程在频繁换页,性能会急剧下降。
磁盘空间和IO:df -h 查看分区容量,iostat -x 1 查看磁盘IOPS和等待时间,磁盘使用率到80%左右就该规划扩容,%util 接近100%说明磁盘IO已经饱和。
网络连接状态:ss -s 查看网络连接统计,netstat -i 查看网卡丢包率,连接数异常增长可能意味着遭受攻击或程序出现连接泄漏。
应用层状态:进程和端口
系统层健康不等于应用层正常,进程跑着但端口不监听,或者端口监听但进程无响应,这类状态问题需要单独检查。
进程状态:
ps aux 查看进程列表,关注进程CPU占用率、内存占用率,以及进程状态是否为 D(不可中断睡眠)或 Z(僵尸进程),出现大量D状态进程说明IO子系统出问题,Z状态进程则说明父进程没有正确处理子进程退出。
端口监听:ss -tlnp 查看TCP监听端口,确认Web服务(80/443)、数据库(3306/5432)、缓存(6379)等关键端口都在监听状态。
日志状态:journalctl -u nginx --since "10 minutes ago" 查看服务日志中的错误级别信息,应用层状态异常往往先在日志中体现。
业务层状态:响应时间和成功率
业务层状态是最终用户能感知的状态,服务器运行状态查询方法再专业,最后还是要回归到业务是否可用。
接口响应时间:通过拨测工具或APM(应用性能监控)系统,统计核心接口的平均响应时间、P95响应时间,P95超过阈值(比如1秒),说明部分用户已经感知到卡顿。
业务成功率:监控订单、登录、支付等核心业务的成功率,成功率低于99.9%就该排查上游依赖或代码逻辑。
业务量趋势:对比当前请求量和同时段历史数据,如果请求量正常但成功率下降,是应用层或系统层问题;如果请求量本身暴跌,可能是入口流量或DNS解析出问题。
服务器运行异常怎么排查?按场景对号入座
服务器运行状态异常的表现形式多种多样,但基本都能归入几个高频场景,掌握这些场景的排查路径,比死记硬背命令更有价值。
服务器卡顿,操作延迟明显
先用 top 看CPU使用率和负载,按 P 键按CPU排序,找出占用最高的进程,如果CPU占用率不高但负载很高,用 vmstat 1 看 r(运行队列)和 b(阻塞进程)列,r值长期大于CPU核心数说明CPU资源不足,b值高说明IO等待严重。
实操排查路径:
- 用
top -H -p 进程号查看进程内线程占用CPU情况 - 用
strace -p 进程号跟踪进程系统调用,看卡在哪个环节 - 用
dmesg -T | tail -20查看内核日志,排除OOM Killer或硬件错误
磁盘空间告警,但不知道哪里被占满
用 `du -sh / 2>/dev/null | sort -rh | head -10` 逐级定位大目录,从根目录开始往下找,常见的大空间占用者包括:日志文件(/var/log)、临时文件(/tmp)、数据库数据文件(/var/lib/mysql)、Docker容器数据(/var/lib/docker)。
清理建议:
- 日志文件用
logrotate做轮转,按天或按大小切割 - 数据库binlog日志定期清理,保留最近N天
- 临时文件超过7天的直接删除
数据库连接数爆满,应用频繁报错
先用 show processlist; 查看当前数据库连接状态,找出大量处于
Sleep 状态的连接,这类连接通常是应用层没有正确释放连接池,或者连接池配置过大。
排查步骤:
- 检查应用连接池配置,确认最大连接数设置是否合理
- 用
show status like 'Threads_connected';和show status like 'Max_used_connections';对比当前和历史最大连接数 - 在MySQL配置文件
my.cnf中调大max_connections,同时优化应用层连接池回收策略
网络丢包,业务时断时续
用 ping -i 0.2 目标IP 连续测试丢包率,丢包率超过1%就需要排查,用 mtr 目标IP 查看具体在哪个路由节点丢包,如果丢包集中在某个运营商节点,是链路问题;如果丢包集中在服务器入口,则可能是防火墙或带宽瓶颈。
服务器状态监控工具怎么选?按规模对号入座
手动查看服务器运行状态是排查问题用的,日常监控得靠工具,选工具不追求最贵,追求最匹配自己团队的运维能力和服务器规模。
| 工具 | 适合规模 | 优势 | 劣势 |
|---|---|---|---|
| 宝塔面板 | 单台或几台 | 界面直观,中文友好 | 功能相对基础 |
| Zabbix | 数十台 | 监控项丰富,可定制 | 部署较重,学习曲线陡 |
| Prometheus + Grafana | 中大规模 | 云原生友好,数据模型强 | 需要熟悉PromQL |
| 云厂商自带监控 | 云上服务器 | 零部署,开箱即用 | 跨云管理不便 |
轻量方案:宝塔面板或云厂商监控
如果服务器数量在5台以内,宝塔面板的监控功能足够用,能看CPU、内存、磁盘、带宽的实时曲线,还带报警功能,云上服务器直接用云厂商的云监控,比如简米云监控、酷番云监控,免费额度内够用。
进阶方案:Prometheus + Grafana
如果是Kubernetes集群或者服务器规模超过50台,Prometheus是事实标准,部署方式:Prometheus负责采集指标,Grafana负责可视化展示,Alertmanager负责报警通知,采集器用node_exporter,一条命令就能部署在Linux服务器上。
部署命令参考:
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz tar xvf node_exporter-1.7.0.linux-amd64.tar.gz cd node_exporter-1.7.0.linux-amd64 nohup ./node_exporter --web.listen-address=":9100" &
然后在Prometheus配置文件里加入该服务器的job,Grafana导入Node Exporter Full模板ID(1860),即可看到完整的服务器运行状态仪表盘。
服务器负载过高是什么原因?常见根因分析
负载过高是服务器运行状态异常中最常见的问题,但”负载高”本身不是原因,是结果,常见根因有五个方向,逐一排查才能定位。
CPU密集型任务
代码死循环、算法复杂度高、定时任务并发执行,都会导致CPU长时间满负荷,用 top -H 找到具体线程,再用 jstack(Java应用)或 gdb(C/C++应用)查看线程栈,定位到具体代码行。
内存泄漏导致Swap频繁
应用不断申请内存但不释放,物理内存耗尽后系统开始用Swap,磁盘IO暴增,系统负载飙升。排查方法:vmstat 1 观察 si 和 so 列,如果持续大于0,说明内存泄漏严重,Java应用用 jmap -heap 进程号 查看堆内存使用,持续观察Old区是否只增不减。
磁盘IO瓶颈
数据库大量全表扫描、日志写入量过大、磁盘本身老化导致IO性能下降。iostat -x 1 查看 %util 和 await,%util 接近100%且 await 超过几十毫秒,磁盘IO就是瓶颈。
慢查询拖垮数据库
一条慢SQL可能导致数据库连接池被占满,进而拖垮整个应用。开启MySQL慢查询日志:
SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1;
然后分析慢查询日志,用 EXPLAIN 查看执行计划,确认是否走了索引,是否扫描行数过大。
死锁和锁等待
多个事务互相持有锁,或长时间持锁不释放,阻塞其他事务执行。查看锁状态:
SELECT FROM information_schema.innodb_lock_waits;
找到阻塞源头的进程ID,用 KILL 进程ID 终止阻塞事务,然后优化事务逻辑,缩短锁持有时间。
服务器运行状态常见问题解答
怎么判断服务器是否被入侵?
先看登录日志,last 命令查看最近登录记录,lastb 查看失败登录记录,再看系统用户,cat /etc/passwd 检查是否有新增的uid为0的用户,查看计划任务,crontab -l 和 /etc/cron.d/ 目录下是否有异常任务,最后检查网络连接,lsof -i 查看是否有对外异常连接。
服务器重启后业务状态怎么恢复?
重启后先确认基础服务启动情况,systemctl list-units --failed 查看启动失败的服务单元,然后按依赖顺序启动服务,先数据库,再缓存,再应用服务,启动完成后用 curl -I 域名 测试HTTP状态码,用 ss -tlnp 确认端口监听正常,用 tail -f 应用日志 观察启动过程是否有报错。
服务器运行状态监控数据要保留多久?
监控数据保留时长取决于存储成本和业务需求,基础指标(CPU、内存、磁盘)保留30天足够定位绝大多数问题,核心业务指标建议保留90天用于趋势分析,故障现场抓取的瞬时数据可按需保留更长时间,Prometheus默认本地存储15天,可以配置远端存储如Thanos或VictoriaMetrics做长期归档。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/694074.html





