2核2G的服务器搭建多个服务后容易死机,如何优化?

针对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

七、长期建议

  1. 升级配置:考虑升级到4核4G,成本增加有限
  2. 微服务拆分:将服务拆分到不同服务器
  3. 使用云服务:将数据库等资源密集型服务迁移到云托管服务
  4. 实施限流:对API接口实施限流策略

优化检查清单

  • [ ] 确认各服务内存限制
  • [ ] 配置合理的swap空间
  • [ ] 优化数据库连接池
  • [ ] 启用服务监控告警
  • [ ] 设置服务自动重启
  • [ ] 实施日志轮转防止磁盘满

建议先从资源监控开始,找出具体瓶颈点,然后针对性优化。对于2核2G的配置,建议同时运行的服务不超过3-4个(轻量级)。

云服务器