WAS8.5.5.12部署WKL7.1后服务不可用及同步异常问题问询
从你描述的场景和日志来看,核心问题是Worklight的运行时同步进程卡住,导致管理API调用被阻塞,进而引发MSite的服务不可用提示。下面我会一步步拆解问题原因,并给出针对性的解决步骤:
一、先明确异常根源
日志里的@@@ Runtime synchronization in progress. Cannot return application runtime information是关键信号——Worklight的分布式事务同步机制(Two-Phase Commit相关)正在后台执行,但长时间无法完成,导致所有依赖运行时状态的管理请求被拒。而大量的FWLSE2014I工件下载日志,说明同步过程中正在批量拉取OTU仓库的资源,这很可能是卡住的直接诱因。
二、分步排查与解决
1. 确认同步是否真的陷入死循环
- 先跟踪
SystemOut.log中的下载日志:如果同一批工件反复出现下载记录,或者某个工件的下载长时间没有完成,说明同步流程已经卡住,要么是网络不通、要么是OTU仓库有问题,要么是WAS资源不够。 - 检查WAS线程池状态:登录WAS控制台,进入
Servers > Server Types > WebSphere application servers > [你的服务器] > Thread pools,查看Default和Worklight相关线程池的活动线程数和队列长度。如果线程池满了,同步任务根本无法推进。
2. 强制终止异常同步进程
如果确认同步卡住,先手动终止它:
- 用WAS的JMX控制台(或者wsadmin脚本)找到Worklight的
ProjectManagementMXBean,执行cancelRuntimeSynchronization方法,强制结束当前同步任务。 - 如果JMX操作麻烦,直接重启Worklight运行时应用:在WAS控制台的
Applications > Application Types > WebSphere enterprise applications里找到对应Worklight应用,先停再启。注意:这个操作会暂时中断服务,建议选维护窗口执行。
3. 检查OTU仓库的可用性
日志里的下载地址https://<>/wladmin/otu/1.0/...是Worklight的Over-The-Update仓库,必须确保它正常可用:
- 在WAS所在服务器上用curl/wget测试这个URL,看能否正常下载到工件文件。
- 如果是内部私有仓库,检查仓库的磁盘空间是否充足,文件权限是否正确(WAS运行用户要有读取权限)。
4. 调整Worklight同步配置参数
修改Worklight的worklight.properties配置文件,优化同步行为:
- 增加同步超时:设置
worklight.runtime.sync.timeout=300(单位秒,默认可能偏短,根据实际网络情况调整) - 限制并发下载数:设置
worklight.runtime.sync.download.concurrent=5(减少同时下载的工件数量,避免占满WAS资源)
修改后重启Worklight应用生效。
5. 扩容WAS的JVM资源
同步大量工件会消耗不少内存和CPU,检查WAS的JVM配置:
- 进入WAS控制台
Servers > Server Types > WebSphere application servers > [你的服务器] > Java and Process Management > Process definition > Java Virtual Machine,调大堆内存(比如初始堆1G,最大堆2G,根据服务器硬件配置调整),避免内存不足导致同步卡顿。
6. 验证那个10KB工件的合法性
虽然体积小,但也可能是工件本身有问题触发了异常同步:
- 重新打包工件,检查适配器的XML配置、wlapp文件的完整性,确保没有格式错误。
- 手动上传这个工件到Worklight控制台,看能否正常部署,排除工件本身的问题。
附你提供的同步异常日志
FFDC Exception:javax.management.RuntimeMBeanException SourceId:com.ibm.ws.management.AdminServiceImpl.invoke ProbeId:693 Reporter:com.ibm.ws.management.AdminServiceImpl$1@579b0a4c
javax.management.RuntimeMBeanException: java.lang.RuntimeException: @@@ Runtime synchronization in progress. Cannot return application runtime information
Caused by: java.lang.RuntimeException: @@@ Runtime synchronization in progress. Cannot return application runtime information
at com.worklight.twopc.runtime.RuntimeTransactionHandler.ensureSyncStatusIsOk(RuntimeTransactionHandler.java:512)
at com.worklight.mgmt.impl.ApplicationManagementImpl.getApplicationRuntimeInformation(ApplicationManagementImpl.java:170)
at com.worklight.core.jmx.ProjectManagementMXBeanImpl.getApplicationRuntimeInformation(ProjectManagementMXBeanImpl.java:1395)FFDC Exception:javax.management.RuntimeMBeanException SourceId:com.ibm.ws.management.AdminServiceImpl.invoke ProbeId:422 Reporter:com.ibm.ws.management.AdminServiceImpl@75e1a753
javax.management.RuntimeMBeanException: java.lang.RuntimeException: @@@ Runtime synchronization in progress. Cannot get devices summary from runtime
内容的提问来源于stack exchange,提问作者bala_1980

