2017-01-26 48 views
0

我们是负载测试我们的网络服务和应用程序的建议之一是试图降低成本,以提高响应时间暂停时间。JVM /代码调整,以减少JVM暂停时间

从我的研究,以减少暂停时间的最佳方式是对象生存期减少,但信息的话题相当稀少。所以我想知道两件事:

  1. 这是正确的假设减少停工时间会减少响应时间?
  2. 是否有另一种方式,以减少比正确并迅速物体处置等暂停时间。

我们目前的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

感谢

+2

1.测量它。使用分析器。 2.调整GC。 –

+0

@ElliottFrisch是的,我们都这么做。我感兴趣的是,是否有另一种方法来减少暂停时间,并且我们的假设是正确的,即减少暂停时间会缩短响应时间 – bc004346

+2

您是否确实有暂停时间问题? – EJP

回答

2

为了提高响应时间的一致性,你需要减少停顿的原因。这可能是GC,等待网络资源,使用锁造成可伸缩性差或暂停。

如果您的响应时间延迟的主要原因是GC暂停,那么减少GC暂停时间的数量和长度将缩短响应时间。 esp响应时间一致性。

如果您试图减少典型响应时间,但是您没有在每个请求中获得GC,那么很可能您希望调整软件以减少工作量,分配更少的对象,使用更低的时间复杂度算法,避免网络和IO访问每个请求。

3

你不应该写为导向,以减少对象的生命周期代码,你只需要编写精心设计的代码。也就是说,我建议尽可能使用Flyweight模式。

减少暂停时间将缩短响应时间大大当你有一个完整的GC暂停期间的请求。 (GC暂停将增加通常的响应时间,因为应用程序将停止,直到GC结束)

您可以专注于调整JVM,更精确地设置堆大小选项(请检查Java HotSpot VM Options)。 GC及其选项可能会根据您的JDK版本进行更改。