一个关于HashMap高并发下死循环的问题.

问题描述

当前系统在高并发下出现进程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

一个关于HashMap高并发下死循环的问题.的相关文章

asp.net 高并发下 一个web页面同时调用2个方法,这2个方法都是查询数据库,查询的结果乱掉了

问题描述 asp.net 高并发下 一个web页面同时调用2个方法,这2个方法都是查询数据库,查询的结果乱掉了 问题描述:这个问题只有在高并发情况下才会出现. 具体如下: 后台.cs有2个方法,这2个方法在前端.aspx通过流的方式调用(<%%>),然而DaoJiShi()这个方法获得的是gd()方法的数据,gd()获得的是DaoJiShi()方法的数据,那么在相应的方法里遍历DaTable的时候就会报列不存的情况. 这个问题让我很困惑,这样写已经很多项目了,都没这个问题.这个项目有时候会高并

并发读写缓存实现机制:高并发下数据写入与过期

一般来说并发的读取和写入是一对矛盾体,而缓存的过期移除和持久化则是另一对矛盾体.这一节,我们着重来了解下高并发情况下缓存的写入.过期控制及周边相关功能.系列文章目录:并发读写缓存实现机制(零):缓存操作指南并发读写缓存实现机制(一):为什么ConcurrentHashMap可以这么快?并发读写缓存实现机制(二):高并发下数据写入与过期并发读写缓存实现机制(三):API封装和简化1.高效的数据写入(put)    在研究写入机制之前,我们先来回顾下上一节的内容.ConcurrentHashMap之

利用听云Server和听云Network实测Kubernetes和Mesos在高并发下的网络性能

文章出自:听云博客        随着公司业务的不断增长,我们的应用数量也有了爆发式增长.伴随着应用爆发式的增长,管理的难度也随之加大.如何在业务爆发增长的同时快速完成扩容成了很大的挑战.Docker的横空出世恰巧解决了我们的问题.利用Docker我们可以快速完成扩容缩容,且配置统一,不易出错.        在Docker的集群管理选型上,我们比较纠结,目前比较流行的是Mesos和Kubernetes.从功能来说,我们更倾向于使用Kubernetes,他在容器编排方面的能力强于Meoso,且提

php结合redis高并发下发帖、发微博的实现方法_php实例

发帖.发微博.点赞.评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的 但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库 模拟发布微博先进入redis队列 weibo_redis.php <?php //此处需要安装phpredis扩展 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth("php001"); //连接

mina高并发下响应时间过长的一些失败的尝试及寻求正确方法

问题描述 楼楼做这个mina的服务端的时间大概不到一个月. 楼楼之前主要是做http的编码,对socket的了解也不是很深, 但因为mina的易用性所以整个服务端也算是很快就搭建起来了. 在和客户端对接测试的时候稳定性和服务端的功能也都还算满意.所以兴冲冲的就开始做压力测试了. 压力测试一做就做出来一身冷汗. 楼楼的服务器是4核的,所以服务端启动的ioprocesser=5. 目前最大的问题是: 当session数量到达100以上时. 客户端收到服务端响应的时间大约就要2到3秒, 当同时并发2W

Spring高并发下Cglib代理性能问题

问题描述 这两天做压力测试(服务器是IBMP7508C32G),高并发下如果用反射直接调用一个简单的服务(空方法,直接return)TPS大概能到将近300,如果用Spring的applicationContextgetBean来获取服务对象调用的话(服务bean是prototype类型),TPS只有不到90.在日志里记录了一下执行时间,用反射调用服务执行时间基本在10毫秒以内,但是用Spring的ApplicationContext执行时间在1秒左右.这样的问题是不是cglib代理引起的?有什

php结合redis实现高并发下的抢购、秒杀功能的实例_Redis

抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis. 重点在于第二个问题 常规写法: 查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数 <?php $conn=mysql_connect("localho

php结合redis高并发下发帖、发微博的实现方法

发帖.发微博.点赞.评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的 但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库 模拟发布微博先进入redis队列 weibo_redis.php <?php //此处需要安装phpredis扩展 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth("php001"); //连接

企业网站如何去确定一个行业转化率高的词

  在做一个网站之前,你得先要确定,我着这个网站是干什么用?是属于什么行业的?这些确定好了,才能着手去建立一个网站,如果,你建立网站都不知道自己要做什么,那么这个网站就浪费了!那我们一开始做网站首先得确定行业,如何去确定行业,那么泰州SEO帮助你分析如何去确定行业: 选择大于努力:选择一个好的行业项目比你做的努力要重要的多,因为,行业的选择直接关系到你的投入和盈利!在选择行业的时候,我建议您尽量去选择SEO机会较大的行业,现在各行各业需要网络营销.都可以网络营销,而我们学的SEO也有大量的市场需