JVM服务进程挂掉问题定位查询思路
昨天有朋友咨询了个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服务进程挂掉问题定位查询思路的更多相关文章
- thinkphp 定位查询 Model:last您所请求的方法不存在!
thinkphp 定位查询 Model:last您所请求的方法不存在! 用thinkphp3.1做项目的时候为了获取记录表中最后一个id用到了last()方法,出现了这个错误:Model:last ...
- 利用GeoIP数据库及API进行地理定位查询 Java
地理定位查询的的数据库比较多,而且大多都开放一些free的版本 国内的有纯真数据库等,但是他只提供文本的地理位置信息,不提供经纬度数据 当应用到google map时,就不可以了 国外的有MaxMin ...
- springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany
springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...
- 多表查询思路、navicat可视化软件、python操作MySQL、SQL注入问题以及其他补充知识
昨日内容回顾 外键字段 # 就是用来建立表与表之间的关系的字段 表关系判断 # 一对一 # 一对多 # 多对多 """通过换位思考判断""" ...
- HAVING,多表查询思路,可视化软件navicat,多表查询练习题,
HAVING "where"是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之 前起作用,且"where"后面不能写&quo ...
- Django中多表查询思路
需求: 1.有一张文章表和一张评论表 2.两张表的关系是一对多 3.规则:若是有新评论,则将对应的文章置顶,若是有新文章则将新文章置顶. 思路: 在文章表中增加一个最后评论时间的字段.然后采用分组排序 ...
- 信1705-2 软工作业最大重复词查询思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中。 (2)定义一个Map,key是字符串类型,保存单词;value是数字类型,保存该单词出现的次数。 (3)遍历(1)中得到的字符串数组,对于每一个单词,考察Map的key中是否出现过该单词,如果没出现过,map中增加一个元素,key为该单词,value为1(
通过学习学会了文本的访问,了解一点哈希表用途.经过网上查找做成了下面查询文章重复词的JAVA程序. 1 思 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词 ...
- core文件无堆栈信息定位的思路
首先需要介绍一下,阅读此文需要有基本的汇编知识. 1.rbp(基址寄存器),rsp(堆栈寄存器),rip(指令寄存器). 2.程序执行时,没有遇到函数调用时,IP自增长,遇到函数调用时, 需要保存bp ...
- 记一次公司JVM堆溢出抽丝剥茧定位的过程
背景 公司线上有个tomcat服务,里面合并部署了大概8个微服务,之所以没有像其他微服务那样单独部署,其目的是为了节约服务器资源,况且这8个服务是属于边缘服务,并发不高,就算宕机也不会影响核心业务. ...
随机推荐
- pyQt5不让进度条卡住
这里我们用一个更新程序做示例, 下载文件的过程中让进度条实时显示下载进度. 如果下载和更新进度条的工作都放在一个线程中,会出现进度条卡顿的情况. Qt中正确的做法是把界面刷新和工作任务交给不同的线程去 ...
- 分享一个VueCli 3.0的项目模板
个人搭建的Vue项目模板 默认自带 Vuex Less 封装内容如下 vue.config axios 封装 vue 配置环境文件 vue 自定义路径映射 (cli3.0取消了默认@ 映射src的 ...
- android 给view添加阴影
1.方法一: 使用 CardView 布局 <android.support.v7.widget.CardView xmlns:android="http://schemas.andr ...
- # 20175333曹雅坤《Java程序设计》第七周学习总结
教材学习内容总结 第八章-常用实用类String类 构造String对象 字符串的并置 String类的常用方法 字符串与基本数据的互相转化 对象的字符串表示 字符串与字符.字节数组 正则表达式及字符 ...
- L2-013 红色警报 (25 分) (并查集)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805063963230208 题目: 战争中保持各个城市间的连通性非 ...
- Virtual Machine
之前说到可以使用Assembly language来实现程序编写,把程序通过一个Assembler就可以得到计算机可以操作的二进制文件. 但是Assembly language依旧不适于编程,但怎么将 ...
- go语言map操作
package main import "fmt" func main() { var m = map[int]string{ 90: "优秀", 80: &q ...
- 明确MangoDB在企业中应用
目录 1.MongoDB是什么? 2.为什么要用MongoDB? 3.主要特性 4.C/S服务模型 5.完善的命令行工具 6.几个shell实操 7.在Java中使用MongoDB 明确MongoDB ...
- 快捷键打开Generate
在eclipse下有覆盖toString.hashcode.setter.getter等功能. 在intelj idea中,同样具有类似的功能. 按下键盘上的alt+insert键,就会弹出gener ...
- Linux telnet安装
为什么需要telnet? telnet就是查看某个端口是否可访问.我们在搞开发的时候,经常要用的端口就是 8080.那么你可以启动服务器,用telnet 去查看这个端口是否可用. Linux cent ...