Linux运维实战指南:10个常见问题及解决方案
作为一名资深运维工程师,我总结了在日常工作中最常遇到的Linux系统问题。这些问题涵盖了系统性能、磁盘管理、网络配置等核心领域,每个问题都提供了详细的诊断步骤和多种解决方案。
1. 系统负载过高,响应缓慢
问题现象
- • 系统响应时间明显延长
- • 用户操作卡顿
- • 应用程序启动缓慢
诊断步骤
# 查看系统负载
uptime
top -c
htop
# 查看CPU使用情况
vmstat 1 5
iostat -x 1 5
# 查看内存使用
free -h
cat /proc/meminfo
解决方案
临时处理:
# 找出占用CPU最高的进程
ps aux –sort=-%cpu | head -10
# 杀死异常进程(谨慎操作)
kill -9 PID
# 清理系统缓存(谨慎使用)
echo 3 > /proc/sys/vm/drop_caches
长期优化:
- • 调整进程优先级:
nice -n 10 command
- • 优化系统参数:调整
/etc/sysctl.conf
- • 增加硬件资源或优化应用程序
2. 磁盘空间不足
问题现象
- • 系统提示”No space left on device”
- • 无法创建新文件
- • 应用程序异常退出
诊断步骤
# 查看磁盘使用情况
df -h
du -sh /*
du -sh /var/log/*
# 查找大文件
find / -type f -size +100M -exec ls -lh {} \;
find /var/log -name “*.log” -size +50M
# 查看inode使用情况
df -i
解决方案
即时清理:
# 清理系统日志
journalctl –vacuum-time=7d
logrotate -f /etc/logrotate.conf
# 清理临时文件
rm -rf /tmp/*
rm -rf /var/tmp/*
# 清理包缓存
apt clean # Ubuntu/Debian
yum clean all # CentOS/RHEL
预防措施:
# 设置日志轮转
cat > /etc/logrotate.d/custom << EOF
/var/log/application.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 644 user group
}
EOF
# 设置磁盘监控
echo “*/10 * * * * root df -h | awk ‘\$5 > 80 {print \$0}’ | mail -s ‘Disk Usage Alert’ admin@company.com” >> /etc/crontab
3. 网络连接异常
问题现象
- • 无法访问外网
- • 服务间通信失败
- • 网络延迟过高
诊断步骤
# 检查网络接口
ip addr show
ifconfig
# 测试网络连通性
ping -c 4 8.8.8.8
traceroute http://google.com
mtr http://google.com
# 检查路由表
ip route show
route -n
# 检查DNS解析
nslookup http://google.com
dig http://google.com
# 检查防火墙状态
iptables -L -n
firewall-cmd –list-all
解决方案
网络配置修复:
# 重启网络服务
systemctl restart networking # Ubuntu
systemctl restart network # CentOS
# 手动配置IP(临时)
ip addr add 192.168.1.100/24 dev eth0
ip route add default via 192.168.1.1
# 修改DNS配置
echo “nameserver 8.8.8.8” > /etc/resolv.conf
echo “nameserver 8.8.4.4” >> /etc/resolv.conf
防火墙配置:
# 查看并允许特定端口
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –dport 443 -j ACCEPT
# 保存防火墙规则
iptables-save > /etc/iptables/rules.v4
4. 服务无法启动
问题现象
- • systemctl start 命令失败
- • 服务状态显示failed
- • 应用程序端口未监听
诊断步骤
# 查看服务状态
systemctl status service_name
journalctl -u service_name -n 50
# 检查配置文件
systemctl cat service_name
nginx -t # 检查nginx配置
apache2ctl configtest # 检查apache配置
# 检查端口占用
netstat -tulpn | grep :80
ss -tulpn | grep :80
lsof -i :80
解决方案
配置文件修复:
# 备份原配置
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# 测试配置语法
nginx -t
systemctl reload nginx
# 查看服务依赖
systemctl list-dependencies service_name
权限问题处理:
# 检查文件权限
ls -la /var/log/nginx/
chown -R nginx:nginx /var/log/nginx/
chmod 755 /var/log/nginx/
# 检查SELinux状态
getenforce
setsebool -P httpd_can_network_connect 1
5. SSH连接被拒绝
问题现象
- • “Connection refused”错误
- • “Permission denied”提示
- • 连接超时
诊断步骤
# 检查SSH服务状态
systemctl status sshd
ps aux | grep sshd
# 检查SSH配置
sshd -T | grep -E “(port|permitrootlogin|passwordauthentication)”
# 检查网络连接
netstat -tulpn | grep :22
iptables -L | grep ssh
# 查看认证日志
tail -f /var/log/auth.log
journalctl -u sshd -f
解决方案
服务修复:
# 重启SSH服务
systemctl restart sshd
# 检查配置文件语法
sshd -t
# 修改SSH端口(如果需要)
sed -i ‘s/#Port 22/Port 2222/’ /etc/ssh/sshd_config
systemctl reload sshd
安全配置优化:
# 禁用root登录
sed -i ‘s/#PermitRootLogin yes/PermitRootLogin no/’ /etc/ssh/sshd_config
# 启用密钥认证
sed -i ‘s/#PubkeyAuthentication yes/PubkeyAuthentication yes/’ /etc/ssh/sshd_config
# 设置登录失败限制
echo “MaxAuthTries 3” >> /etc/ssh/sshd_config
echo “MaxStartups 10:30:60” >> /etc/ssh/sshd_config
6. 内存使用率过高
问题现象
- • 系统响应缓慢
- • 应用程序被OOM killer杀死
- • swap使用率很高
诊断步骤
# 查看内存使用详情
free -h
cat /proc/meminfo
vmstat 1 5
# 查看内存消耗top进程
ps aux –sort=-%mem | head -10
top -o %MEM
# 检查swap使用
swapon -s
cat /proc/swaps
# 查看OOM killer日志
dmesg | grep -i “killed process”
journalctl -k | grep -i “killed process”
解决方案
临时释放内存:
# 清理缓存
echo 3 > /proc/sys/vm/drop_caches
sync
# 重启内存占用过高的服务
systemctl restart high_memory_service
# 调整swap使用策略
echo 10 > /proc/sys/vm/swappiness
长期优化:
# 永久设置swappiness
echo “vm.swappiness=10” >> /etc/sysctl.conf
# 配置应用程序内存限制
# 在systemd服务文件中添加
[Service]
MemoryLimit=1G
MemoryMax=1G
7. 文件系统错误
问题现象
- • 文件系统只读
- • 文件损坏或丢失
- • 磁盘I/O错误
诊断步骤
# 检查文件系统状态
mount | grep “ro,”
df -h
# 查看磁盘错误
dmesg | grep -i error
cat /var/log/messages | grep -i error
# 检查磁盘健康状态
smartctl -a /dev/sda
badblocks -v /dev/sda1
解决方案
文件系统修复:
# 卸载文件系统(如果可能)
umount /dev/sda1
# 执行文件系统检查
fsck -f /dev/sda1
e2fsck -f /dev/sda1 # ext文件系统
xfs_repair /dev/sda1 # XFS文件系统
# 强制以读写模式重新挂载
mount -o remount,rw /
预防措施:
# 定期文件系统检查
echo “0 2 * * 0 root fsck -A -R -T -C -a” >> /etc/crontab
# 监控磁盘健康
smartctl -t short /dev/sda
smartctl -a /dev/sda
8. 时间同步问题
问题现象
- • 系统时间不准确
- • 日志时间戳混乱
- • 认证失败
诊断步骤
# 查看当前时间
date
timedatectl status
# 检查NTP服务
systemctl status ntp
systemctl status chrony
ntpq -p
# 查看时区设置
ls -la /etc/localtime
cat /etc/timezone
解决方案
NTP配置:
# 安装NTP服务
apt install ntp # Ubuntu
yum install ntp # CentOS
# 配置NTP服务器
cat > /etc/ntp.conf << EOF
server http://0.pool.ntp.org iburst
server http://1.pool.ntp.org iburst
server http://2.pool.ntp.org iburst
EOF
# 启动并启用NTP
systemctl enable ntp
systemctl start ntp
使用timedatectl(推荐):
# 启用NTP
timedatectl set-ntp true
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 手动同步时间
ntpdate -s http://time.nist.gov
9. 进程僵尸/孤儿进程
问题现象
- • 系统中存在大量zombie进程
- • 进程无法正常终止
- • 资源无法释放
诊断步骤
# 查看僵尸进程
ps aux | awk ‘$8 ~ /^Z/ {print $0}’
ps -eo pid,stat,comm | grep Z
# 查看进程树
pstree -p
ps -ef –forest
# 查看进程状态
cat /proc/PID/status
ls -la /proc/PID/
解决方案
清理僵尸进程:
# 找到父进程并重启
ps -o pid,ppid,state,comm | grep Z
kill -CHLD parent_pid
# 强制杀死进程组
kill -9 -process_group_id
# 重启相关服务
systemctl restart problematic_service
预防措施:
# 编写脚本监控僵尸进程
cat > /usr/local/bin/zombie_monitor.sh << ‘EOF’
#!/bin/bash
zombies=$(ps aux | awk ‘$8 ~ /^Z/ {print $2}’ | wc -l)
if [ $zombies -gt 10 ]; then
echo “发现 $zombies 个僵尸进程” | mail -s “僵尸进程警告” admin@company.com
fi
EOF
chmod +x /usr/local/bin/zombie_monitor.sh
echo “*/5 * * * * root /usr/local/bin/zombie_monitor.sh” >> /etc/crontab
10. 系统安全问题
问题现象
- • 异常网络连接
- • 未知进程运行
- • 系统文件被修改
诊断步骤
# 检查异常连接
netstat -antup | grep ESTABLISHED
ss -tuln
# 查看登录记录
last -n 20
lastlog
who -a
# 检查可疑进程
ps aux | grep -v “\[“
lsof -i
find /tmp -type f -executable
# 检查系统完整性
rpm -Va # RHEL/CentOS
debsums -c # Ubuntu/Debian
解决方案
安全加固:
# 更新系统补丁
apt update && apt upgrade # Ubuntu
yum update # CentOS
# 配置防火墙
ufw enable # Ubuntu
firewall-cmd –permanent –add-service=ssh
firewall-cmd –reload # CentOS
# 安装安全工具
apt install fail2ban rkhunter chkrootkit
监控脚本:
# 创建安全监控脚本
cat > /usr/local/bin/security_check.sh << ‘EOF’
#!/bin/bash
# 检查异常登录
lastlog | awk ‘$2 !~ /Never/ && $2 !~ /pts/ {print “异常登录: ” $0}’
# 检查可疑进程
ps aux | awk ‘$11 ~ /^\[/ {next} $1 == “root” && $11 !~ /^\// {print “可疑进程: ” $0}’
# 检查网络连接
netstat -antup | awk ‘$6 == “ESTABLISHED” && $5 !~ /^(127\.|192\.168\.|10\.)/ {print “外部连接: ” $0}’
EOF
chmod +x /usr/local/bin/security_check.sh
echo “0 */6 * * * root /usr/local/bin/security_check.sh | mail -s ‘Security Check Report’ admin@company.com” >> /etc/crontab
总结
这10个问题涵盖了Linux运维工作中的核心场景。作为运维工程师,掌握系统化的问题诊断方法和解决思路比记住具体命令更重要。
最佳实践建议:
- 1. 建立监控体系:使用Prometheus + Grafana或Zabbix等工具
- 2. 自动化运维:编写脚本自动处理常见问题
- 3. 定期备份:系统配置和重要数据的备份策略
- 4. 文档管理:记录每次问题处理的详细过程
- 5. 预防优于治疗:通过监控和预警避免问题发生
进阶学习路径:
- • 容器化技术(Docker/Kubernetes)
- • 自动化配置管理(Ansible/Puppet)
- • 云原生运维(AWS/Azure/阿里云)
- • DevOps工具链集成
如果这篇文章对您有帮助,欢迎关注我的博客获取更多运维技术分享。有问题也可以在评论区交流讨论!
关于作者:资深Linux运维工程师,专注于大规模分布式系统运维,擅长自动化运维和性能优化。
文末福利
就目前来说,传统运维冲击年薪30W+的转型方向就是SRE&DevOps岗位。
为了帮助大家早日摆脱繁琐的基层运维工作,给大家整理了一套高级运维工程师必备技能资料包,内容有多详实丰富看下图!
共有 20 个模块

1.38张最全工程师技能图谱

2.面试大礼包

3.Linux书籍

4.go书籍

······
6.自动化运维工具

18.消息队列合集

以上所有资料获取请
备注:最新运维资料
https://edu.magedu.com/v1/s/c900fcdd
本文链接:https://www.yunweipai.com/47322.html
网友评论comments