好的,我们的新版本在每个服务器上都有100%的CPU峰值,随机间隔。 长时间使网站完全没有响应 – 这将是在不同国家的人login网站等高峰时间。
我们已经看了perfmom,内存分析器,CLR分析器,sql分析器,红门ant分析器,在UAT尝试负载testing – 但甚至不能重现的问题。 这可能意味着只有数以千计的用户击中现场,导致它发生。
我们注意到的一种模式是,新的代码 – 破碎的版本 – 实际上使用的线程less得可怜。
我们也在使用国际奥委会的spring – 这是否有一个名声?
更糟糕的是,由于业务影响,我们无法进行部署,因此无法将问题缩小到我们添加的新function的子集。
我们真的被摧毁 – 有没有人有任何可能拯救我们几条命的战斗伤痕?
我build议做记忆转储,并与Sos在WinDdg中进行分析。 我解决了一些我们生产中的问题,如果没有WinDbg,我可能无法诊断。
苔丝·费尔南德斯(Tess Fernandez)有很棒的博客,你可以在这里学习如何分析内存转储。
这通常是由GC中长时间的大对象清理引起的( stackoverflow有这个问题,请参阅链接 )。 你是否将大量对象集合存储在caching或会话中?
GC攻击
我也build议你build立和configuration一个新的生产服务器来testing。 如果你有随机的疯狂,不知道为什么,也不能重现它,我会把手指指向硬件或configuration,而不是代码。
这是一个共享资源或物理服务器的虚拟服务器? 如果是前者,也许你可以看看这个服务器的专用资源。 祝你好运…
尝试使用cache server作为Apache Traffic Server (ATS)等前端。
虽然这不能解决问题,但可能有助于识别问题,因为您同时将来自后端的潜在有害负载(查看前端是否有问题),并使后端的热量减less,更容易看到什么是错的。
试图在没有数据的情况下猜测错误是毫无意义的。 是的,在计算器上或工程团队中的某个人可能会很幸运,但是这只是一个糟糕的工程,而且你不能计划每个猜测会花费多less时间,如果你甚至会发现问题。
100%的CPU是有点可疑的,因为它不太可能是I / O(提供数据库是另一个盒子,一个缓慢的数据库不应该导致Web服务器100%的CPU)。 你需要靠近家。