这两天,演示环境的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的更多相关文章

  1. Linux终止进程的工具kill/killall/pkill/xkill/skill用法区别(转)

    一. 终止进程的工具kill .killall.pkill.xkill 终止一个进程或终止一个正在运行的程序,一般是通过kill .killall.pkill.xkill等进行.比如一个程序已经死掉, ...

  2. Linux 杀死进程方法大全(kill,killall)

    杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志.   首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:   # kill -pid   注释:标准的kill命令通常 ...

  3. Linux删除多个java进程的其中一个

    一.背景: Linux后台运行了多个Java程序,进程名都是java. 执行pkill java会一次性杀掉所有的java进程. 二.解决思路: 先通过一定的检索条件,定位出指定的java进程 然后解 ...

  4. (转)linux下如何批量杀JAVA进程或某个进程方法

    在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killall 直接杀掉某一进程名称包含的所有运行中进程(我们 ...

  5. linux下如何批量杀JAVA进程或某个进程方法

    linux下如何批量杀JAVA进程或某个进程方法 在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killal ...

  6. 使用 kill 命令杀死 java进程,你用对了吗?

    在本地调试agent相关功能,需要经常性的杀掉Java进程,验证一些极端情况. 每次都是本能执行如下步骤 jps kill -9 <pid> reboot 有一次验证,发现代码中添加的Sh ...

  7. Linux系统下如何优雅地关闭Java进程?

    资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux ...

  8. Linux下杀掉所有得java进程

    --转自https://blog.csdn.net/oppo62258801/article/details/81434038 1.Linux查看所有Java进程 ps -ef | grep java ...

  9. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

随机推荐

  1. Python map,filter,reduce函数

    # -*- coding:utf-8 -*- #定义一个自己的map函数list_list = [1,2,4,8,16] def my_map(func,iterable): my_list = [] ...

  2. [随笔][Java][总结][java 类型系统]

    java 的类型系统大体分为两类,对象和基本类型.java使用静态类型检查来保证类型安全.每个变量在使用之前需要声明.非静态类型的语言不要求变量在使用之前进行声明. 基本数据类型 java的基本类型不 ...

  3. linux下软件安装的几种方式

    linux下软件安装的几种方式(主要有源码安装, rpm安装, yum安装). 一:源码安装 几乎所有的开源软件都支持在Linux下运行,而这些软件一般都以源码形式发放,只需要Linux安装了gcc. ...

  4. 创建一个dynamics 365 CRM online plugin (六) - Delete plugin from CRM

    我们之前都学习到怎么添加,debug还有update plugin. 今天带大家过一下怎么从CRM instance当中删除plugin. 首先让我们打开Settings -> Customiz ...

  5. day01知识点

    1.计算机基础 2.Python的历史 3.编码语言分类     Python是一门动态解释性的强制类型定义语言 4.Python的解释器种类 5.变量     法律规则:字母,数字,下划线(数字不能 ...

  6. 附录B——MySQL样例表

    vendors表: 储存销售产品的供应商信息,每个供应商在这个表中有一个记录,供应商ID(vend_id)列用来匹配产品和供应商. 列名 vend_id vend_name vend_address ...

  7. A*搜索详解(1)——通往基地的最短路线

    假设地图上有一片树林,坦克需要绕过树林,走到另一侧的军事基地,在无数条行进路线中,哪条才是最短的? 这是典型的最短寻径问题,可以使用A*算法求解.A*搜索算法俗称A星算法,是一个被广泛应用于路径优化领 ...

  8. python selenium-webdriver 执行js (八)

    使用python selenium 做自动化测试的时候其实我基本没有使用过执行js,只是在后来使用selenium来爬虫的时候使用到了,所以我在这里也就拿出来简单的介绍一下如何执行js. execut ...

  9. Python 标准库笔记(1) — String模块

    原文出处: j_hao104 String模块包含大量实用常量和类,以及一些过时的遗留功能,并还可用作字符串操作. 1. 常用方法 常用方法 描述 str.capitalize() 把字符串的首字母大 ...

  10. Linux基础入门-Linux下软件安装

    一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc APT(Advanced Packaging To ...