对于2核4G的服务器,JVM内存分配需要在性能和稳定性之间找到平衡。以下是推荐的配置方案:
基础分配原则
- 总内存预留:操作系统和非堆内存需要约1-1.5GB
- 可用JVM内存:建议分配2-2.5GB给JVM
推荐配置方案
方案一:保守配置(推荐)
-Xms1024m -Xmx1536m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
- 堆内存:1-1.5GB
- 元空间:256-512MB
- 留出2GB给系统和其他进程
方案二:性能优化配置
-Xms1536m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
- 堆内存:1.5-2GB
- 适合内存密集型应用
- 需要监控系统内存使用
垃圾回收器选择
# JDK 8-11 (推荐)
-XX:+UseG1GC -XX:MaxGCPauseMillis=200
# JDK 11+ (可选)
-XX:+UseZGC # 低延迟场景
关键参数建议
# 基础参数
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-verbose:gc
# 线程栈大小(节省内存)
-Xss256k # 默认1MB,可大幅节省内存
监控和调优建议
-
启动后监控:
jstat -gc <pid> 5s # 查看GC情况 free -h # 查看系统内存 -
根据应用类型调整:
- Web应用:适当增加堆内存
- 批处理:可临时增加堆内存
- 微服务:保守配置更安全
-
动态调整:
- 初期用保守配置,观察GC日志
- 根据实际使用情况逐步调整上限
注意事项
- 避免设置
-Xmx超过3GB,可能导致系统不稳定 - 生产环境建议开启GC日志分析
- 定期检查内存泄漏(HeapDump分析)
- 考虑容器化部署时的内存限制
这种配置能在保证系统稳定的同时,为应用提供足够的内存空间。
云计算HECS