对于2核4GB内存的服务器,合理分配Java应用的堆内存和配置垃圾回收器参数非常重要,以确保系统有足够的资源用于操作系统和其他进程。以下是适用于这种配置的G1GC参数设置示例:
调整后的G1GC参数设置
java -Xms2g -Xmx2g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:InitiatingHeapOccupancyPercent=45 \
-XX:ConcGCThreads=2 \
-XX:ParallelGCThreads=2 \
-XX:G1NewSizePercent=30 \
-XX:G1MaxNewSizePercent=60 \
-XX:G1MixedGCLiveThresholdPercent=85 \
-XX:G1HeapRegionSize=8m \
-XX:SurvivorRatio=8 \
-XX:MetaspaceSize=64m \
-XX:MaxMetaspaceSize=128m \
-XX:+ParallelRefProcEnabled \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-XX:+PrintGCTimeStamps \
-XX:+PrintGCApplicationStoppedTime \
-XX:+PrintGCApplicationConcurrentTime \
-Xloggc:gc.log \
-jar your-application.jar
参数说明
-Xms2g和-Xmx2g:设置JVM堆内存的初始大小和最大大小为2GB,这样可以为操作系统和其他进程预留约2GB的内存。-XX:+UseG1GC:启用G1垃圾回收器。-XX:MaxGCPauseMillis=200:设置最大GC停顿时间目标为200毫秒(根据延迟需求调整)。-XX:InitiatingHeapOccupancyPercent=45:在堆使用率达到45%时启动并发标记周期。-XX:ConcGCThreads=2:设置并发GC线程数为2(与CPU核心数匹配)。-XX:ParallelGCThreads=2:设置并行GC线程数为2(与CPU核心数匹配)。-XX:G1NewSizePercent=30:设置年轻代最小空间占整个堆的30%。-XX:G1MaxNewSizePercent=60:设置年轻代最大空间占整个堆的60%。-XX:G1MixedGCLiveThresholdPercent=85:设置在混合GC周期中,确定是否回收的存活对象阈值为85%。-XX:G1HeapRegionSize=8m:设置G1堆区域大小为8MB(根据堆大小和应用需求调整)。-XX:SurvivorRatio=8:设置新生代Eden区与Survivor区的大小比例为8。-XX:MetaspaceSize=64m:设置Metaspace初始大小为64MB。-XX:MaxMetaspaceSize=128m:设置Metaspace最大大小为128MB(根据应用需求调整)。-XX:+ParallelRefProcEnabled:启用并行引用处理,以减少GC停顿时间。-XX:+PrintGCDetails:打印GC详细信息。-XX:+PrintGCDateStamps:在GC日志中包含日期戳。-XX:+PrintGCTimeStamps:在GC日志中包含时间戳。-XX:+PrintGCApplicationStoppedTime:打印应用程序由于GC而停止的时间。-XX:+PrintGCApplicationConcurrentTime:打印应用程序并发运行的时间。-Xloggc:gc.log:将GC日志输出到gc.log文件。
调优和监控
- 监控系统内存使用情况:在实际运行中,通过操作系统的监控工具(如
top或htop)监控内存使用情况,确保操作系统和其他进程有足够的内存。 - 调整参数:根据应用的实际运行情况和内存使用情况,进一步调整堆内存大小和其他GC参数。
通过这样的配置,可以在保证应用性能的同时,确保操作系统有足够的内存来运行其他必要的进程。