问题描述
当前系统在高并发下出现进程CPU占用很高的问题.即使没有处理业务.也占用很高.后定位出原因可能是HashMap在高并发条件下会死循环.有两个问题想请问下:1.出现死循环的话.是否还会回复原样?即HashMap死循环是因为元素的问题.但元素时刻都在改变.是否会出现自动死循环自动修复?2.现在想重现这个死循环条件.但重现很难.高并发访问下出现几率也比较低.请问有没有什么好办法可以提高重现几率. 问题补充:freish 写道
解决方案
1、高并发场景下HashMap可能会形成闭环,导致死循环。无法恢复,如果能自动恢复的话也不能称之为死循环了, 具体原因参考:http://www.iteye.com/topic/9621722、可以在HashMap里面打上断点调试已经形成死循环的环境,可以看见问题。
解决方案二:
话说,我记得为了提高性能,当年设计HashMap的时候本来就不是线程安全的吧?如果并发访问可能不光有死循环的问题吧?建议使用Collections工具类里面的方法以你的HashMap为蓝本,获得一个线程安全的Map去用...
解决方案三:
你是不是在当前map中put进去一个map,而put进去的map又包含当前map?看看死循环是不是因为这个问题。。
解决方案四:
http://hi.baidu.com/freish/blog/item/055cffd328f42fc6a8ec9a13.html移除相关元素应该可以让死循环结束调试,很容易重现的
时间: 2024-10-27 06:07:57