Websphere系统hang原因调查

来源:互联网 发布:淘宝信用卡代付套现 编辑:程序博客网 时间:2024/05/01 03:19

某个系统使用openjpa 作为持久层,对一些native query,openjpa返回的result size返回的是int最大值2147483647,让人很受伤。旧的代码为了得到实际result长度,通常在持久层对result list做一次遍历操作,把所有对象放到新的ArrayList中返回。最近一次功能扩展,对返回的result list直接使用toArray放到新的list当中返回,本地测试没有问题,去到服务器Websphere上面就挂了,系统卡死在调用新持久层函数的地方,不知道为什么。我先去系统监控中查看了CPU,内存,网络使用情况,发现内核使用CPU的时间明显变长
这里写图片描述
接下来要求系统环境维护人员帮忙对出问题的JVM进行了core dump和heap dump,用ibm thread analyzer hca456.jar对core dump进行分析,发现系统停在了ArrayList的初始化地方
这里写图片描述
很明显,系统是死在了toArray的实现上了,对Integer最大长度的Array在进行拷贝操作,系统CPU使用时长增加。
在oracle的jdk中,toArray的拷贝长度取决于内部array的length,所以虽然result list size返回的是Integer的最大值,但是不影响toArray的实现,IBM的JDK实现不一样,结果就中招了。

0 0
原创粉丝点击