Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance jboss 5.0.1GA中一小时后的性能下降和奇怪的GC行为_Performance_Memory_Jboss_Garbage Collection - Fatal编程技术网

Performance jboss 5.0.1GA中一小时后的性能下降和奇怪的GC行为

Performance jboss 5.0.1GA中一小时后的性能下降和奇怪的GC行为,performance,memory,jboss,garbage-collection,Performance,Memory,Jboss,Garbage Collection,我们将软件从jboss 4.0.5GA升级到5.0.1GA,并注意到在大约一个小时后(在某些情况下是90分钟),性能会急剧下降 同时,垃圾收集器日志显示少量垃圾收集时间从0.01秒跳到1.5秒,每次清除堆的数量从之前的约400 MB减少到之后的约300 MB。(参见GC查看器图1) 我们认为,这两种症状的根本原因是相同的 jvm设置包括: -server -Xms2048m -Xmx2048m -XX:NewSize=384m -XX:MaxNewSize=384m -XX:Survivor

我们将软件从jboss 4.0.5GA升级到5.0.1GA,并注意到在大约一个小时后(在某些情况下是90分钟),性能会急剧下降

同时,垃圾收集器日志显示少量垃圾收集时间从0.01秒跳到1.5秒,每次清除堆的数量从之前的约400 MB减少到之后的约300 MB。(参见GC查看器图1)

我们认为,这两种症状的根本原因是相同的

jvm设置包括:

-server -Xms2048m -Xmx2048m -XX:NewSize=384m -XX:MaxNewSize=384m 
-XX:SurvivorRatio=4 -XX:MinHeapFreeRatio=11 -XX:PermSize=80m -verbose:gc
-XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+DisableExplicitGC 
-Djava.awt.headless=TRUE -DUseSunHttpHandler=TRUE 
-Dsun.net.client.defaultConnectTimeout=25000 
-Dsun.net.client.defaultReadTimeout=50000 -Dfile.encoding=UTF-8 
-Dvzzv.log.dir=${ercorebatch.log.dir} -Xloggc:${ercorebatch.log.dir}/gc.log  
-Duser.language=it -Duser.region=IT -Duser.country=IT -DVFjavaWL=er.core.it
生产环境是T5220或T2000硬件,带有32位SPARC,运行Solaris 10虚拟机。jboss 5.0.1.GA,java 1.6.0_17

我们建立了一个由两个相同的盒子组成的测试环境,运行相同的软件,但一个使用jboss 4.0.5GA,另一个使用jboss 5.0.1.GA。它们是在HP ProLiant DL560 Gen8上运行的VMWare虚拟机,具有4 x 2.2GHz Intel Xeon CPU E5-4620和64GB RAM。来宾虚拟机是4个vCPU、4096MB RAM、CentOS 6.4

我们发现我们可以很容易地在我们的环境中重现这个问题。在4.0.5上运行的box运行良好,但在jboss 5.0.1GA上,我们看到了同样奇怪的GC行为。性能无法在我们的环境中轻松测试,因为我们没有与生产相同的负载量

我们不认为这是内存泄漏,因为在每次主要GC之后,使用的堆大小都会恢复到相同的大小:

通过分析启示录前后的堆转储,我们发现以下对象的数量不同:

org.jboss.virtual.plugins.context.file.FileSystemContext

在第一个小时内,大约有8个,在天启袭击之后,我们看到100到800个

除此之外,堆转储看起来非常相似,顶部的对象不是java就是jboss对象(即没有应用程序类)

在我们的测试环境中设置
-Djboss.vfs.forceVfsJar=true
修复了问题(即奇怪的GC行为消失),但当应用于生产时,奇怪的GC模式和性能问题仍然存在,尽管GC时间没有增加太多(增加到0.3秒而不是1.5秒)

在我们的测试环境中,我们在jboss 5.1.0中部署了相同的软件,发现了与5.0.1相同的行为

因此,现在的结论是,JBoss5.x在60/90分钟左右发生了一些事情,这对垃圾收集和性能都有影响

更新:

我们尝试将web服务堆栈升级到jbossws-native-3.3.1,这解决了测试环境中的问题。但是,当部署到下一个测试环境(更接近生产环境)时,问题仍然存在(尽管有所减少)

更新:

我们通过将jboss.vfs.cache.TimedPolicyCaching.lifetime设置为相当于多年的一个非常大的数字来解决这个问题

这感觉像是jboss中一个bug的解决方法。默认的缓存生存期是30分钟(请参见org.jboss.util.TimedCachePolicy),我们在60分钟或90分钟后看到了问题

VFS缓存实现是组合的VFSCACHE,我认为它在下面使用了TimedVFSCache


似乎更好的解决方法是将缓存实现更改为永久缓存,但我们在这个问题上浪费了足够多的时间,我们的解决方法将不得不这样做。

仅查看Gc图就很难确定这个问题的根本原因。那么,当这种情况发生时,堆栈是什么样子的呢?有过动的线吗?是否有任何令人讨厌的线程创建了一大堆对象,迫使垃圾收集器拼命工作以摆脱它们?我认为必须进行更多的分析,以确定问题的根本原因。

根据您的问题,我假设您已经了解了影响5.0.1和5.1.0GA的因素?有什么原因不能使用5.1.2吗?看看线程转储“后启示录”会很有趣,看看是否还有另一个导致prod减速的原因。可能有两个最初的原因。嗨,迈克,是的,我们看到了这个bug,这就是为什么我们尝试了vfs jvm选项,但它不起作用。我相信5.1.2不是免费的商业用途,这意味着我们不能像使用5.1.0那样使用它