linux内存不足导致tomcat宕机

linux内存不足导致tomcat宕机情况,正常运行的服务器,突然tomcat不能访问了因为服务器的内存是2g的,所以就怀疑是内存不够了,所导致开始排查ps-ef|greptomcat[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTLyQ5EC-1585835537446)(E:\Workspaces\Markdown\linux\记一次内存不够的情况.assets\image-…

大家好,又见面了,我是你们的朋友全栈君。

  • 情况,正常运行的服务器,突然tomcat不能访问了

    因为服务器的内存是2g的,所以就怀疑是内存不够了,所导致

    开始排查

    1. ps -ef|grep tomcat
      

      在这里插入图片描述

      显示tomcat已经不在运行了

    2. free -m
      

      在这里插入图片描述

      查看内存,当时那台机器free,只有77了,这张图是后在自己电脑上截的

    3. grep "Out of memory" /var/log/messages
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNOQtk9c-1585835537447)(E:\Workspaces\Markdown\linux\记一次内存不够的情况.assets\image-20200401112058171.png)]

      在这里插入图片描述

      查看系统日志,显示内存不足,杀死了一个java进程,可以推测,就是tomcat惨遭了毒手,

  • 那为什么杀了tomcat呢?

    ​ 这是由于Linux 内核有个机制叫OOM killer(Out Of Memory killer),,当系统内存不足的时候,out_of_memory()被触发,然后调用select_bad_process()选择一个”bad”进程杀掉。linux选择”bad”进程是通过调用oom_badness(),挑选的算法和想法都很简单很朴实:最bad的那个进程就是那个最占用内存的进程。

    ​ 对于每个进程都有一个oom_score的属性/proc/PID/oom_score
    oom- killer 会杀死oom_score较大的进程,当oom_score为0时禁止内核杀死该进程。

    1. top
      

      在这里插入图片描述

      可以使用top查看内存状态,可以看到mysql占内存最多,其次是pid=6021的Java程序

    2. ps -ef|grep 6021
      

      在这里插入图片描述

      查看到6021是一个java程序

    3. cat /proc/PID/oom_score
      

      在这里插入图片描述

      可以看到mysql的oom分数为63,java程序的oom分数为37

  • 如何使内存不足时,不去杀我们重要的业务相关的进程??

    ​ /proc/PID/oom_adj,一般来说,oom_adj的值越大,该进程被系统选中终止的可能就越高,当 oom_adj=-17时,oom_score将变为0。(要对某个重要进程进行OOM保护的话,把-17写入到 oom_adj即可)

    • echo -17 > /proc/PID/oom_adj
      

      来防止重要的进程被oom_killer杀死。(不推荐,如果是保护进程发生了内存泄漏,而又无法被系统杀死,可能会导致系统崩溃)

    • 推荐优化系统,提高服务器配置

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163649.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PotPlayer基本使用!

    PotPlayer基本使用!目录一、下载二、个人设置三、直播源四、快捷键一、下载 PotPlayer链接1或者PotPlayer链接2,也可以自行百度。 二、个人设置 建议不自动更新(左上角PotPlayer>>配置/语言/其他>>基本设置) 里面很多基本设置看个人需要调,没什么要求基本默认。 皮肤设置 导入皮肤:首先是导入下载的皮肤放入到安装目录的Skins下面,之后打开设置选择皮肤。 设置播放无边框..

    2022年5月21日
    139
  • linux命令手册 apk_linux命令全集

    linux命令手册 apk_linux命令全集linux手册app是一款学习教育应用,是个能让你快速查询linux命令的手机软件。此外在linux手册app中还有学习手册,让你可随时查询不清楚的知识点。基本简介linux手册包app含linux命令速查以及一个linux简易学习教程,是学习linux必备宝典,命令速查可以快速知道linux命令使用方法,并且配有学习手册,方便及时查阅不懂知识。功能介绍1,linux简易教程方便随时阅读2,命令搜…

    2022年9月14日
    0
  • spring @Repository 和@Service,@Controller使用方法

    spring @Repository 和@Service,@Controller使用方法

    2021年7月19日
    102
  • 锐捷交换机基础配置命令

    锐捷交换机基础配置命令ip地址:ip地址就像你的名字,在你所在的地方管用。mac地址:就像你的身份证,在所有的地方都管用。enable—-进入特权模式config—-进入全局配置模式hostnameruijie2021—-更改设备名称vlan10—-创建vlan10(vlan-虚拟局域网)name123—-给vlan设置名称interfacevlan10—-进入vlan10ipaddress192.168.10.1255.255.255.0—

    2022年6月16日
    104
  • 天河免费刷流量工具

    天河免费刷流量工具在用,觉得不错,拿出来分享一下,网址: http://u.115.com/file/f2c6dc01b4   提取码:f2c6dc01b4 http://download.csdn.net/source/2676044 需要有CSDN账号 http://ishare.iask.sina.com.cn/f/9876474.html…

    2022年9月29日
    0
  • pycharm安装教程CSDN_java遇到解决不了的问题

    pycharm安装教程CSDN_java遇到解决不了的问题第三周开始接触python了,结果第一步装pycharm时就遇到了坑,正常安装完成后点运行时出现错误——NoJVMinstallationfound。助教说这是缺少jdk(java程序支持包),需要在网上找个最新的安装并配置下path路径。唉,编程小白,完全不知道这都是些啥o(╥﹏╥)o,于是开始了百度解决问题之路……运行pycharm错误——NoJVMinstallationfoun…

    2022年8月26日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号