2核4G服务器综合优化方案.md 5.9 KB

2核4G服务器综合优化方案

环境现状

  • 服务器配置: 阿里云ECS 2核4G (从2核2G升级)
  • 服务架构: MySQL + Redis + Nginx + FastAPI后端
  • 目标: 充分利用新增内存,提高并发处理能力

优化方案总览

内存分配策略 (4G总内存)

  • MySQL: 1GB (缓冲池800M + 其他200M)
  • Redis: 2GB (缓存数据)
  • 系统/应用: 1GB (系统缓存 + 应用运行)
  • 预期效果: 并发能力提升约150-200%

1. MySQL优化配置

核心优化项

缓冲池内存调整 (影响最大)

# 原来: 256M → 优化: 800M (缓冲池)
innodb_buffer_pool_size = 800M
innodb_buffer_pool_instances = 4  # 2核CPU,增加实例数

连接和并发优化

# 连接数适当增加 (原来500)
max_connections = 800
max_user_connections = 500

# 线程缓存优化
thread_cache_size = 64

其他关键调整

# 临时表和排序优化
tmp_table_size = 32M
max_heap_table_size = 32M

# 缓存优化
table_open_cache = 2048
table_definition_cache = 1024

预期效果

  • 查询性能: 提升200-300%
  • 并发连接: 从500提升到800
  • 内存利用率: 从256M提升到800M

2. Redis优化配置

核心优化项

内存容量调整

# 原来: 1GB → 优化: 2GB
maxmemory 2gb

并发性能优化

# I/O线程数调整 (2核CPU)
io-threads 3  # 原来2,增加到3
io-threads-do-reads yes  # 启用I/O线程读取

连接优化

# TCP优化
tcp-backlog 131072  # 原来65535,提升到131072
tcp-keepalive 300   # 原来60,增加到300秒

预期效果

  • 内存容量: 从1GB提升到2GB
  • I/O性能: 提升30-50%
  • 连接处理: 更稳定的长连接

3. Nginx优化配置

核心优化项

限流策略调整 (适应新增资源)

# API限流放宽
limit_req_zone $binary_remote_addr zone=api_limit:20m rate=20r/s;  # 原来10r/s

# WebSocket限流调整
limit_req_zone $binary_remote_addr zone=ws_limit:20m rate=10r/s;   # 原来5r/s

# 连接限制放宽
limit_conn_zone $binary_remote_addr zone=conn_limit:20m;

性能优化

# 工作进程数 (2核CPU)
worker_processes 2;  # 明确设置为2

# 连接数优化
worker_connections 4096;  # 原来8192,调整为4096更合适

# 缓冲区优化
client_max_body_size 20m;  # 原来10m

预期效果

  • API请求: 从10r/s提升到20r/s
  • WebSocket连接: 从5r/s提升到10r/s
  • 并发连接: 更稳定的处理能力

4. 后端服务优化

启动方式升级

从单进程uvicorn升级为gunicorn多进程

# 安装gunicorn (如果未安装)
pip install gunicorn

# 修改start_prod.sh启动命令
# 原来: uvicorn单进程
# 优化: gunicorn多进程
gunicorn main:app \
  --worker-class uvicorn.workers.UvicornWorker \
  --workers 4 \
  --bind 0.0.0.0:8766 \
  --max-requests 1000 \
  --max-requests-jitter 50 \
  --access-logfile - \
  --log-level info

预期效果

  • 并发处理: 4个worker进程
  • 稳定性: 自动重启机制
  • 内存管理: 更好的内存回收

5. 系统层面优化

内核参数调整 (可选)

创建 /etc/sysctl.d/99-lyrria.conf:

# 网络优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535

# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10

# 文件句柄
fs.file-max = 2097152

资源限制调整

修改 /etc/security/limits.conf:

* soft nofile 65536
* hard nofile 65536
* soft nproc  65536
* hard nproc  65536

6. 部署顺序

优化实施步骤

  1. 备份当前配置

    cp 生产环境配置/my.cnf 生产环境配置/my.cnf.backup
    cp 生产环境配置/redis.conf 生产环境配置/redis.conf.backup
    cp 生产环境配置/nginx.conf 生产环境配置/nginx.conf.backup
    
    1. 按顺序重启服务 ```bash

      1. 停止应用服务

      cd backend && ./stop_prod.sh

    2. 重启MySQL

    sudo systemctl restart mysqld

    3. 重启Redis

    sudo systemctl restart redis

    4. 重启Nginx

    sudo systemctl restart nginx

    5. 启动应用服务

    cd backend && ./start_prod.sh ```

  2. 验证配置 ```bash

    检查各服务状态

    systemctl status mysqld redis nginx

# 检查内存使用 free -h

# 检查连接数 netstat -antp | grep -E ':(3306|6379|80|443|8766)' | wc -l


---

## 7. 监控和调优

### 关键指标监控

**MySQL监控**
```sql
-- 连接数监控
SHOW PROCESSLIST;

-- 缓冲池命中率
SHOW ENGINE INNODB STATUS;

Redis监控

# 内存使用
redis-cli info memory

# 连接数
redis-cli info clients

# 性能统计
redis-cli info stats

系统监控

# CPU使用率
top -b -n1 | head -10

# 内存使用
free -h

# 磁盘I/O
iostat -x 1 5

8. 预期性能提升

组件 优化前 优化后 提升幅度
MySQL内存 256MB 800MB +212%
Redis内存 1GB 2GB +100%
API限流 10r/s 20r/s +100%
WS限流 5r/s 10r/s +100%
后端进程 1进程 4进程 +300%
综合并发 基准 - +150-200%

9. 注意事项

风险控制

  • 渐进式调整: 先调整50%配置,观察效果后再调整
  • 监控告警: 设置关键指标告警
  • 回滚准备: 保留原配置文件备份

观察要点

  • 内存使用: 确保不超过90%
  • CPU使用率: 2核CPU,避免长期超过80%
  • 响应时间: API响应时间不应明显增加
  • 错误率: 各服务错误率不应上升

10. 后续优化建议

中期优化 (1-2周后)

  • 启用MySQL性能模式进行深度分析
  • 考虑启用Redis持久化
  • 优化应用代码层面的性能瓶颈

长期优化 (1个月后)

  • 考虑读写分离架构
  • 实施更细粒度的缓存策略
  • 监控用户行为模式,优化资源分配

最后更新: 2025年12月29日