面试官:哪些原因会导致JAVA进程退出?
面试官:哪些原因会导致JAVA进程退出?
无外乎三种情况。
- linux的OOM killer杀死
- JVM自身故障
- jvm的OOM导致进程退出(很罕见,我至今没遇见过)
引言
linux的OOM killer
Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程杀掉。
因此,你发现java进程突然没了,首先要怀疑是不是被linux的OOM killer给干掉了!
你可以去下面这个文件里翻
- 系统报错日志:
/var/log/messages
你执行命令
egrep -i 'killed process' /var/log/messages
去日志里进行查询。
当然,你也可以去内核日志里头查询。有时Linux系统或者系统上运行的java或者其它进程,会发生一些莫名其妙的问题,比如突然挂掉了,比如突然重启等等。在软件上找不到问题所在,此时我们应该怀疑硬件或者内核的问题,此时我们就可以使用 dmesg来查看:
dmesg | grep java
输出如下
[5673702.665338] Out of memory: Kill process 29953 (java) score 431 or sacrifice child
[5673702.665338] Killed process 29953, UID 500, (java) total-vm:9805316kB, anon-rss:2344496kB, file-rss:128kB
完全是可以看到内核对进程做对操作。
JVM自身故障
当JVM发生致命错误导致崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致 JVM crash 的重要信息,我们可以通过分析该文件定位到导致 JVM Crash 的原因,从而修复保证系统稳定。
默认情况下,该文件是生成在工作目录下的,当然也可以通过 JVM 参数指定生成路径:
-XX:ErrorFile=/var/log/hs_err_pid<pid>.log
这个文件的内容主要有如下内容
- 日志头文件
- 导致 crash 的线程信息
- 所有线程信息
- 安全点和锁信息
- 堆信息
- 本地代码缓存
- 编译事件
- gc 相关记录
- jvm 内存映射
- jvm 启动参数
- 服务器信息
拿到这个文件后,不用说了,慢慢啃吧。说到这里,我要摸着良心说。这个文件巨复杂,如果要会读这个文件,请下点功夫。
JVM的OOM
坦白说,我很少遇到因为JVM的OOM,导致java进程退出的情况。
因为,一般情况下,出现OOM异常,JVM的GC会进行回收,是不会导致JVM进程退出的。要真说唯一导致退出的情况,那就是内存泄漏,由于内存占用越来越大,结果。。。。
不过这种JVM的OOM导致的异常,很好排查。
因为,你注意两个个参数
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=*/java.hprof;
然后去对应目录找dump快照文件,接下来借助VisualVM这种可视化工具分析就行。很容易定位问题。
总结
综上所述,正确回答是。先翻dump文件,dump如果没有,翻hs_err_pid.log日志。如果还没有,翻内核日志
面试官:哪些原因会导致JAVA进程退出?相关推荐
- 面试官上来就问:Java 进程中有哪些组件会占用内存?
本文的内容来自 StackOverflow 的一个问答:Java using much more memory than heap size (or size correctly Docker mem ...
- 99%的面试官都会问到的Java面试题
转载自 99%的面试官都会问到的Java面试题 最近是招聘季,所谓金九银十,正是跳槽的好几节.今天,给大家整理了一些Java面试常考的经典题目,我们一道一道来分析一下. 经典面试题 1.谈谈你对 J ...
- 那些让面试官直呼内行的Java知识点(一)
宝子们,你们要的面试题续集终于来啦~ 很多小伙伴反馈过,以前这篇 Java核心知识点精心整理 太长了,打开时页面都要卡一下 所以为了提升阅读体验,这次的面试题会分成若干小章节,每章只装十道题~ 开始吧 ...
- 那些让面试官直呼内行的Java知识点(二)
接上一篇 那些让面试官直呼内行的Java知识点(一) 其实此系列并非全是Java知识点,但都是作为Java语言开发者应该掌握的,好兄弟不骗好兄弟~ 1.mysql中char和varchar有什么区别? ...
- java resume过时方法_面试官没想到,一个 Java 线程生命周期,我可以扯半小时
面试官:你不是精通 Java 并发吗?从基础的 Java 线程生命周期开始讲讲吧. 好的,面试官.吧啦啦啦... 如果要说 Java 线程的生命周期的话,那我觉得就要先说说操作系统的线程生命周期 因为 ...
- java 实体类包含list 怎么取值_舅舅是面试官,偷偷告诉你们面试官最爱问的Java面试题...
2015 年,因为工作岗位的变动,舅舅开始负责给集团招聘一些技术人员,出于对公司的负责,也为了更好的胜任技术经理的职位,在面试的这件事上,舅舅做了大量的"功课",首先研究了几乎所有 ...
- 字节面试官推荐的一份 Java 基础面试题!太顶了
Java 基础篇 Java 有哪些特点 并发性的: 你可以在其中执行许多语句,而不必一次执行它 面向对象的:基于类和面向对象的编程语言. 独立性的: 支持一次编写,到处运行的独立编程语言,即编译后的代 ...
- 面试官 | 如何优雅的设计Java 异常?
作者 | lrwinx 来源 | lrwinx.github.io 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问. 异常的类别 正如我们所知道的,java中的异常的 ...
- 春招妥了!资深技术面试官教你这样准备 Java 面试! | CSDN 博文精选
作者 | hsm_computer 责编 | 伍杏玲 出品 | CSDN博客 Java能力和面试能力,这是两个方面的技能,可以这样说,如果不准备,一些大神或许也能通过面试,但能力和工资有可能被低估.再 ...
最新文章
- Dialog、Toast、Snackbar,你真的了解它们吗?
- Redis介绍 Java客户端操作Redis
- 解压与压缩(把dataset转为string、、 )
- WPF 异常其他信息: “对类型“BaseControl.KImgButton”的构造函数执行符合指定的绑定约束的调用时引发了异常。”,行号为“38”,行位置为“22”。...
- JAVA项目实训struts2_Java Web项目搭建过程记录(struts2)
- golang web php,golang 适合做web开发吗
- STL之Map完整(Linux内核)内部实现
- Kubernetes教程 - Kubernetes综合指南(Use Guide)
- [OGG] [INS-75012] GoldenGate重装报错
- 如何将爬虫获得的数据变为字典的key_Python爬虫第二战 爬取500px图片
- javascript将页面设为首页代码大全
- iOS集成 Paypal 贝宝支付
- openssl官网-下载安装过程
- 苹果 iOS/iPadOS 14.4 beta 2新功能
- Python 给图片加文字,加图片水印
- 电脑显示计算机资源不足 新用户无法登录,三招解决win10电脑提示资源不足的问题...
- XToDoList 助你一臂之力
- 自己对mysql中的Join的理解
- 解决H5 audio自动播放无效问题(应用于一切环境的一切浏览器)
- unity 创建Txt文件并写入数据
热门文章
- ggClusterNet---一条代码完成全内容微生物网络
- 做科研发论文一直找不到研究热点?硕博导师都在关注的平台你还不快来?
- 丰度决定了细菌在复杂群落中的功能作用
- vue 动态修改后端请求_vue-element-admin实战 | 第二篇: 最小改动接入后台实现根据权限动态加载菜单...
- python使用pandas计算dataframe中每个分组的分位数极差、分组数据的分位数极差(range)、使用groupby函数和agg函数计算分组的两个分位数
- R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题、轴标签设置)实战
- Python使用matplotlib可视化华夫饼图(Waffle Chart) 、华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例、从不同的分类变量来可视化华夫饼图(Waffle Chart
- cufflinks基于dataframe数据绘制线图(line plot)、散点图(scatter plot)
- KNN(K Nearest Neighbors)分类是什么学习方法?如何或者最佳的K值?RadiusneighborsClassifer分类器又是什么?KNN进行分类详解及实践
- pandas pivot_table透视表、crosstab交叉表、aggfunc函数详解及实战