websphere - 如何解决 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
但不幸的是没有成功
有人对如何确定根本原因有任何建议吗?
提前致谢
解决方案
首先,如果您安装了最新的修订包,有时您的问题就会消失。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。如果您手头已经有了线程转储,那么您的案例应该会更快。
请记住,在创建线程转储时不要运行任何日志记录/跟踪非常重要。否则,您只会了解到日志记录和跟踪是一个性能问题。
推荐阅读
- angular - 我正在使用 *ngFor 来迭代卡片布局中的元素。我想随机改变他们的背景颜色有什么办法吗?
- mysql - 查询以从一个表中生成不同设备的故障日志,在该表中设备输入其状态并带有时间戳
- python - Heroku 应用程序产生一个应用程序错误(“关键工作者超时”),而 celery 后台任务产生一个成功的结果,我做错了什么?
- swift - 打开和保存在非常简单的 Swift 4 基于文档的应用程序中不起作用
- php - 在 PHP 中使用不同参数多次调用函数的更短语法
- ruby - HTTP::persistent 和代理?
- c# - do-while 循环是如何编译的?
- javascript - 使用 javascript 打开 chrome-extension:// url
- security - 保护 SSR Nuxt.js(或纯 Vue.js)中仅授权路由的源代码
- ibm-midrange - 打包数据自由形式 RPG