我们经常遇到ColdFusion 8的性能问题。在一个由3台前端服务器组成的群中,有一台变得不可用:由于某种原因,CPU 100% (在一个核心上)并且永远不会停机。检查Windows任务管理器时,jrun进程似乎正在使用CPU上的100%。
有没有人知道如何开始解决这个问题?如何首先找出是什么导致了峰值。我对.net更感兴趣,当涉及到java/jrun故障排除时,我感到有点迷茫。
我们当前的配置是: CF 8在Windows2008Oracle64位R2上运行,带有Oracle11g客户端,具有4 4GB内存和双核CPU。
发布于 2012-06-12 13:20:05
看一下这个问题
Strange JRUN issue. JRUN eating up 50% of memory for every two hours
我每隔一段时间就要面对50%的CPU使用率,这是由于存储在注册表中的客户端变量造成的。即使您没有使用客户端变量,但它在您不知情的情况下存储在注册表中,因为设置已添加到Application.cfc/.cfm文件中。
此外,尝试找出哪个线程导致了问题,并获得它的stracktrace将帮助您更多地调查这一点。在上面的链接答案中,我发布了我的博客文章的链接,并解释了如何使用visualvm和jconsole来获取恶意线程的堆栈跟踪。
希望这能有所帮助。
发布于 2012-06-12 05:07:32
你在使用客户端变量吗?三次检查您的代码,如果您是,请确保它们不是在注册表中设置,而是在数据库中设置。
发布于 2012-06-12 10:50:22
我们需要更多的信息。当你说4G的RAM时,你指的是4G的堆,对吗?或者您实际上运行的是4Gig 64位操作系统?如果是这样的话,你应该考虑多一点。CF 64位使用大约80%的RAM来达到相同的效果-换句话说,2gig 64位堆大致相当于1GG 32位堆。
话虽如此,我不会接受我们中任何没有实际查看过您的系统的人对您的堆大小的全面建议。调优JVM需要体验它的真实性-但它也需要系统的实际知识,预期的流量等。
我的另一条评论是,您绝对应该检查客户端变量。1个核心被占用的事实让我认为清除任务是挂起的(最有可能是由于注册表中的客户端变量,正如Paul所说的。或者可能是计划的任务(cf监视器或聚变反应器可以帮助梳理出正在运行的(多个)请求)。
还有另一个堆栈溢出线程,还有一些额外的帮助。忽略所有堆栈跟踪内容,看看具体的“要检查的区域”。建立你要尝试的东西列表,然后根据实现的简易性(或可能的原因)进行排序,并开始尝试排除列表中的可能性。
https://stackoverflow.com/questions/10984984
复制相似问题