Jslfl【软件开发技术笔记】

Java运行参数建议

java运行参数说明:

  • -Xms10240m:设置Java堆的初始大小(Start Heap Size)为10240MB(10GB)。
  • -Xmx10240m:设置Java堆的最大大小(Maximum Heap Size)为10240MB(10GB)。
  • -Xmn1024m:设置新生代(Young Generation)的大小为1024MB(1GB)。新生代是堆的一部分,用于存放新创建的对象。
  • -XX:MetaspaceSize=256m:设置元空间的初始大小(Initial Metaspace Size)为256MB。元空间是用于存储类的元数据的区域,取代了Java 7及之前的永久代。
  • -XX:MaxMetaspaceSize=512m:设置元空间的最大大小(Maximum Metaspace Size)为512MB。
  • -XX:SurvivorRatio=10:设置新生代中Eden区和Survivor区(存活区)的比例。这个比例决定了Survivor区的大小,SurvivorRatio=10意味着Eden区是Survivor区的10倍大。
  • -XX:MaxTenuringThreshold=15:设置在新生代中对象存活多少次垃圾收集后才被移动到老年代(Old Generation)。默认值是15,表示对象在新生代中存活15次GC后晋升到老年代。
  • -XX:NewRatio=2:设置新生代和老年代的比例。NewRatio=2意味着老年代是新生代的2倍大。
  • -XX:+DisableExplicitGC:禁止应用程序显式调用垃圾收集。这可以防止应用程序代码中的System.gc()调用触发垃圾收集。
  • -XX:+TraceClassPaths:在类加载时打印出类的路径。这通常用于调试和诊断类加载问题。

假如服务器配置Windows Server 2019, CPU 8核 2.1GHz, 内存 64GB,只运行Spring Boot程序,以下是一些优化建议:

  • 堆大小:由于您的服务器有64GB内存,您可以为Java堆分配更多的内存。建议将初始堆大小和最大堆大小设置为相同,以避免堆大小在运行时动态调整带来的性能开销。例如,您可以将-Xms和-Xmx都设置为20GB(-Xms20480m -Xmx20480m)。
  • 新生代大小:新生代大小通常设置为堆大小的1/4到1/2。基于20GB的堆大小,您可以将新生代大小设置为5GB(-Xmn5120m)。
  • 元空间大小:由于元空间用于存储类的元数据,并且您的应用使用了Beetl视图引擎,可能需要一些额外的元空间。但是,由于元空间的大小通常是动态增长的,您可以设置较小的初始大小和较大的最大大小。例如,-XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=2g。
  • 垃圾收集器:您没有指定垃圾收集器,但根据您的应用场景(单应用、大内存),您可能希望使用并行GC(Parallel GC)或G1 GC。如果选择G1 GC,您需要添加-XX:+UseG1GC。
  • 其他参数:-XX:SurvivorRatio、-XX:MaxTenuringThreshold和-XX:NewRatio可以根据您的应用行为进行微调。如果您发现新生代或老年代的GC频繁或内存使用不均匀,可以考虑调整这些参数。
  • 禁用显式GC:保留-XX:+DisableExplicitGC以避免应用程序代码中的System.gc()调用影响性能。
  • 类路径跟踪:如果您不需要调试类加载问题,可以移除-XX:+TraceClassPaths以减少日志输出和性能开销。

另外:
-XX:PermSize=1024m:设置永久代(Permanent Generation)的初始大小为1024MB(1GB)。注意,在Java 8中,永久代已经被元空间(Metaspace)取代,所以这个参数在Java 8中实际上是不起作用的。
-XX:MaxPermSize=2048m:设置永久代的最大大小为2048MB(2GB)。同样,在Java 8中,这个参数也是不起作用的。

示例:

1
-Xms20480m -Xmx20480m -Xmn5120m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=2g -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=15 -XX:NewRatio=3 -XX:+DisableExplicitGC -XX:+UseG1GC(可选)

根据实际应用性能监控和调优需求进行微调。

Comments are currently closed.