针对2核2G服务器多服务易死机的问题,可以从以下几个方面进行优化:
一、资源监控与诊断
# 1. 实时监控工具
htop # 替代top,可视化查看资源
nmon # 性能监控
glances # 综合监控
# 2. 内存分析
free -h
cat /proc/meminfo
# 3. 进程分析
ps aux --sort=-%mem | head -10 # 内存占用前10
ps aux --sort=-%cpu | head -10 # CPU占用前10
二、服务优化策略
1. 服务拆分与隔离
# 使用Docker容器化隔离
docker run --memory="512m" --cpus="0.5" service1
docker run --memory="256m" --cpus="0.3" service2
# 或使用systemd限制资源
[Service]
MemoryLimit=300M
CPUQuota=50%
2. 调整服务配置
-
数据库优化(如MySQL):
# my.cnf优化 innodb_buffer_pool_size = 128M key_buffer_size = 32M max_connections = 30 # 减少连接数 -
Web服务器优化(如Nginx):
worker_processes 2; # 与CPU核数一致 worker_connections 512; # 减少连接数 keepalive_timeout 30; -
Java应用:
# JVM参数调整 -Xmx512m -Xms256m -XX:+UseG1GC
三、系统级优化
1. 内核参数调整
# /etc/sysctl.conf
vm.swappiness = 10 # 减少交换
vm.vfs_cache_pressure = 50 # 缓存压力
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
2. 内存管理
# 清理缓存(谨慎使用)
sync && echo 3 > /proc/sys/vm/drop_caches
# 添加swap空间(4G推荐)
dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
四、架构调整建议
1. 服务优先级设置
# 使用nice值调整优先级
nice -n 10 java -jar app.jar # 低优先级服务
nice -n -5 nginx # 高优先级服务
2. 负载均衡与分流
客户端 → Nginx(反向XX) → 后端服务
↓
静态文件使用CDN
数据库使用云服务
3. 服务降级策略
- 非核心服务设置资源上限
- 实现服务熔断机制
- 静态资源外迁到对象存储
五、监控告警方案
1. 基础监控脚本
#!/bin/bash
# 监控脚本示例
THRESHOLD=80
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
MEM=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if (( $(echo "$CPU > $THRESHOLD" | bc -l) )); then
echo "CPU使用率过高: ${CPU}%"
fi
2. 使用轻量监控工具
# Prometheus + Node Exporter(资源占用约100MB)
# 或使用Netdata(实时监控)
六、紧急处理措施
1. 死机时快速恢复
# 1. 强制结束占用高的进程
kill -9 $(ps aux --sort=-%mem | head -2 | tail -1 | awk '{print $2}')
# 2. 重启关键服务
systemctl restart nginx mysql
# 3. 临时增加swap
fallocate -l 2G /tmp/swap && mkswap /tmp/swap && swapon /tmp/swap
2. 创建服务重启脚本
#!/bin/bash
# 自动重启异常服务
SERVICES=("nginx" "mysql" "app")
for service in "${SERVICES[@]}"; do
if ! systemctl is-active --quiet $service; then
systemctl restart $service
echo "$(date): 重启 $service" >> /var/log/service_monitor.log
fi
done
七、长期建议
- 升级配置:考虑升级到4核4G,成本增加有限
- 微服务拆分:将服务拆分到不同服务器
- 使用云服务:将数据库等资源密集型服务迁移到云托管服务
- 实施限流:对API接口实施限流策略
优化检查清单
- [ ] 确认各服务内存限制
- [ ] 配置合理的swap空间
- [ ] 优化数据库连接池
- [ ] 启用服务监控告警
- [ ] 设置服务自动重启
- [ ] 实施日志轮转防止磁盘满
建议先从资源监控开始,找出具体瓶颈点,然后针对性优化。对于2核2G的配置,建议同时运行的服务不超过3-4个(轻量级)。
CLOUD技术笔记