MySQL和Redis共用2核4G内存服务器时如何优化资源占用?

2核4G内存 的服务器上同时运行 MySQL 和 Redis,资源较为紧张,因此需要合理优化两者配置,避免内存溢出或CPU争抢导致性能下降。以下是详细的优化建议:


一、总体资源分配建议(参考)

组件 建议内存上限 CPU使用 备注
MySQL 2.0 – 2.5 GB 1-2核 主要占用内存和I/O
Redis 0.8 – 1.2 GB 轻量级,单线程 内存敏感
系统+其他 ≥0.5 GB 预留系统缓存和进程

✅ 总计:约 3.5GB 使用 + 0.5GB 预留 = 4GB


二、Redis 优化配置

1. 限制最大内存

编辑 redis.conf

maxmemory 1gb
maxmemory-policy allkeys-lru
  • maxmemory: 强制限制 Redis 最大使用内存,防止OOM。
  • maxmemory-policy: 推荐 allkeys-lru(最近最少使用淘汰),适合缓存场景。

⚠️ 若数据必须持久化且不能丢失,考虑用 volatile-lru 并设置过期时间。

2. 关闭持久化(可选)

若为纯缓存用途,可关闭持久化以减少磁盘I/O和CPU占用:

save ""
# 注释掉所有 save 指令

或改为低频保存:

save 900 1
save 300 10

3. 启用 AOF 时优化

如需开启AOF:

appendonly yes
appendfsync everysec
  • everysec:平衡性能与数据安全。

4. 其他轻量配置

tcp-keepalive 60
timeout 300
stop-writes-on-bgsave-error yes

三、MySQL 优化配置

编辑 my.cnf(通常位于 /etc/mysql/my.cnf/etc/my.cnf

1. 关键参数调优(适用于 2核4G,InnoDB)

[mysqld]
# 基础设置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-name-resolve
performance_schema=OFF   # 节省内存

# 内存相关
key_buffer_size = 32M        # MyISAM索引缓存,小即可
max_allowed_packet = 64M
table_open_cache = 400       # 减少打开表的开销
tmp_table_size = 64M
max_heap_table_size = 64M

# InnoDB 设置(重点)
innodb_buffer_pool_size = 1536M   # 推荐值:1.5G,不超过总内存50%
innodb_log_file_size = 128M       # 可设为128M~256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2  # 提高性能,牺牲一点持久性
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON

# 连接数控制
max_connections = 100             # 避免过高连接耗尽内存
wait_timeout = 60
interactive_timeout = 60

🔍 innodb_buffer_pool_size 是最关键的参数,建议设置为 1.5G ~ 1.8G,给Redis和其他服务留空间。

2. 禁用不必要的插件/功能

# 如不需要,禁用
performance_schema = OFF
# skip-slave-start(如非从库)

四、系统级优化

1. 使用 swap 分区(防OOM)

虽然swap慢,但可防止崩溃:

# 创建1GB swap(如未设置)
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

添加到 /etc/fstab 永久生效。

2. 调整内核参数(可选)

# /etc/sysctl.conf
vm.swappiness=10               # 降低使用swap倾向
vm.overcommit_memory=1         # Redis推荐设置

执行 sysctl -p 生效。

3. 监控资源使用

使用工具监控:

htop          # 查看CPU/内存
free -h       # 内存使用
df -h         # 磁盘空间
mysqladmin -u root -p status   # MySQL状态
redis-cli info memory          # Redis内存信息

五、部署建议

项目 建议
是否同机部署? 小型项目可接受,生产环境建议分离
定时任务 避免高峰时段执行备份等重负载操作
日志轮转 开启 logrotate,防止日志占满磁盘
备份策略 使用 mysqldump + redis RDB/AOF 定期备份

六、常见问题排查

  • MySQL 启动失败:检查 innodb_buffer_pool_size 是否过大。
  • Redis OOM:确认 maxmemory 已设置并启用淘汰策略。
  • 系统卡顿:查看是否频繁使用 swap,或某个进程内存泄漏。

总结

在 2核4G 环境下共用 MySQL 和 Redis,关键在于:

严格限制内存使用
关闭不必要的功能和服务
合理分配 buffer_pool 和 maxmemory
监控 + 预留系统资源

示例最终内存分配:

  • MySQL: ~1.8G (innodb_buffer_pool)
  • Redis: 1.0G (maxmemory)
  • 系统及其他:1.2G(含缓存、swap缓冲)

通过精细调优,可以在有限资源下稳定运行中小型应用。如流量增长,建议尽早拆分服务。

未经允许不得转载:云计算 » MySQL和Redis共用2核4G内存服务器时如何优化资源占用?