昨天有朋友咨询了个RegionServer宕机找不到日志无法定位原因的问题,干脆就系统整理下JVM服务宕机的可能原因,方便按照思路去找真正的宕机原因。

1. abort()/halt()/exit()

有些服务会采用lei it crash的思想,在一些超时较久、资源不足的场景下可能会采取直接abort(像部分C服务也会对一些错误的参数直接abort产生core),尤其在HBase RegionServer和Phoenix 实现的coprocessor里有好几处这样的代码。通常鲁棒性高的服务abort后也会有对应的主从、多活、拉起等措施保证用户端影响最小。

在实现的好的代码中,所有退出都应当是有日志的。因此首先看自己的服务日志有没有相关退出信息。这里需注意,Java用通用的log4j可能还比较好;部分C++的logger配置不好的话,为了性能,flush落盘频率较低,偶尔会有服务退出了,日志没刷完的情况。

2. 非人为代码的JVM 虚拟机退出
通常有几种情况:
2.1.  JVM本身问题,最常见的就是各类OOM。这个调vm配置、调GC优化就好了。
2.2. JNI退出。如果调用了一些第三方JNI,有时有可能会出现JNI里的C/C++代码core了导致vm崩溃。此时一般会打出 dump日志(强烈建议jvm启动时加上dump参数指定dump日志位置),dump日志里会有core的原因,c++的stacktrace,崩溃时的一些内存信息等信息。如果开启了core的机器(ulimit -c 设置),还会见到.core文件的产生,可用于gdb跟踪。
2.3. OS内存不足kill进程。这种是看起来悄无声息地结束的,没有dump日志和core。此时需要看下os级别的日志 /var/log/message,翻到宕机时间点,通常能看到OOM killed的信息。

3. 服务器关机/重启
此时和你的服务不一定有什么关系了。需联系运维先查清楚服务器关机的原因,通常是人为或定时reboot、硬件兼容、内核问题等。

JVM服务进程挂掉问题定位查询思路的更多相关文章

  1. thinkphp 定位查询 Model:last您所请求的方法不存在!

    thinkphp 定位查询 Model:last您所请求的方法不存在!   用thinkphp3.1做项目的时候为了获取记录表中最后一个id用到了last()方法,出现了这个错误:Model:last ...

  2. 利用GeoIP数据库及API进行地理定位查询 Java

    地理定位查询的的数据库比较多,而且大多都开放一些free的版本 国内的有纯真数据库等,但是他只提供文本的地理位置信息,不提供经纬度数据 当应用到google map时,就不可以了 国外的有MaxMin ...

  3. springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany

    springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...

  4. 多表查询思路、navicat可视化软件、python操作MySQL、SQL注入问题以及其他补充知识

    昨日内容回顾 外键字段 # 就是用来建立表与表之间的关系的字段 表关系判断 # 一对一 # 一对多 # 多对多 """通过换位思考判断""" ...

  5. HAVING,多表查询思路,可视化软件navicat,多表查询练习题,

    HAVING "where"是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之 前起作用,且"where"后面不能写&quo ...

  6. Django中多表查询思路

    需求: 1.有一张文章表和一张评论表 2.两张表的关系是一对多 3.规则:若是有新评论,则将对应的文章置顶,若是有新文章则将新文章置顶. 思路: 在文章表中增加一个最后评论时间的字段.然后采用分组排序 ...

  7. 信1705-2 软工作业最大重复词查询思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中。 (2)定义一个Map,key是字符串类型,保存单词;value是数字类型,保存该单词出现的次数。 (3)遍历(1)中得到的字符串数组,对于每一个单词,考察Map的key中是否出现过该单词,如果没出现过,map中增加一个元素,key为该单词,value为1(

    通过学习学会了文本的访问,了解一点哈希表用途.经过网上查找做成了下面查询文章重复词的JAVA程序. 1 思 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词 ...

  8. core文件无堆栈信息定位的思路

    首先需要介绍一下,阅读此文需要有基本的汇编知识. 1.rbp(基址寄存器),rsp(堆栈寄存器),rip(指令寄存器). 2.程序执行时,没有遇到函数调用时,IP自增长,遇到函数调用时, 需要保存bp ...

  9. 记一次公司JVM堆溢出抽丝剥茧定位的过程

    背景 公司线上有个tomcat服务,里面合并部署了大概8个微服务,之所以没有像其他微服务那样单独部署,其目的是为了节约服务器资源,况且这8个服务是属于边缘服务,并发不高,就算宕机也不会影响核心业务. ...

随机推荐

  1. 数据库运维平台~Yearning测试与总结

    一 部署   1 docker-compose up -d 即可非常方便   2 mysql安装   3 inception安装二 默认账号   默认用户admin 密码: Yearning_admi ...

  2. [转】Python--遍历列表时删除元素的正确做法

    转自:https://blog.csdn.net/cckavin/article/details/83618306   一.问题描述 这是在工作中遇到的一段代码,原理大概和下面类似(判断某一个元素是否 ...

  3. pwnable.tw silver_bullet

    产生漏洞的原因 int __cdecl power_up(char *dest) { char s; // [esp+0h] [ebp-34h] size_t new_len; // [esp+30h ...

  4. centOS7在VirtualBox中装好后的网络连接问题

    1. 环境 物理机OS:Windows 7 虚拟机:VirtualBox 虚拟机OS:CentOS7 2. 虚拟机网络设置 (该部分内容参考于网络,未深究原因,待后续研究补充) 网卡1设置如下图: 网 ...

  5. 常用函数php

    //随机数 /** * @param int $length 随机数长度 * @param string $num 是否只包含数字 * @return null|string 返回随机字符串 */ f ...

  6. jQuery基础操作

    1.jQuery的介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库.jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Ajax交 ...

  7. Mysql exists 与 in

    今天公司同事反馈一个SQL语句删除数据删除了一个小时,还没有删除完,强制中断. 第一眼看到 exists 的时候,脑子里要有这么个概念: Oracle exists 的效率比in 高.而Mysql 则 ...

  8. .net core 2.1 Ef 连接Mysql数据库 DB first

    本文介绍.net core2.1版本下 Mysql数据库采用DB first方式使用Ef 点击查看更简单的方法 1. 新建基于.net core2.1的项目(略) 2. 从nuget中引用Micros ...

  9. 【玩转开源】使用 PhoenixSuit 线刷 Android 镜像

    先看看效果图: 我这里以BananaPi M2U(全志R40)板子为例,线刷之前,你需要准备这些东西: 1. 硬件:一块全志平台的开发板,一根OTG-USB线,整个过程不需要额外的Power DC供电 ...

  10. 为什么浏览器User Agent中都有个mozilla

    你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样? Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ...