http://www.cnblogs.com/LBSer/p/4417148.html

1 问题描述

某服务有两台机器,每隔几天会报警load高,一开始看监控发现gc时间抖动很大,以为是发生了fullgc引起卡顿而未加注意,之后登入线上机器查看日志发现是jvm崩溃导致了服务重启从而引发gc时间抖动。以某天为例,该服务分别在上午7点和上午10点发生jvm崩溃,如果同时发生崩溃将导致线上停服,后果不堪设想。

2 问题分析

崩溃日志显示jvm崩溃发生在在标记清除扫根路径时。

搜索此bug,发现是jvm的一个已知bug,https://bugs.openjdk.java.net/browse/JDK-8020236,这个bug在1.6和1.7中均有,只是因为重现困难而一直未被修复。

Par_MarkFromRootsClosure::scan_oops_in_oop(HeapWord*)

有人遇到和我们一样的问题(http://hllvm.group.iteye.com/group/topic/43404),他通过压测发现当“ParallelCMSThreads > ParallelGCThreads”会引起此崩溃,而当"ParallelCMSThreads <= ParallelGCThreads"时问题不再复现。而“ParallelCMSThreads > ParallelGCThreads”这个问题也在jvm bug列表中(https://bugs.openjdk.java.net/browse/JDK-6668573),此bug下有人给出的解决思路是将ParallelCMSThreads 设置为 <=ParallelGCThreads。

3 解决方法

查看我们junglepoi-service服务的jvm参数配置,发现ParallelCMSThreads被设置成4,而ParallelGCThreads却未被设置。默认情况下ParallelGCThreads = (ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8),其中ncpus是机器的核数,由于junglepoi-service服务所在的机器为2核4G配置,因此默认情况下ParallelGCThreads=2,此时ParallelCMSThreads > ParallelGCThreads。

解决方法是:1)将ParallelCMSThreads设置为2或1;2)或者不设置ParallelCMSThreads,默认情况下ParallelCMSThreads = (ParallelGCThreads + 3) / 4,如果不设置默认ParallelCMSThreads=(2+3)/4=1。

我们将ParallelCMSThreads设置为2,上线两天未复现jvm崩溃异常,后续将持续观察。

4 启示

不能简单拷贝其它项目的jvm参数配置,需要结合项目特点、机器环境等各方面信息来综合配置。

转载于:https://www.cnblogs.com/LBSer/p/4417148.html

jvm间歇性崩溃分析相关推荐

  1. 02.Android崩溃Crash库之App崩溃分析

    目录总结 01.抛出异常导致崩溃分析 02.RuntimeInit类分析 03.Looper停止App就退出吗 04.handleApplicationCrash 05.native_crash如何监 ...

  2. JVM crash 异常分析

    背景 在升级服务jar包的时候,由于采取的是热升级,即在服务运行的时候,替换掉服务的jar包,导致启动的时候JVM崩溃了,产生hs_err_pidxxx.log这样的log文件 错误日志文件 # # ...

  3. 面对突发事故,APP如何做好崩溃分析与性能监控?

    云妹导读: 在<会展云技术解读>专题中,已先后推出了安全篇.设计篇与智能推荐篇,分别介绍了最严格8大安全保障方案.线上展览中基于服务设计的方法以及展会场景智能推荐搭建之路.本篇文章我们将继 ...

  4. [日更-2019.5.2、3、4] 关于JVM的概略分析

    2019独角兽企业重金招聘Python工程师标准>>> 声明 上一篇写了[日更-2019.4.29.30] 关于JVM.Dalvik.ART的基础分析 ,本篇就单独对JVM进行一下分 ...

  5. java直接内存为什么快_直接内存与 JVM 源码分析

    直接内存(堆外内存) 直接内存有一种叫法,堆外内存. 直接内存(堆外内存)指的是 Java 应用程序通过直接方式从操作系统中申请的内存.这个差别与之前的堆.栈.方法区,那些内存都是经过了虚拟化.所以严 ...

  6. 如何使用MAT进行JVM内存泄露分析

    转载自  如何使用MAT进行JVM内存泄露分析 在<Java Agent的隔离实现以及卸载时一些坑>中,卸载Agent之后,使用 jmap-histo:live pid命令验证执行FGC, ...

  7. 程序崩溃 分析工具_程序分析工具| 软件工程

    程序崩溃 分析工具 A program analysis tool implies an automatic tool that takes the source code or the execut ...

  8. linux 内核部分崩溃,Linux 系统内核崩溃分析处理简介

    Written by arstercz -2019-11-12 Linux 系统内核崩溃分析处理简介 背景说明 目前绝大多数的 Linux 发行版都会将 kdump.service 服务默认开启, 以 ...

  9. Android APP native 崩溃分析之 linker SIGBUS 崩溃

    原文地址:https://caikelun.io/post/2019-05-31-android-app-native-crash-linker-sigbus/ 这是 Android APP nati ...

最新文章

  1. Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制
  2. 关于IOS中的self关键字
  3. 采购寄售业务的系统实现
  4. C语言指针和数组的天生姻缘
  5. ELK学习5_ELK文档资料:《ELK stack 权威指南/饶琛琳》推荐
  6. 【设计模式】—— 适配器模式Adapter
  7. C# 视频监控系列(14):总结贴——VC++代码转成C#小结
  8. 前端学习(2996):vue+element今日头条管理--代码测试规范
  9. ajax将数据显示在class为content的标签中_利用selenium实现自动翻页爬取某鱼数据
  10. 精美在线课程教育学习培训平台网站模板源码 HTML纯静态
  11. 解决微信小程序开发中wxss中不能用本地图片
  12. ue4下载安装(学习笔记)
  13. 3d Max修改器中英文对照表
  14. 360公司2019校招笔试编程题合集答案——python版本
  15. TensorFlow 2.9的零零碎碎(六)-模型训练和评价
  16. 静下心来学习MVC之基本概念
  17. vue-music 跨域获取QQ音乐歌单接口
  18. Ubuntu 17.10安装搜狗拼音输入法
  19. 关于JavaScript谷歌浏览器报错常见问题
  20. RFC3261 SIP: Session Initiation Protocol 中文版 翻译中

热门文章

  1. .NET笔试题集(二)
  2. notepad++ 查找引用(Find Reference)(适用于c c++及各类脚本比如lua、python等)
  3. 《Arduino家居安全系统构建实战》——1.7 小结
  4. hdu 3473 Minimum Sum 划分树
  5. 深入JVM系列(二)之GC机制、收集器与GC调优
  6. poj 3461 - Oulipo
  7. mysql数据库教程全解_MySQL数据库基础教程详解
  8. 海上瓶子下有东西吗_幼儿园小班健康教案《瓶子》含反思
  9. 组织需要什么样的我_为什么开放组织对我说话
  10. icml 2014最佳论文_2014年最佳开放硬件