我们正在对我们的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
谢谢
发布于 2017-01-30 09:41:12
为了提高响应时间的一致性,您需要减少暂停的原因。这可能是GC,等待网络资源,使用锁导致糟糕的可伸缩性或一些暂停。
如果您的响应时间延迟的主要原因是GC暂停,那么减少GC暂停时间的数量和长度将改善响应时间。尤其是响应时间的一致性。
如果您试图减少典型的响应时间,但并不是在每个请求上都获得GC,那么您很可能希望对软件进行调优,以减少工作量、分配更少的对象、使用更低的时间复杂度算法、避免对每个请求进行网络访问和IO访问。
发布于 2017-01-26 21:39:13
您不应该编写面向对象的代码以减少对象的生命周期,您只需编写设计良好的代码。尽管如此,我建议在可能的情况下使用Fly权重模式。
当您在GC暂停期间有请求时,缩短暂停时间将大大缩短响应时间。( GC暂停将增加通常的响应时间,因为应用程序将停止直到GC完成)
您可以专注于调整JVM,更精确地设置堆大小选项(检查Java选项)。GC及其选项可能会根据JDK版本而改变。
https://stackoverflow.com/questions/41883146
复制相似问题