以下是一些常见的运维常识:
-
日志分析:快速定位应用崩溃原因
生产场景:一个 Web 应用崩溃,重启后仍然无法恢复。通过查看日志文件,发现 OutOfMemoryError
,并且日志中显示 JVM 堆内存不足。
解决方案:
-
使用
grep
过滤关键字:grep "OutOfMemoryError" /var/log/application.log -
确定是内存溢出问题,检查 JVM 配置,增加堆内存大小。修改
JAVA_OPTS
配置:-Xms2g -Xmx4g
预防措施:配置日志轮转,确保日志不会占用过多磁盘空间。
-
备份与恢复:数据库数据丢失恢复
生产场景:由于误操作,生产环境数据库中的重要表被删除,需要恢复数据。
解决方案:
-
使用备份文件恢复:mysql -u root -p < /backup/backup_2024-12-01.sql
-
如果没有备份,通过分析 MySQL 的
binlog
日志恢复增量数据:mysqlbinlog /var/lib/mysql/mysql-bin.000001 | mysql -u root -p
预防措施:定期备份并验证备份文件,配置增量备份,确保能最大程度恢复数据。
-
磁盘管理:磁盘空间不足
生产场景:生产服务器上的磁盘空间满,导致应用无法写入数据,服务中断。
解决方案:
-
使用
df -h
查看磁盘使用情况,使用du -sh /var/log/*
查找日志文件占用的空间。 -
删除过期的日志或临时文件,清理
/tmp
目录。 -
配置
logrotate
自动轮转日志文件,避免磁盘占满。
预防措施:设置磁盘空间监控,及时告警,避免手动清理遗漏。
-
权限管理:避免滥用权限
生产场景:开发人员拥有 root 权限,误操作导致生产环境服务宕机。
解决方案:
-
使用
sudo
配置最小权限,确保开发人员只对特定操作具有权限:user ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx -
通过
visudo
配置审计规则,限制不必要的权限。
预防措施:定期审查权限设置,确保用户仅能执行必要的命令。
-
网络故障排查:服务器无法访问外网
生产场景:服务器无法访问外部网络,导致无法进行软件更新或 API 请求。
解决方案:
-
使用
ping
检查服务器与外网的连通性:ping 8.8.8.8 -
使用
traceroute
确定网络中断位置。 -
检查防火墙配置,使用
iptables -L
查看当前规则,确认是否有误拦截外部请求。
预防措施:配置网络监控工具,确保网络连接稳定。
-
进程管理:高负载导致服务响应慢
生产场景:Web 应用由于高并发请求,导致某些进程占用大量 CPU 资源,系统负载过高,影响响应速度。
解决方案:
-
使用
top
或htop
查看 CPU 占用情况:top -o %CPU -
调整进程的优先级,使用
renice
降低低优先级进程的 CPU 使用率:renice -n 10 -p <PID> -
如果应用性能瓶颈是数据库,可以优化 SQL 查询或增加数据库索引。
预防措施:配置自动化监控,提前告警并调整资源分配。
-
定时任务:漏掉定期备份任务
生产场景:定时任务(如数据库备份)未成功执行,导致数据丢失。
解决方案:
-
使用
crontab -l
检查当前定时任务配置,确保任务已正确设置:crontab -l -
查看
/var/log/cron
日志,确保任务执行无误。
预防措施:配置监控工具(如 Prometheus)实时监控定时任务执行情况,确保任务成功执行。
-
服务管理:服务崩溃无法自动重启
生产场景:关键服务(如 Nginx 或 MySQL)崩溃后没有自动重启,导致系统无法提供服务。
解决方案:
-
配置
systemd
确保服务崩溃后自动重启:systemctl enable nginxsystemctl restart nginx -
设置
Restart=always
在服务配置文件中,确保服务在失败后自动重启。
预防措施:配置服务监控,确保服务始终在运行状态。
-
高可用性:负载均衡器故障
生产场景:负载均衡器故障,导致流量无法正确分发,部分用户无法访问服务。
解决方案:
-
配置 Nginx 或 HAProxy 作为负载均衡器,确保多个实例能够均衡分配流量。
-
使用健康检查来确保实例健康状态:upstream backend {server backend1.example.com check;server backend2.example.com check;}
预防措施:配置健康检查,确保负载均衡器始终能检测到健康的后端服务。
10.数据库性能优化:查询慢导致应用性能下降
生产场景:数据库查询响应时间过长,导致前端页面加载缓慢,影响用户体验。
解决方案:
-
使用
EXPLAIN
分析慢查询,优化查询语句:EXPLAIN SELECT * FROM orders WHERE order_date = '2024-12-20'; -
添加索引以加速查询:CREATE INDEX idx_order_date ON orders(order_date);
预防措施:配置慢查询日志,定期审查和优化数据库查询。
11.容器化:Docker 容器资源泄漏
生产场景:某 Docker 容器由于内存泄漏导致资源消耗过大,影响系统稳定性。
解决方案:
-
使用
docker stats
查看容器的资源消耗情况。 -
使用
docker logs
查看容器输出日志,确定是否有内存泄漏问题。
预防措施:设置 Docker 容器的内存限制,避免容器资源过度占用:docker run -m 512m --memory-swap 1g my-container
12.网络安全:防止 DDoS 攻击
生产场景:服务器遭遇 DDoS 攻击,导致网络带宽消耗殆尽,应用服务不可用。
解决方案:
-
配置防火墙规则,限制每个 IP 地址的请求频率:iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/min -j ACCEPT
-
使用 Cloudflare 或 AWS Shield 等服务防止 DDoS 攻击。
预防措施:设置流量监控,及时发现异常流量,防止 DDoS 攻击。
13.SSL/TLS 配置:确保 HTTPS 安全
生产场景:网站未启用 HTTPS,导致用户数据未加密传输,容易遭受中间人攻击。
解决方案:
-
配置 Let’s Encrypt 证书并启用 HTTPS:certbot --nginx -d example.com
-
强制 HTTP 请求重定向到 HTTPS:server {listen 80;server_name example.com;return 301 https://$host$request_uri;}
预防措施:定期检查证书有效性,避免证书过期。
14.服务依赖:微服务依赖中断
生产场景:微服务架构下的一个服务无法启动,导致依赖的其他服务也无法正常工作。
解决方案:
-
使用
docker-compose
管理多个服务的依赖,确保服务按顺序启动。 -
配置服务健康检查,确保每个服务健康时才能进行下游服务的启动。
预防措施:定期测试微服务的高可用性和容错性,确保系统具备较强的抗压能力。
15.自动化运维:批量配置管理
生产场景:新增一批服务器,需统一配置防火墙规则、软件包等。
解决方案:
-
使用 Ansible 或 Puppet 自动化配置管理工具,批量配置所有服务器。ansible-playbook -i inventory setup.yml
预防措施:配置持续集成(CI/CD)流水线,确保所有服务器配置的一致性和安全性。
16.内存泄漏:查找并解决内存泄漏
生产场景:应用长期运行后,内存使用量不断增加,最终导致系统崩溃。
解决方案:
-
使用
top
和free -h
检查内存使用情况。 -
配合
valgrind
或jmap
查找内存泄漏:jmap -histo:live <pid>
预防措施:定期检查内存使用情况,定期重启服务避免内存泄漏积累。
17.日志存储:集中式日志管理
生产场景:多台服务器生成大量日志文件,手动查看日志困难,难以定位问题。
解决方案:
-
配置 ELK(Elasticsearch, Logstash, Kibana)堆栈收集和分析日志。
-
配置 Filebeat 收集日志并发送至 Logstash 进行处理:filebeat.yml
预防措施:配置日志分类和实时监控,避免日志过大导致性能问题。
18.虚拟化管理:KVM 主机性能优化
生产场景:KVM 虚拟化环境下虚拟机性能不佳,导致主机资源不足。
解决方案:
-
调整虚拟机内存和 CPU 配置。
-
配置 KVM 的
cpu pinning
和hugepages
来优化性能。
预防措施:定期分析虚拟化主机性能,优化资源分配。
19.备份恢复:云存储数据恢复
生产场景:存储在云端的数据库或文件丢失,需从云存储恢复。
解决方案:
-
使用 AWS S3、Google Cloud Storage 或其他云服务提供的备份恢复功能。
预防措施:配置云服务自动备份并定期验证备份文件。
20.服务调度:Kubernetes 集群调度优化
生产场景:Kubernetes 集群资源分配不均,导致部分容器因资源不足而无法启动。
解决方案:
-
使用
kubectl
查看 pod 和 node 的资源分配:kubectl describe pod <pod_name> -
配置合理的资源请求和限制(如
resources.requests
和resources.limits
)。
预防措施:定期调整集群资源,避免资源过度集中在某一节点,导致负载不均。
引用自:
https://mp.weixin.qq.com/s/hAzU_epkZ_uSNTdQQheD-A
标签:场景,服务,运维,预防措施,配置,常识,解决方案,日志 From: https://www.cnblogs.com/yangmeichong/p/18619494