Linux java进程无故被kill
这两天,演示环境的java应用无端端就被停止了。在这里记录一下原因和排查过程:
发现应用挂掉以后,第一时间登陆centos,发现进程没有了。于是重新启动应用。
但是启动不起来,去看业务日志,没有找到任何堆栈信息。
后来,在同事的指导下,找到了jdk的错误日志(如果没有指定,通常生产在应用的bin目录下):hs_err_pid9758.log
Memory: 4k page, physical 16267588k(171288k free), swap 0k(0k free)
vm_info: OpenJDK 64-Bit Server VM (25.171-b10) for linux-amd64 JRE (1.8.0_171-b10), built on May 9 2018 13:15:45 by "mockbuild" with gcc 4.8.5 20150623 (Red Hat 4.8.5-28)
time: Tue Jun 26 08:14:28 2018
elapsed time: 50 seconds (0d 0h 0m 50s)
提示交换区内存不足。
但是通过top查看内存使用情况,还有2个G的内存可用。
通过查看linux的系统日志:/var/log/message发现了问题:
Jun 27 11:25:19 sie2 kernel: [25602] 1003 25602 1337279 292684 724 0 0 java
Jun 27 11:25:19 sie2 kernel: [12954]   994 12954    11852      606      26        0             0 nginx
Jun 27 11:25:19 sie2 kernel: [18231]     0 18231   124404     1314      33        0          -500 docker-containe
Jun 27 11:25:19 sie2 kernel: [30917]  1001 30917  1262181   453358    1095        0             0 java
Jun 27 11:25:19 sie2 kernel: [31228]  1001 31228  1200523   135094     385        0             0 java
Jun 27 11:25:19 sie2 kernel: [31751]  1000 31751  1191745   420641     980        0             0 java
Jun 27 11:25:19 sie2 kernel: [30786]     0 30786    37204      640      74        0             0 sshd
Jun 27 11:25:19 sie2 kernel: [30797]     0 30797    28845      253      13        0             0 bash
Jun 27 11:25:19 sie2 kernel: [31653]     0 31653    37204      640      73        0             0 sshd
Jun 27 11:25:19 sie2 kernel: [31661]     0 31661    28879      321      14        0             0 bash
Jun 27 11:25:19 sie2 kernel: [32170]     0 32170    37204      634      74        0             0 sshd
Jun 27 11:25:19 sie2 kernel: [32176]     0 32176    28876      333      13        0             0 bash
Jun 27 11:25:19 sie2 kernel: [32539]    89 32539    22419      480      43        0             0 pickup
Jun 27 11:25:19 sie2 kernel: [ 1820]     0  1820    37204      838      76        0             0 sshd
Jun 27 11:25:19 sie2 kernel: [ 1824]     0  1824    37204      837      74        0             0 sshd
Jun 27 11:25:19 sie2 kernel: [ 1826]     0  1826    28879      344      13        0             0 bash
Jun 27 11:25:19 sie2 kernel: [ 1846]     0  1846    28879      320      13        0             0 bash
Jun 27 11:25:19 sie2 kernel: [ 2059]   997  2059    28281      227      11        0             0 thingsboard.jar
Jun 27 11:25:19 sie2 kernel: [ 2072]   997  2072  1768449  1110739    2273        0             0 java
Jun 27 11:25:19 sie2 kernel: Out of memory: Kill process 2072 (java) score 273 or sacrifice child
原因分析(引用自:https://www.cnblogs.com/-scl/p/7152168.html):
解:内存不足,自动查杀了进程,即杀死了项目进程,项目不能启动
这个问题的原因是low memory耗尽。“内核使用low memory来跟踪所有的内存分配,一旦low memory耗尽,就会查杀进程,以保持系统的正常运转。说白了 OOM Killer 就是一层保护机制,用于避免 Linux 在内存不足的时候不至于出太严重的问题,把无关紧要的进程杀掉
解:找到:bin/catalina.sh,在这个前面 echo "Using CATALINA_BASE: $CATALINA_BASE"加上这一条,JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
Linux java进程无故被kill的更多相关文章
- Linux终止进程的工具kill/killall/pkill/xkill/skill用法区别(转)
		一. 终止进程的工具kill .killall.pkill.xkill 终止一个进程或终止一个正在运行的程序,一般是通过kill .killall.pkill.xkill等进行.比如一个程序已经死掉, ... 
- Linux 杀死进程方法大全(kill,killall)
		杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常 ... 
- Linux删除多个java进程的其中一个
		一.背景: Linux后台运行了多个Java程序,进程名都是java. 执行pkill java会一次性杀掉所有的java进程. 二.解决思路: 先通过一定的检索条件,定位出指定的java进程 然后解 ... 
- (转)linux下如何批量杀JAVA进程或某个进程方法
		在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killall 直接杀掉某一进程名称包含的所有运行中进程(我们 ... 
- linux下如何批量杀JAVA进程或某个进程方法
		linux下如何批量杀JAVA进程或某个进程方法 在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killal ... 
- 使用 kill 命令杀死 java进程,你用对了吗?
		在本地调试agent相关功能,需要经常性的杀掉Java进程,验证一些极端情况. 每次都是本能执行如下步骤 jps kill -9 <pid> reboot 有一次验证,发现代码中添加的Sh ... 
- Linux系统下如何优雅地关闭Java进程?
		资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux ... 
- Linux下杀掉所有得java进程
		--转自https://blog.csdn.net/oppo62258801/article/details/81434038 1.Linux查看所有Java进程 ps -ef | grep java ... 
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
		运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ... 
随机推荐
- 7. Vulnerability exploitation tools (漏洞利用工具  11个)
			Metasploit于2004年发布时,将风暴带入了安全世界.它是开发,测试和使用漏洞利用代码的高级开源平台. 可以将有效载荷,编码器,无操作生成器和漏洞利用的可扩展模型集成在一起,使得Metaspl ... 
- winscp工具和xshell连接linux机器时切换到root账户
			由于工作中一些机器不能以root直接登陆(sshd_config配置了不能直接root登陆),但是又想连接的时候切换为root用户 处理方式 1.给普通用户sudo su - 权限 命令行输入visu ... 
- 左耳听风-ARTS-第1周
			Algorithm https://leetcode.com/problems/longest-common-prefix/ class Solution { public String longes ... 
- [转]C#调用C++dll
			本文转载至http://www.cnblogs.com/ysharp/archive/2012/05/25/2517803.html 在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问 ... 
- elasticsearch -- Logstash实现mysql同步数据到elasticsearch
			配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-o ... 
- 常用Linux终端命令行的快捷键列表
			终端有很多快捷键,不太好记,常用的在这里 Ctrl+r 实现快速检索使用过的历史命令.Ctrl+r中r是retrieve中r. Ctrl+a:光标回到命令行首. (a:ahead) Ctrl+e:光标 ... 
- Wpf开源收集
			1,到底有哪些开源MVVM框架? 前面介绍了WPF的基本概念和一些相关知识,我们了解到开发WPF应用程序可以使用现成的框架和模式,最为合适的莫过于时下正热的MVVM模式,所以这里我们也列出针对MVVM ... 
- 如何在本地同时管理github仓库和codingnet仓库?
			本文的前提条件是你在电脑上接入了github或者gitlab的仓库,现在要接入codingnet的仓库. 电脑上已经有了 github 的 ssh key,怎么继续接入codingnet 的git仓库 ... 
- MySQL面试题中:主从同步部署介绍
			主从同步部署1.两台相同版本的mysql数据库,一台做主库,一台从库 主库开启binlog 在配置文件中的[mysqld]模块中添加log-bin=mysql-bin和server-id=1,一定要保 ... 
- 简单的爬虫爬的完整的<img>标签,修改正则即可修改爬取内容
			简单的爬虫爬的完整的<img>标签,生成<img>标签结果文件与爬虫经历的网页. <?php/** 从给定的url获取html内容** */function _getUr ... 
