ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux服务器日常巡检:5大核心维度与自动化脚本实践

Linux服务器日常巡检:5大核心维度与自动化脚本实践 在服务器运维的日常工作中你是否曾面对几十甚至上百台服务器感到无从下手是否担心某个深夜核心服务因磁盘写满或内存泄漏而悄然宕机服务器巡检正是将这种被动救火转变为主动预防的关键。然而面对繁杂的系统指标新手往往不知从何看起。本文将从一个资深运维的视角拆解服务器日常巡检必须优先关注的5个核心维度并提供可直接复用的命令脚本与排查清单帮助你快速建立系统化的巡检习惯无论是管理单台测试机还是大型集群都能做到心中有数。1. 巡检的核心目标与价值从“救火”到“防火”在深入具体命令之前我们必须明确日常巡检的目的。它绝非简单地运行几个命令然后截图存档而是一个系统性的健康检查与风险预警过程。核心价值体现在三个方面预防故障在问题影响业务之前发现隐患如磁盘空间不足、内存使用率持续增长、关键进程异常退出等。性能基线建立通过定期采集数据如CPU负载、内存使用、网络流量形成系统的“健康画像”。当指标偏离基线时能迅速识别异常。容量规划依据长期跟踪资源使用趋势为服务器扩容、架构优化提供数据支持避免因资源耗尽导致的业务中断。一次有效的巡检应该像医生的定期体检能快速评估系统核心器官CPU、内存、磁盘、网络、服务的运行状态。下面我们就从老师傅最常看的5项开始。2. 环境与工具准备工欲善其事必先利其器在进行巡检前确保你有一个合适的操作环境。本文所有命令和示例均基于主流的Linux发行版如CentOS 7/8, Ubuntu 20.04/22.04对于生产环境请务必在测试环境验证后再执行。基础环境要求操作系统主流Linux发行版本文以CentOS 7为例。权限需要具备root用户权限或可通过sudo执行特权命令。连接工具推荐使用SSH客户端如Xshell, SecureCRT, 或系统自带的ssh命令远程连接服务器。必备命令系统通常已内置top,df,free,netstat,ss,ps等如需更强大的监控可后续安装htop,iotop,nethogs等工具。安装常用增强工具可选但推荐# 对于CentOS/RHEL系统 sudo yum install -y epel-release sudo yum install -y htop iotop nethogs sysstat glances # 对于Ubuntu/Debian系统 sudo apt update sudo apt install -y htop iotop nethogs sysstat glances这些工具提供了更友好、更强大的实时监控界面是深度巡检的利器。3. 核心巡检项一系统负载与CPU使用率系统负载Load Average和CPU使用率是反映服务器处理能力的“晴雨表”。负载过高意味着系统繁忙任务需要排队直接影响响应速度。3.1 如何查看与解读使用top或uptime命令# 使用 uptime 快速查看负载 uptime # 输出示例 12:05:30 up 45 days, 2:15, 1 user, load average: 0.08, 0.03, 0.05load average后的三个数字分别代表过去1分钟、5分钟、15分钟的平均负载。关键解读对于单核CPU负载1.0表示满负荷对于N核CPU负载达到N则表示所有核心满负荷。如果15分钟负载持续高于CPU核心数就需要警惕。使用top命令查看更详细信息按1可以展开所有CPU核心的使用情况top -c在top界面关注%Cpu(s)行us用户空间、sy内核空间、id空闲的比例。ussy持续高于80%可能意味着计算资源紧张。PID和COMMAND找出消耗CPU最高的进程。3.2 进阶工具与排查htoptop的增强版支持颜色、鼠标操作和树状视图更直观。mpstat查看每个CPU核心的详细统计信息来自sysstat包。mpstat -P ALL 1 # 每1秒报告一次所有CPU的状态pidstat查看特定进程的CPU消耗。pidstat -u 1 5 # 每1秒采样一次共5次报告进程CPU使用常见问题与排查思路问题现象可能原因排查命令与思路负载高但CPU使用率低大量I/O等待如磁盘慢、网络阻塞top查看waI/O等待值使用iotop查看磁盘I/O。某个进程CPU占用异常高程序bug、死循环、被攻击top定位PIDps aux | grep PID查看详情strace -p PID跟踪系统调用。负载持续上升业务量增长、资源不足、有僵尸进程sar -q查看历史负载趋势ps aux | grep defunct查看僵尸进程。4. 核心巡检项二内存使用情况内存是程序运行的舞台内存不足会导致进程被强制终止OOM Killer引发服务宕机。4.1 如何查看与解读使用free命令free -h # 输出示例 # total used free shared buff/cache available # Mem: 7.6G 2.1G 1.2G 345M 4.3G 5.0G # Swap: 2.0G 0B 2.0G关键解读重点看available这个值表示系统可供新应用程序使用的内存量它比free更准确因为包含了可回收的缓存buff/cache。buff/cache这是系统为了提升性能而使用的缓存内存当应用程序需要时这部分内存可以被快速释放。所以即使它很大通常也不是问题。Swap使用如果Swap的used持续增长说明物理内存已不足系统开始使用硬盘作为虚拟内存这将导致性能严重下降。4.2 深入分析内存消耗者使用top或htop 在top中关注RES常驻内存和%MEM内存使用百分比两列找出消耗内存最多的进程。# 按内存使用率排序进程 top -c -o %MEM使用ps命令辅助分析# 查看内存占用最高的前10个进程 ps aux --sort-%mem | head -114.3 内存泄漏排查如果available内存随时间持续下降且重启服务后恢复则可能存在内存泄漏。使用vmstat观察内存趋势vmstat 2 10 # 每2秒采样一次共10次关注si每秒从swap读入内存和so每秒从内存写入swap列如果持续大于0说明在频繁使用交换分区。使用valgrind、jmap针对Java等专业工具对可疑进程进行堆内存分析。5. 核心巡检项三磁盘空间与I/O磁盘空间耗尽是导致服务写入失败的常见原因而磁盘I/O瓶颈则会拖慢整个系统。5.1 检查磁盘使用率使用df命令df -hT # 输出示例 # Filesystem Type Size Used Avail Use% Mounted on # /dev/vda1 ext4 50G 45G 2.9G 94% / # /dev/vdb1 xfs 100G 30G 71G 30% /data关键解读Use%使用率。通常报警阈值设置在80%-90%。超过90%必须立即处理因为许多系统操作如日志轮转需要预留空间。Avail可用空间。要结合业务日志增长速率来评估风险。重点关注/根分区、/var日志、/home等关键目录。5.2 定位大文件与目录如果某个分区使用率过高需要定位是哪些文件或目录占用了空间。# 查看当前目录下各子目录的大小 du -sh ./* | sort -rh | head -10 # 在整个根文件系统下查找大于100M的文件耗时谨慎使用 find / -type f -size 100M 2/dev/null | xargs ls -lh | head -205.3 监控磁盘I/O性能磁盘忙wa值高但空间充足可能是I/O性能瓶颈。iostat查看磁盘读写速率、IOPS、等待时间来自sysstat包。iostat -dx 1 5 # 每1秒显示一次扩展统计共5次关注%util设备利用率接近100%表示饱和、await平均I/O等待时间单位毫秒。iotop类似top实时显示每个进程的磁盘I/O情况。sudo iotop -o # 只显示正在产生I/O的进程磁盘空间不足应急处理流程快速清理删除/tmp/下的临时文件清理应用日志如*.log.1,*.gz。日志管理检查并配置日志轮转logrotate防止单一日志文件过大。扩容或迁移长期方案是扩容磁盘或迁移部分数据到其他存储。6. 核心巡检项四网络连接与流量网络是服务的生命线。需要检查端口监听、异常连接以及带宽使用情况。6.1 检查端口监听与服务状态使用ss或netstat命令ss更高效推荐# 查看所有TCP监听端口 ss -tlnp # 输出示例 # State Recv-Q Send-Q Local Address:Port Peer Address:Port # LISTEN 0 128 *:22 *:* users:((sshd,pid1234,fd3)) # LISTEN 0 100 127.0.0.1:25 *:* users:((master,pid5678,fd13)) # 查看所有UDP监听端口 ss -ulnp关键解读确认关键服务如SSH的22Web的80/443数据库的3306等是否在预期端口上正常监听。Local Address为0.0.0.0表示监听所有IP为127.0.0.1表示仅监听本地。6.2 检查网络连接状态查看已建立的连接和连接数有助于发现异常连接如DDoS攻击、程序异常重连。# 统计各种TCP状态的数量 ss -ant | awk NR1 {S[$1]} END {for(a in S) print a, S[a]} # 查看连接到本机80端口最多的前10个IP可用于分析异常访问 ss -ntp dst :80 | awk {print $5} | cut -d: -f1 | sort | uniq -c | sort -rn | head -106.3 监控网络流量使用sar、iftop或nethogs。sar查看历史网络流量统计。sar -n DEV 1 3 # 每1秒采样一次共3次查看网络设备流量关注rxkB/s接收、txkB/s发送。nethogs按进程实时显示网络带宽占用。sudo nethogs eth0 # 指定网卡eth0iftop类似top实时显示网络连接和带宽使用情况。7. 核心巡检项五系统日志与关键进程日志是排查问题的“黑匣子”而关键进程的状态直接决定了服务的可用性。7.1 检查系统日志使用journalctlSystemd系统或直接查看/var/log/下的日志文件。# 查看系统最近20条日志并按时间倒序 sudo journalctl -n 20 --no-pager # 查看包含“error”或“fail”关键词的日志最近1小时 sudo journalctl --since 1 hour ago | grep -i -E error|fail | head -20 # 查看特定的日志文件如安全日志、消息日志 sudo tail -50 /var/log/messages sudo tail -50 /var/log/secure # SSH登录日志重点关注OOM内存不足、segfault段错误、failed服务启动失败、error等关键词。7.2 检查关键进程状态确认Nginx、MySQL、Redis、Java应用等关键业务进程是否在运行以及其资源占用是否正常。# 检查进程是否存在 ps aux | grep -E (nginx|mysql|java) | grep -v grep # 使用 systemctl 检查服务状态Systemd系统 systemctl status nginx systemctl status mysqld # 检查进程打开的文件数是否过多可能导致“Too many open files”错误 # 先找到进程PID pidof nginx # 假设PID是 1234 ls -l /proc/1234/fd | wc -l7.3 检查定时任务与开机自启异常的计划任务可能占用资源或带来安全风险。# 查看当前用户的crontab crontab -l # 查看系统级别的crontab cat /etc/crontab ls /etc/cron.*/ # 查看系统服务启动项Systemd systemctl list-unit-files --typeservice | grep enabled8. 自动化巡检脚本与最佳实践手动执行上述命令效率低下容易遗漏。将巡检自动化是运维成熟的标志。8.1 编写一个简单的Shell巡检脚本创建一个脚本server_check.sh定期执行并输出报告。#!/bin/bash # 文件名server_check.sh # 描述基础服务器巡检脚本 CHECK_TIME$(date %Y-%m-%d %H:%M:%S) HOSTNAME$(hostname) REPORT_FILE/tmp/server_inspection_$(date %Y%m%d).log echo 服务器巡检报告 [$HOSTNAME] $CHECK_TIME $REPORT_FILE echo $REPORT_FILE echo 1. 系统负载与运行时间 $REPORT_FILE uptime $REPORT_FILE echo $REPORT_FILE echo 2. 内存使用情况 $REPORT_FILE free -h $REPORT_FILE echo $REPORT_FILE echo 3. 磁盘使用情况 $REPORT_FILE df -hT | grep -v tmpfs $REPORT_FILE echo $REPORT_FILE echo 4. CPU占用最高的5个进程 $REPORT_FILE ps aux --sort-%cpu | head -6 $REPORT_FILE echo $REPORT_FILE echo 5. 内存占用最高的5个进程 $REPORT_FILE ps aux --sort-%mem | head -6 $REPORT_FILE echo $REPORT_FILE echo 6. 关键服务状态 $REPORT_FILE for service in nginx mysqld redis; do if systemctl is-active --quiet $service; then echo [OK] $service is running. $REPORT_FILE else echo [FAIL] $service is NOT running! $REPORT_FILE fi done echo $REPORT_FILE echo 7. 最近10条关键错误日志 $REPORT_FILE sudo journalctl -p 3 -xb --no-pager | head -10 $REPORT_FILE 2/dev/null || echo 需要sudo权限查看日志 $REPORT_FILE echo 巡检报告已生成: $REPORT_FILE cat $REPORT_FILE给脚本添加执行权限chmod x server_check.sh。你可以通过crontab设置每天定时运行并将报告发送到邮箱或监控平台。8.2 巡检最佳实践与工程建议制度化与定时化将巡检固化为每日/每周的固定工作并利用cron或CI/CD工具如Jenkins实现自动化。建立基线与阈值记录系统在正常业务时段的各项指标如CPU平均负载、内存可用量设定合理的报警阈值如磁盘使用率85%内存可用10%。工具化与平台化对于服务器集群放弃手工巡检采用成熟的监控系统如Zabbix、PrometheusGrafana、Nagios。它们能实现自动采集、可视化、报警和趋势分析。巡检报告有价值巡检输出不应是冰冷的数字而应附带简要分析和建议。例如“/data分区使用率已达92%主要为业务日志增长所致建议本周内清理历史日志或扩容。”安全与权限最小化巡检脚本应使用具有必要权限的专用账号执行避免直接使用root。敏感信息如脚本中的密码要妥善管理。关注变化比绝对值更重要的是变化趋势。突然的流量飙升、连接数暴涨、日志错误率增加往往是故障的先兆。9. 常见问题排查清单Cheat Sheet当收到监控报警或发现异常时可以按以下顺序快速排查报警/异常现象优先检查项常用命令服务器响应慢1. 系统负载2. CPU使用率3. 内存可用量4. 磁盘I/O等待5. 网络流量uptime,top,free -h,iostat -dx 1,sar -n DEV 1服务无法连接1. 服务进程是否存在2. 监听端口是否正确3. 防火墙规则4. 网络连通性systemctl status X,ss -tlnp | grep :端口,firewall-cmd --list-all,ping/telnet磁盘空间不足1. 确认已满的分区2. 查找大文件/目录3. 检查日志文件df -h,du -sh /* | sort -rh,ls -lhS /var/log/内存不足/OOM1. 内存和Swap使用情况2. 消耗内存的进程3. 系统日志free -h,top -o %MEM,journalctl -xb | grep -i oom大量未知网络连接1. 异常ESTABLISHED连接2. 检查监听的非业务端口3. 查看进程网络连接ss -antp,netstat -tunlp,lsof -i :端口号掌握这五项核心巡检内容并辅以自动化脚本和监控平台你就能对服务器的健康状况了如指掌。运维工作的最高境界不是解决问题有多快而是让问题根本没有机会发生。从今天起建立你的巡检清单让每一次登录服务器都目标明确让每一次故障预警都有的放矢。
返回列表