【发布时间】:2018-06-11 04:19:47
【问题描述】:
我正在协助开发团队解决一个问题。
- 在 IBM WebSphere 上托管了一个 Web 应用程序。
- 出于业务原因降低成本的目的,决定将应用服务器处理器的使用数量从 2 个减少到 1 个。
- 在访问门户的用户数量没有任何变化的情况下,CPU 峰值事件从每年大约 6 起增加到每周至少 1 起。
- 一项调查证实,CPU 峰值和应用程序和/或操作系统崩溃的原因是在峰值点访问它的用户数量增加。
这显然是因为 CPU 资源不足。
我们需要用一个实用的解决方案来解决这个问题。将 CPU 增加到 2 的请求已被拒绝,而是被要求提供技术修复。
采取的步骤:
- 添加了额外的 RAM
- 堆内存增加
- 根据 PMR 建议更改了 JVM 设置
- 垃圾收集频率降低
- 性能微调已完成
- 优化的源代码
即使经过上述步骤,当用户数量增加到某个阈值以上时,CPU 仍然会出现峰值,应用服务器/操作系统会崩溃。
通过暂时增加到 2 个 CPU 进行短暂测试,然后 CPU 峰值和应用程序崩溃立即大幅降低到商定的可接受水平。
如何解决这个问题?
是否可以采取任何技术措施来解决这个问题,例如 CPU 使用计数从 2 减少到 1,但应用程序仍然可以正常运行而不会出现峰值或崩溃?
我知道这个问题非常主观,需要研究应用程序源代码逻辑。假设代码已经在可能的范围内进行了微调,需要您对如何进行的建议/建议。
我会尽力提供尽可能多的额外信息。
谢谢。
问候
【问题讨论】:
-
首先,您需要找到应用程序中的哪个组件导致 CPU 出现峰值,一旦找到它,您就必须按照您提到的那样分析代码,看看是否可以进一步优化以帮助防止 CPU 峰值。您应该首先使用 WAS 性能查看器来帮助定位导致峰值的组件。
-
@Carlos:感谢您的建议。我们已经使用过 Tivoli Performance Viewer。将重新审视它。
标签: java crash cpu-usage websphere-portal