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[] ...
随机推荐
- javascript的加减乘除结果会有误差,在两个浮点数相加的时候会比较明显。以下函数返回较为精确的计算结果
加法函数(返回值:arg1加arg2的精确结果 ) function accAdd (arg1, arg2) { var r1, r2, m, c try { r1 = arg1.toString( ...
- centos下源码编译安装MySQL
解压下载的软件压缩包 tar xzvf mysql-5.1.63.tar.gz 进入解压的目录 cd mysql-5.1.63/ 安装需要的依赖包 yum install gcc gcc-c++ ...
- java-IO流-其他流
###22.01_IO流(序列流)(了解) * 1.什么是序列流 * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, ...
- 总结描述用户和组管理类命令的使用方法,系统用户相关信息,取出主机IP地址
1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. [root@db146 ~]# who|cut -f1 -d' ' |sort -u root 2.取出最后 ...
- tornado--输入和输出
tornado--输入和输出 tornado的self.write只接受byte,Unicode,dict三种格式的对象. self.write会存在一个缓冲区,当不强制断开缓冲的时候,它会把当前函数 ...
- Web前端学习第一天
1.SQL注入攻击的发生 select username, email ,descl from users where id=1; 可能会被伪造成 1 union select password,1, ...
- SQL盲注学习
如果数据库运行返回结果时只反馈对错不会返回数据库当中的信息 此时可以采用逻辑判断是否正确的盲注来获取信息 盲注是不能通过直接显示的途径来获取数据库数据的方法 1.布尔盲注 2.时间盲注 3.报错型盲注 ...
- 《python for data analysis》第四章,numpy的基本使用
<利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块…… # -*- c ...
- 百度ip定位城市接口调用
http://lbsyun.baidu.com/index.php?title=webapi/ip-api require 'rubygems' require 'json' print ARGV p ...
- java虚拟机的学习书籍推荐
javaEE开发已然是一个老生常谈的话题了,但经典之所以会成为经典,就是因为有可重复琢磨之处,每一次的反复推敲都会有不一样的收获.如果你不满足于做一个只会写if…else…的Java程序员,而是希望更 ...