JVM/代码调整以减少 JVM 挂起时间
JVM / code tuning to reduce JVM suspension time
我们正在对 Web 服务应用程序进行负载测试,其中一项建议是尝试减少暂停时间以缩短响应时间。
根据我的研究,减少挂起时间的最佳方法是最小化对象的生命周期,但关于该主题的信息非常稀少。所以我想知道两件事:
- 减少暂停时间会减少响应时间的假设是否正确?
- 除了正确快速地处理对象之外,还有其他方法可以减少暂停时间吗?
我们当前的相关 JVM 选项是:
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:NewRatio=2
-XX:+UseTLAB
-XX:SurvivorRatio=2
-Dsun.reflect.noInflation=false
-Dsun.reflect.inflationThreshold=21474836
-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true
-XX:MaxMetaspaceSize=256m
-Xms3072m
-Xmx3072m
-XX:+CMSClassUnloadingEnabled
谢谢
您不应该编写旨在缩短对象生命周期的代码,您只需要编写设计良好的代码即可。也就是说,我建议尽可能使用享元模式。
当您在完全 GC 暂停期间有请求时,减少挂起时间将大大减少响应时间。 (GC 暂停会增加通常的响应时间,因为应用程序将停止直到 GC 完成)
您可以专注于调整 JVM,更精确地设置堆大小选项(检查 Java HotSpot VM Options)。 GC 及其选项可能会根据您的 JDK 版本而变化。
要提高响应时间的一致性,您需要减少暂停的原因。这可能是 GC,等待网络资源,使用锁导致可伸缩性差或多次暂停。
如果您的响应时间延迟的主要原因是 GC 暂停,那么减少 GC 暂停时间的次数和长度将改善响应时间。 esp 响应时间一致性。
如果您正在尝试减少典型的响应时间,但您并没有在每个请求上都获得 GC,您很可能希望调整您的软件以减少工作量、分配较少的对象、使用较低时间复杂度的算法,避免在每次请求时访问网络和 IO。
我们正在对 Web 服务应用程序进行负载测试,其中一项建议是尝试减少暂停时间以缩短响应时间。
根据我的研究,减少挂起时间的最佳方法是最小化对象的生命周期,但关于该主题的信息非常稀少。所以我想知道两件事:
- 减少暂停时间会减少响应时间的假设是否正确?
- 除了正确快速地处理对象之外,还有其他方法可以减少暂停时间吗?
我们当前的相关 JVM 选项是:
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:NewRatio=2
-XX:+UseTLAB
-XX:SurvivorRatio=2
-Dsun.reflect.noInflation=false
-Dsun.reflect.inflationThreshold=21474836
-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true
-XX:MaxMetaspaceSize=256m
-Xms3072m
-Xmx3072m
-XX:+CMSClassUnloadingEnabled
谢谢
您不应该编写旨在缩短对象生命周期的代码,您只需要编写设计良好的代码即可。也就是说,我建议尽可能使用享元模式。
当您在完全 GC 暂停期间有请求时,减少挂起时间将大大减少响应时间。 (GC 暂停会增加通常的响应时间,因为应用程序将停止直到 GC 完成)
您可以专注于调整 JVM,更精确地设置堆大小选项(检查 Java HotSpot VM Options)。 GC 及其选项可能会根据您的 JDK 版本而变化。
要提高响应时间的一致性,您需要减少暂停的原因。这可能是 GC,等待网络资源,使用锁导致可伸缩性差或多次暂停。
如果您的响应时间延迟的主要原因是 GC 暂停,那么减少 GC 暂停时间的次数和长度将改善响应时间。 esp 响应时间一致性。
如果您正在尝试减少典型的响应时间,但您并没有在每个请求上都获得 GC,您很可能希望调整您的软件以减少工作量、分配较少的对象、使用较低时间复杂度的算法,避免在每次请求时访问网络和 IO。