作者:Aaron_涛来源:blog.csdn.net/qq_33330687/article/details/101479385

是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。

然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v=

今日在查看监控时候发现,某一台机器load飙升

感觉问题不对劲,ssh大法登陆机器,top,top -Hp,jstack,jmap四连击保存下来堆栈,cpu使用最高的线程,内存信息准备分析。

首先查看使用最耗费cpu的线程堆栈信息

cat stack | grep -i 34670 -C10 --color

我勒个去,HashMap,猜测八成死循环了,但是我们使用的JDK8,在8中通过栈封闭的链表替换,解决了扩容死循环的问题。疑惑,继续往下看。

根据堆栈信息,root方法是问题所在,点开HashMap源码

好嘛,load飙高,代码有个for语句,我觉得铁定死循环了,看代码情况只可能是两个红黑树节点的父亲节点相互引用才可以导致无法走出这个for语句。

然而这都是我的猜测,我没有证据。而且让我追红黑树的代码,也是需要耗费大量时间的事情,我需要快速验证我的猜测。

我之前dump下来了堆内存信息,我通过jhat 命令生成html的内存信息页面

然后输入http://localhost:7000查看

我先找业务代码中持有这个HashMap的对象,然后点进去查询内部信息


因为数据都放在table中,点击Table字段,查看其内容

table中存在唯一的一个TreeNode节点,这肯定是已经变成了红黑树了

点进去查看


点击parent字段信息


0x72745d828与0x72745d7b8两个TreeNode节点的Parent引用都是对方。

后续打算深入研究一下红黑树什么场景会造成这个原因。

最后,无论什么并发场景请别使用HashMap,ConcurrentHashmap大法好~

cpu飙升 死循环_JDK8中HashMap依然会产生死循环问题!相关推荐

  1. 踩坑了,JDK8中HashMap依然会产生死循环问题!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:Aaron_涛 blog.csdn.net/qq_3 ...

  2. java8 hashmap 死循环_踩坑了,JDK8中HashMap依然会死循环!

    作者:Aaron_涛 原文:blog.csdn.net/qq_33330687/article/details/101479385 是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽 ...

  3. cpu飙升 死循环_记一次CPU飙升BUG

    一.前言 上线后,CPU飙升到100%,怎么办?马上重启?大错特错,马上重启只会让这个雷石沉大海,治标不不治本,等待你的下次的历史重演! 二.现象 监控告警,某机器的CPU飙升到100% 三.分析 第 ...

  4. Java程序CPU飙升排查,找出死循环代码

    windows环境下cpu飙升问题 线上某台runtime机器(windows Server)cpu报警,这种情况初步就是代码里面死循环了,先把机器下线了保证不再有新的任务分配进来,然而cpu使用依然 ...

  5. hashmap put过程_阿里十年技术大咖,教你如何分析1.7中HashMap死循环

    在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表 形成环形 ...

  6. 线上频繁发生Full GC 如何调优?如何快速定位OOM、cpu飙升、线程死锁等问题

    文章目录 1. jvm调优命令.工具介绍 ①:jps ②:jmap 查看应用中各实例生成情况 快速定位内存突然飙升导致的OOM异常 查看堆内存使用情况 ③:Jstack 检测线程死锁 快速定位导致cp ...

  7. jvm优化—监控工具:诊断内存泄露、cpu飙升、线程死锁、响应变慢

    目录 一.jvm常见监控工具&指令 JVM常见参数 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 1. jps:jvm进程状况工具 2.jstat: jvm ...

  8. java中HashMap在多线程环境下引起CPU100%的问题解决

    最近项目中出现了Tomcat占用CPU100%的情况,原以为是代码中出现死循环,后台使用jstack做了dump,发现是系统中不合理使用HashMap导致出现了死循环(注意不是死锁). 产生这个死循环 ...

  9. JDK1.7和JDK1.8中HashMap是线程不安全的,并发容器ConcurrentHashMap模型

    一.HashMap是线程不安全的 前言 只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap.但是为什么HashMap是线程不安全的呢,之前 ...

最新文章

  1. VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件
  2. 为什么RStudio Server这么慢?
  3. 自我理解:const char*, char const* and char *const
  4. DWZ (JUI) 教程 navTab 刷新分析
  5. Vue 调试工具 vue-devtools 安装及使用
  6. 怪物猎人ol服务器维护,《怪物猎人OL》5月11日1:30全区全服维护内容公告
  7. android大智慧安装目录,大智慧新一代目录文件结构
  8. SQL Server无法连接客户端的问题
  9. 深入百度蜘蛛IP段详解
  10. ZYNQ---PL端扩展串口
  11. NLP-文本处理:词性消歧
  12. SQL 练习题标准答案(点个赞呀)
  13. 下载安装Java运行环境
  14. Cadence PSpice 教程 基础篇(转载)
  15. html 输入框变红色,为什么CAD的动态输入框变成红色?
  16. 推荐一些近期看过的电影和电视剧
  17. sh_update_eop 更新eop
  18. ownin下的webapi上传图片
  19. java的rtsp通信、rtp接收数据、本地实现连续播放视频片段(源源不断)(基本实现)
  20. 快速了解什么是“云打印”

热门文章

  1. Python——单元测试
  2. Hive 的窗口函数
  3. Hive分析函数--row_number 的用法
  4. Celery多个定时任务使用RabbitMQ,Queue冲突解决
  5. 史上最全的CSS hack方式一览(鉴)
  6. 漫步最优化二——基本优化问题
  7. 批量从网上下载图片、zip等文件到本地[java爬虫]
  8. Spring框架 AOP
  9. 《汇编语言》王爽—实验五详解
  10. pip与conda简述