2核4GB内存的服务器,使用G1的jvm启动参数配置

218 阅读2分钟

对于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文件。

调优和监控

  1. 监控系统内存使用情况:在实际运行中,通过操作系统的监控工具(如 tophtop)监控内存使用情况,确保操作系统和其他进程有足够的内存。
  2. 调整参数:根据应用的实际运行情况和内存使用情况,进一步调整堆内存大小和其他GC参数。

通过这样的配置,可以在保证应用性能的同时,确保操作系统有足够的内存来运行其他必要的进程。