首页 > 解决方案 > 如何解决 websphere 9.0.0.2 慢的问题

问题描述

嗨,我正在使用 websphere 9.0.0.2 开展一个项目,但部署和应用程序更新时间有问题。我的应用程序大约需要 15-20 分钟才能部署。

我在站点https://www.ibm.com/developerworks/community/forums/html/topic?id=92094a07-b456-4f6f-89cd-7b6e59a0b1a3执行通知, 在 JVM 中设置这些属性

com.ibm.ws.cdi.enableImplicitBeanArchives=false 和

太 com.ibm.ws.cdi.enableImplicitBeanArchives=false com.ibm.ws.amm.scan.context.filter.archives=fastjson-1.1.37.jar, flexjson-2.1.jar, guava-18.0.jar, mvel2- 2.2.0.Final.jar

但不幸的是没有成功

有人对如何确定根本原因有任何建议吗?

提前致谢

标签: websphere

解决方案


首先,如果您安装了最新的修订包,有时您的问题就会消失。V9.0.0.2 已经很老了。在早期的 9.0 版本中存在一些性能问题。当前的修订包是 9.0.5.1。

要调试性能问题,请关闭所有跟踪并定期收集 java 线程转储。我喜欢看至少 10 个,但越多越好。只需将您关心的时间间隔至少除以 10。对于需要 15 分钟的事情,至少每 1.5 分钟(90 秒)生成一次线程转储。

如果使用 Linux,您可以使用 watch 命令。例如,要每 30 秒创建一次转储:

watch -n 30 kill -3 <PROCESS_NUMBER_OF_APP_SERVER>

此链接有一个用于 Linux 的详细脚本,其中包含更多选项。

如果使用 Windows,则可以使用 wsadmin 和 Jython 脚本自动进行线程转储。例如,将以下内容放入名为 ThirtyThreadDumps.py 的文件中(将“server1”替换为正确的服务器名称):

jvm = AdminControl.completeObjectName('type=JVM,process=server1,*')
for x in range(30):
AdminControl.invoke(jvm, 'dumpThreads')
Sleep(30)

使用 wsadmin 调用 jython 脚本:

wsadmin -lang jython -f  ThirtyThreadDumps.py

在线程转储中,查找出现在多个转储中的堆栈。我发现部署期间的相关 WebSphere 堆栈至少有 15 个调用深度,而且通常更多。所以我通常会滚动转储的堆栈跟踪部分,直到视觉上弹出一个深堆栈。然后我在堆栈中选择一行或两行并搜索(grep 或 findstr 取决于平台)。这将很快告诉您堆栈是否出现在多个线程转储中。

最终,这将向您展示哪些 WebSphere 代码是罪魁祸首,这可能会或可能不会帮助您,这取决于 WebSphere 类和方法的名称在堆栈中的好坏程度。

下一步是致电 IBM。如果您手头已经有了线程转储,那么您的案例应该会更快。

请记住,在创建线程转储时不要运行任何日志记录/跟踪非常重要。否则,您只会了解到日志记录和跟踪是一个性能问题。


推荐阅读