在2核4G的服务器上部署Java后端服务时,资源分配需要精打细算。以下是针对MySQL、Redis、RabbitMQ和Java应用的合理资源配置建议:
总体资源分配原则
总内存:4GB
CPU:2核
推荐分配:
- Java应用:1.5GB + 1核
- MySQL:1.2GB + 0.5核
- Redis:0.8GB + 0.3核
- RabbitMQ:0.5GB + 0.2核
具体配置方案
1. MySQL 配置(my.cnf)
[mysqld]
# 内存相关
innodb_buffer_pool_size = 512M
key_buffer_size = 64M
query_cache_size = 32M
tmp_table_size = 64M
max_heap_table_size = 64M
# 连接数
max_connections = 100
thread_cache_size = 8
# 日志
slow_query_log = 1
long_query_time = 2
log_error = /var/log/mysql/error.log
# 性能优化
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0
innodb_flush_method = O_DIRECT
2. Redis 配置(redis.conf)
# 内存限制
maxmemory 768mb
maxmemory-policy allkeys-lru
# 持久化(生产环境建议开启)
save 900 1
save 300 10
save 60 10000
# 禁用大key
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# 连接
maxclients 1000
timeout 300
# 后台保存
stop-writes-on-bgsave-error yes
rdbcompression yes
3. RabbitMQ 配置
# 设置内存限制(rabbitmq.conf)
vm_memory_high_watermark.relative = 0.4
disk_free_limit.absolute = 500MB
# Erlang进程限制
total_consumer_count_limit = 1000
total_queue_count_limit = 100
4. Java 应用配置
# JVM参数
-Xms1024m -Xmx1536m
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=4m
-server
监控与调优
实时监控脚本
#!/bin/bash
# monitor.sh
echo "=== 资源使用情况 ==="
echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)%"
echo "内存使用: $(free -h | awk '/^Mem:/ {print $3 "/" $2}')"
echo "=== 服务状态 ==="
ps aux --sort=-%mem | head -10 | grep -E "(java|mysql|redis|rabbit)"
echo "=== 关键指标 ==="
echo "MySQL连接数: $(mysqladmin -u root -p status | grep Threads_connected)"
echo "Redis内存使用: $(redis-cli info memory | grep used_memory_human)"
echo "RabbitMQ队列数: $(rabbitmqctl list_queues | wc -l)"
优化建议
1. 进程管理
# 使用systemd管理服务,设置资源限制
# /etc/systemd/system/mysql.service.d/override.conf
[Service]
MemoryLimit=1.2G
CPUQuota=50%
2. 定期维护
# MySQL定期优化
mysqlcheck -o -A -u root -p
# Redis内存清理
redis-cli flushall
3. 备份策略
# 每日备份(低峰期执行)
0 2 * * * mysqldump -u root -p database > /backup/db_$(date +%F).sql
注意事项
- 避免同时重启所有服务,防止内存峰值超出
- 监控Swap使用,频繁使用Swap会严重影响性能
- 根据实际负载调整,初期可保守配置,逐步优化
- 考虑服务拆分,如果业务增长,建议将关键服务分离到不同服务器
这种配置能在保证稳定性的同时,最大化利用有限资源。建议先以保守配置运行,根据实际监控数据进行微调。
CLOUD技术笔记