在1核1G的有限资源环境下同时运行MySQL和Redis,需要谨慎分配内存。以下是我的建议:
一、总体分配原则
- 总内存:1GB = 1024MB
- 系统预留:150-200MB(系统进程、缓存等)
- 可用内存:约800-850MB
二、推荐分配方案
方案A:侧重MySQL(适合读多写少)
MySQL:512MB
Redis:256MB
系统:256MB
方案B:均衡分配(通用场景)
MySQL:384MB
Redis:256MB
系统:384MB
方案C:侧重Redis(缓存密集型)
MySQL:256MB
Redis:384MB
系统:384MB
三、具体配置建议
MySQL配置(my.cnf)
[mysqld]
# 基础设置
innodb_buffer_pool_size = 256M # 根据方案调整
key_buffer_size = 16M
query_cache_size = 16M
tmp_table_size = 32M
max_heap_table_size = 32M
# 连接限制
max_connections = 30 # 降低连接数
thread_cache_size = 4
# 日志优化
innodb_log_file_size = 48M
innodb_log_buffer_size = 8M
# 性能优化
innodb_flush_log_at_trx_commit = 2 # 平衡性能与安全
Redis配置(redis.conf)
# 内存限制
maxmemory 256mb # 根据方案调整
maxmemory-policy allkeys-lru # 内存不足时淘汰策略
# 持久化优化(节省内存)
save 900 1 # 15分钟至少1个key变化
save 300 10 # 5分钟至少10个key变化
save 60 10000 # 1分钟至少10000个key变化
# 关闭AOF或使用AOF重写
appendonly no # 或使用 appendfsync everysec
# 连接限制
maxclients 50
timeout 300
四、优化建议
1. 系统层面
# 关闭不需要的服务
systemctl stop postfix # 邮件服务
systemctl stop avahi-daemon # 零配置网络
# 调整SWAP(如果使用)
echo "vm.swappiness=10" >> /etc/sysctl.conf
2. 监控工具
# 安装轻量级监控
apt-get install htop iotop # Ubuntu
yum install htop iotop # CentOS
# 查看内存使用
free -h
top -o %MEM
3. 应用层面优化
-
MySQL:
- 使用MyISAM表(如果只读)
- 定期优化表
- 关闭查询缓存(query_cache_type=0)如果Redis作为缓存
-
Redis:
- 使用Hash压缩小对象
- 设置合适的过期时间
- 考虑使用Redis Cluster分片(如果数据量大)
五、应急措施
-
内存不足时:
# 查看内存占用 ps aux --sort=-%mem | head -10 # 清理内存缓存 echo 3 > /proc/sys/vm/drop_caches -
设置监控告警:
# 简单监控脚本 while true; do free -m | awk 'NR==2{printf "Memory Usage: %.2f%n", $3*100/$2}' sleep 60 done
六、重要提醒
- 数据安全:定期备份,考虑使用云盘快照
- 性能测试:实际压力测试调整参数
- 升级考虑:如果业务增长,建议升级到2GB内存
- 容器化:考虑使用Docker限制每个服务的内存使用
推荐从方案B开始,根据实际监控数据调整。使用vmstat 1和dstat监控系统资源,根据实际使用情况微调配置。
CLOUD技术笔记