全面检测Linux系统健康情况
测试Linux系统健康是一个系统性的工作,需要从硬件、系统资源、性能和服务等多个维度进行检查。下面提供一个从快速一键脚本到深度手动检查的完整指南。
一、 快速健康检查脚本
你可以将以下命令保存为一个脚本(如 health_check.sh
),并定期运行。
#!/bin/bashecho "========== Linux System Health Check =========="
echo "Run Time: $(date)"
echo "==============================================="# 1. 系统基本信息
echo -e "\n1. System Overview"
echo "Hostname: $(hostname)"
echo "Uptime: $(uptime)"
echo "Kernel: $(uname -r)"
echo "OS: $(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '\"')"# 2. CPU 健康
echo -e "\n2. CPU Health"
echo "Load Average: $(uptime | awk -F'load average:' '{print $2}')"
echo "CPU Cores: $(nproc)"
echo "Top 5 CPU Processes:"
ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head -6# 3. 内存健康
echo -e "\n3. Memory Health"
free -h
echo -e "\nTop 5 Memory Processes:"
ps -eo pid,ppid,cmd,%mem --sort=-%mem | head -6# 4. 磁盘健康
echo -e "\n4. Disk Health"
echo "Disk Usage:"
df -h | grep -v tmpfs
echo -e "\nInode Usage:"
df -i | grep -v tmpfs# 5. 磁盘I/O (需要 sysstat)
echo -e "\n5. Disk I/O"
if command -v iostat &> /dev/null; theniostat -x 1 1 | tail -n +4
elseecho "iostat not installed. Install with: sudo apt-get install sysstat"
fi# 6. 网络连接
echo -e "\n6. Network Connections"
echo "ESTABLISHED Connections: $(ss -tun state established | wc -l)"
echo "LISTEN Ports:"
ss -tunlp | head -10# 7. 登录信息
echo -e "\n7. User Login"
echo "Logged in users:"
who
echo -e "\nRecent logins:"
last -n 5# 8. 系统日志检查 (最近错误)
echo -e "\n8. Recent System Errors"
if [ -f /var/log/syslog ]; thenjournalctl --since "1 hour ago" -p err..alert | tail -5
elif [ -f /var/log/messages ]; thengrep -i error /var/log/messages | tail -5
fiecho -e "\n========== Check Completed =========="
运行方式:
chmod +x health_check.sh
./health_check.sh
二、 深度手动检查项目
对于更彻底的检查,你需要手动执行以下步骤。
1. 硬件健康检查
内存错误:
# 检查ECC内存错误 (需要edac-utils) sudo apt-get install edac-utils edac-util -s # 或者查看内核消息 dmesg | grep -i "ecc\|memory error"
硬盘SMART状态:
# 安装smartmontools sudo apt-get install smartmontools # 检查硬盘健康 sudo smartctl -a /dev/sda # 重点关注:RAW_READ_ERROR_RATE, Reallocated_Sector_Ct, Current_Pending_Sector
CPU/Motherboard:
# 检查CPU错误 cat /proc/cpuinfo | grep -i "model name\|cpu mhz\|cache" # 检查硬件错误 dmesg | grep -i "hardware error" # 检查机器检查异常 mcelog --client
2. 文件系统完整性
检查文件系统错误:
# 检查根文件系统 (需要卸载,通常在单用户模式或救援模式下进行) sudo fsck -f /dev/sda1# 检查ext4文件系统 sudo tune2fs -l /dev/sda1 | grep -i "last checked\|mount count"
3. 系统服务健康
检查失败的系统服务:
systemctl --failed systemctl list-units --state=failed
检查关键服务状态:
systemctl status sshd systemctl status nginx systemctl status mysql # 或者检查所有运行中的服务 systemctl list-units --type=service --state=running
4. 安全健康检查
检查未授权的SUID文件:
find / -perm -4000 -type f 2>/dev/null
检查root权限的进程:
ps -ef | grep "^root" | less
检查开放端口和服务:
netstat -tulpn # 或者使用ss ss -tulpn
5. 性能基准测试
CPU压力测试:
# 安装stress工具 sudo apt-get install stress # 测试CPU (4个核心,持续60秒) stress --cpu 4 --timeout 60s # 同时用top或htop观察CPU使用率
内存测试:
# 使用memtester (需要安装) sudo apt-get install memtester # 测试1GB内存 memtester 1G 1
磁盘I/O性能测试:
# 使用hdparm测试读取速度 sudo hdparm -Tt /dev/sda# 使用dd测试写入速度 (谨慎使用!) dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
6. 网络健康检查
网络连通性测试:
# 测试到网关的连通性 ping -c 4 $(ip route show default | awk '/default/ {print $3}')# 测试DNS解析 nslookup google.com dig google.com# 测试端口连通性 telnet target_host 22 # 或者使用nc nc -zv target_host 22
网络带宽测试:
# 安装iperf3 sudo apt-get install iperf3 # 在一台机器作为服务器:iperf3 -s # 在另一台测试:iperf3 -c server_ip
三、 自动化监控建议
对于生产环境,建议设置自动化监控:
使用Prometheus + Grafana:监控系统指标
使用Zabbix或Nagios:监控服务状态和设置告警
使用logwatch或logcheck:自动化日志分析
设置定期cron任务运行健康检查脚本
配置logrotate:防止日志文件占满磁盘
四、 健康检查清单总结
✅ CPU:负载平均 < CPU核心数,无持续100%使用
✅ 内存:可用内存 > 10%,swap使用率低
✅ 磁盘:使用率 < 85%,inode充足,无磁盘错误
✅ 网络:关键端口可访问,无大量错误包
✅ 服务:关键服务运行正常,无失败服务
✅ 日志:无重复错误信息,无安全警告
✅ 安全:无未授权访问,系统及时更新
✅ 备份:定期备份验证正常
通过这套完整的检查流程,你可以全面了解Linux系统的健康状况,及时发现并预防潜在问题。