Wildfly 11中Mojarra 2.3.0视图恢复性能劣于2.2.15问题咨询
解决Mojarra 2.3.0视图恢复阶段性能骤降的思路
嘿,我之前在升级JSF版本时也踩过类似的性能坑,结合你给出的环境(Wildfly 11 + Mojarra 2.3.0)和性能对比数据,给你几个实用的排查方向:
1. 先查视图状态存储的差异
Mojarra 2.3对视图状态的处理逻辑做了不少调整,尤其是客户端状态存储的序列化部分。你可以先确认下web.xml里的javax.faces.STATE_SAVING_METHOD配置:
- 虽然2.2和2.3默认都是客户端存储,但2.3用了更严格的序列化机制(比如适配Java 8的新特性),这可能直接导致反序列化耗时翻倍。
- 可以临时把存储方式改成
server试试,如果耗时明显下降,那问题大概率出在客户端序列化的逻辑上。
2. 深挖视图恢复的具体耗时点
既然已经开了阶段调试,不如再细化日志和分析:
- 把Mojarra的日志级别调到DEBUG,重点看
com.sun.faces.renderkit.ServerSideStateHelper或者ClientSideStateHelper相关的输出,搞清楚是视图树重建、状态反序列化还是其他步骤拖慢了速度。 - 用Wildfly自带的性能工具(或者JVisualVM、JProfiler)做个采样分析,抓一下视图恢复阶段的线程栈,直接定位到耗时最长的方法,比瞎猜靠谱多了。
3. 升级到Mojarra 2.3的稳定补丁版
2.3.0是2.3系列的初始版本,存在不少已知的性能bug,比如视图状态处理里的冗余序列化操作,这些在后续的补丁版本(比如2.3.14之后)都被修复了。建议先把Mojarra升到最新的2.3稳定版,说不定问题直接就解决了。
4. 排查Wildfly和Mojarra的兼容性
Wildfly 11默认带的Mojarra版本不是2.3.0,手动替换后可能出现类加载冲突或者适配问题:
- 检查Wildfly的模块配置,确保已经移除了默认的Mojarra模块,正确引入了2.3.0的模块包。
- 看看有没有旧版本的JSF类残留,比如
jsf-api或者jsf-impl的老版本jar包混在项目里,这会导致视图恢复时出现不必要的类转换操作,拖慢速度。
附上你提供的性能对比截图:
Mojarra 2.3.0视图恢复耗时

Mojarra 2.2.15视图恢复耗时

内容的提问来源于stack exchange,提问作者Mahendiran
相关产品推荐
相关产品推荐

