一次线上问题的解决

线上发现服务cpu使用达到98%,负载高达200多,64核心cpu,下面介绍解决过程:

1.top命令查出占用cpu高的进程pid

2.使用jstack -l pid >dump.txt 获取dump文件

3.使用top -H查询出消耗资源的线程号tid(十进制线程id),转换为16进制

4.cat dump.txt | grep -10 tid(16进制) 查询出该进程号上下10行,定位问题并解决问题

=====================================================

1.使用top命令

2.jstack -l pid >dump.txt 获取dump文件

3.使用top -H查询出消耗资源的线程号tid(十进制线程id),转换为16进制  ,10587转换成十六进制后为295B,转换成小写为295b

4.cat dump.txt | grep -10 tid(16进制) 查询出该进程号上下10行,定位问题并解决问题

cat dump.txt | grep -10 295b

发现问题在hashMap的get方法,count发现有200多个的runnable状态在调用hashMap的get方法,经过查找ServiceBuilder的第592行发现在一个公共静态方法中使用了一个类全局变量的HashMap作为 共享变量被并发使用,第592行是get方法,经过查找发现在1.7的get方法中有e.next();方法造成cpu无限循环。于是把HashMap改成了ConcurrentHashMap.问题应该解决了,待上线验证。(注该问题不一定会100%发生)

另见(关于hashMap的循环bug):http://ifeve.com/hashmap-infinite-loop/

hashMap的get()方法,错用并发造成cpu和负载高的更多相关文章

  1. HashMap之put方法流程解读

    说明:本文中所谈论的HashMap基于JDK 1.8版本源码进行分析和说明. HashMap的put方法算是HashMap中比较核心的功能了,复杂程度高但是算法巧妙,同时在上一版本的基础之上优化了存储 ...

  2. Java基础:HashMap中putAll方法的疑惑

    最近回顾了下HashMap的源码(JDK1.7),当读到putAll方法时,发现了之前写的TODO标记,当时由于时间匆忙没来得及深究,现在回顾到了就再仔细思考了下 @Override public v ...

  3. jdk1.8 HashMap的keySet方法详解

    我在看HashMap源码的时候有一个问题让我产生了兴趣,那就是HashMap的keySet方法,没有调用HashMap的有关数据的任何方法就能获取到map的所有的键,他是怎么做到的,然后我就通过模拟k ...

  4. HashMap的put方法返回值问题

    API文档中的描述: 先看一个例子 Map<Character, Integer> map = new HashMap<Character, Integer>(); Syste ...

  5. HashMap的clear方法

    我们都知道HashMap的clear()方法会清楚map的映射关系,至于怎么实现的呢? 下面先看一下clear()方法的源码 public void clear() { Node<K,V> ...

  6. HashMap集合-遍历方法

    # HashMap集合-遍历方法 先定义好集合: public static void main(String[] args) { Map<String,String> onemap=ne ...

  7. java高并发编程(四)高并发的一些容器

    摘抄自马士兵java并发视频课程: 一.需求背景: 有N张火车票,每张票都有一个编号,同时有10个窗口对外售票, 请写一个模拟程序. 分析下面的程序可能会产生哪些问题?重复销售?超量销售? /** * ...

  8. mysql cpu使用率过高解决方法

    mysql cpu使用率过高解决方法 1 mysql查看正在运行的语句 并且查看运行最多的mysql语句 MySQL 打开 general log 后,所有的查询语句都会记录在 general log ...

  9. Python 之并发编程之进程上(基本概念、并行并发、cpu调度、阻塞 )

    一: 进程的概念:(Process) 进程就是正在运行的程序,它是操作系统中,资源分配的最小单位. 资源分配:分配的是cpu和内存等物理资源 进程号是进程的唯一标识 同一个程序执行两次之后是两个进程 ...

随机推荐

  1. 在CentOS中安装中文支持

    执行命令: # yum groupinstall chinese-support 修改配置文件: # vim /etc/sysconfig/i18n LANG="zh_CN.UTF-8&qu ...

  2. C# WebBrowser HttpWebRequest Cookie 的结合运用。

    在WebBrowser下对网页进行操作其实是一件挺轻松的事情,他可以很方便实现自定义的网站访问习惯.而WebBrowser毕竟是对MS原生 控件的封装,当我们使用C#下的WebBrowser尤其是这样 ...

  3. 右键添加 CMD 命令提示符

    # 右键添加 CMD 命令提示符 当然是修改注册表   - 打开注册表编辑器(按下Win+R打开运行对话框,输入regedit),找到[HKEY_CLASSES_ROOT/Folder/shell] ...

  4. 数据库整合数据报表SQL实战

    协助同事整理sql统计报表. ---建立由avalue的视图,要过滤重复数据 CREATE VIEW vLectAnswerRecord as SELECT t2.OpenID,t2.Qguid,t1 ...

  5. mysql:查询结果添加序列号

    select   (@i:=@i+1)   as   i,table_name.*   from   table_name,(select   @i:=0)   as   it

  6. 【STM32F4】读取芯片ID和芯片Flash Size

    首先声明,手册上给出的FlashSize地址是错误的,正确的应该是0x1FFF7A20,取高16位.确切说应该是(0x1FFF7A23,0x1FFF7A22两个字节), 芯片的这96位ID是产品唯一身 ...

  7. java 用插入排序思想,对不规则数组排序。

    知道插入排序后,无意中发现,用插入排序思想,对不规则数组排序的排序 发现和许多大神写的不一样,大神写的简洁多了.--------

  8. OAF_开发系列06_实现OAF属性集的介绍和开发Attribute Set(案例)

    20150705 Created By BaoXinjian

  9. 生成均值文件mean.binaryproto

    [感谢:http://www.cnblogs.com/denny402/p/5102328.html] compute_image_mean.bin生成均值文件mean.binaryproto: ca ...

  10. 在java下使用log4j2记录日志

    1.定义: log4j2 指log4j 2.X及以上版本 2.安装 log4j-core-xx.jarlog4j-api-xx.jarlog4j-web-xx.jar(web项目的需要引用) 3.配置 ...