上周有个应用出现了OOM,但现象还挺有意思的,非常与众不同,分享下。 当时出问题的时候现象为应用的日志里打了这样的日志: allocating large array... array_size[1073741848 bytes] array_length[1073741826 elememts] 这个在之前阿里版JDK里有说过是阿里版JDK的增强功能,当运行时有地方出现创建一个巨大的数组(例如>700MB)时,会直接打印出这样的日志,并同时会输出相应的线程堆栈信息。 如果不是阿里版的JDK,在这种情况下看到的现象就会是OOM的异常信息,那样排查会稍微麻烦一些。 线程堆栈信息如下: 从这个线程堆栈信息来看,是在序列化一个HashMap时写了一个巨大的数组。 逻辑上来说,造成这样的现象,应该是HashMap本身非常大,因此就去查看了下当时dump下来的内存信息,看看当时在序列化的这个HashMap的状况。 在MAT中查看,发现这个HashMap中的一个桶里的链表出现了头尾是同一个对象的现象,按照经验,出现这种现象的原因是在并发场景中使用了HashMap进行读写,并且没做线程安全的保护。 和业务方确认后确定确实这个HashMap被用在了并发场景,并且没做保护,而这个HashMap又是要作为结果对象返回给调用端的,所以导致在序列化这个HashMap的时候出现了HashMap.writeObject一直结束不了,并且会积累出很大的数组,从而引发了上面的异常信息。 |
行业聚焦 面试交流 职位推荐 开发视频 技术交流 腾讯微博 新浪微博
友情链接:课课家教育 阿里云 鲜果 W3Cfuns前端网 中国企业家 环球企业家 投资界 传媒梦工场 MSN中文网 Android开发者社区 cnbeta 投资中国网 又拍云存储 美通说传播 IT茶馆 网商在线 商业评论网 TechOrange IT时代周刊 3W创新传媒 开源中国社区 二维工坊 Iconfans 推酷 智能电视网 FreeBuf黑客与极客 财经网 DoNews 凤凰财经 新财富 eoe移动开发者社区 i黑马 网易科技 新浪科技 搜狐IT 创业家 创业邦 腾讯财经 福布斯中文网 天下网商 TechWeb 雷锋网 新浪创业 和讯科技 品途O2O 极客公园 艾瑞网 抽屉新热榜 卖家网 人民网通信频道 拉勾网 创新派 简单云主机
手机版|黑名单|守望者 成才网 在线教育 linux 高级程序设计 C/C++ 大数据
( 蜀ICP备14029946号 )
成都守望者科技有限公司 © 2013-2016 All Rights Reserved