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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python十个实战项目[通俗易懂]

    python项目练习一:即时标记python项目练习二:画幅好画python项目练习三:万能的XMLpython项目练习四:新闻聚合python项目练习五:虚拟茶话会python项目练习六:使用CGI进行远程编辑python项目练习七:自定义公告板python项目练习八:使用XML-RPC进行远程文件共享python项目练习九:文件共享2-GUI版本python

    2022年4月8日
  • Android ListView 删除 item

    Android ListView 删除 item实现效果主要使用方法是,remove之后在刷新界面adapter里面的代码publicclassMyAdapterextendsBaseAdapter{privateList<ListBean>mDatas=null;privateContextmContext=null;publicMyAdapter(Contextcontext,List<ListBean>datas){

    2022年7月16日
  • countdowntimer_TIMESTAMPDIFF

    countdowntimer_TIMESTAMPDIFF需求:加载某一个界面,在页面中待5秒后再关闭效果图如下:设置了一个点击事件,当文字显示为Skipactivity时,点击跳转界面。代码及介绍如下图:核心功能代码如下Android自带的CountDownTimer这个工具类,也是通过Handler和子线程来实现的。//倒计时工具类CountDownTimer//CountDownTimer的构造方法有两个参数…

    2022年9月18日
  • python自动补全设置_python自动缩进快捷键

    python自动补全设置_python自动缩进快捷键Hello,大家好,我是橘子呀~前几期橘子给大家介绍了Python是什么以及如何安装Python软件。也分享了如何系统的以及高效率的去学习Python这门课程,还有一些避雷建议,今天橘子就分享给大伙一点宝藏干货!!!藏不住的东西,不如扬了它!请大家把它收入囊中~不要辜负我的一片苦心~一、Pycharm常用快捷键(Windows)Ctrl+Q快速查看文档Ctrl+鼠标左键简介及代码定义…

    2022年8月27日
  • Mysql自连接查询「建议收藏」

    Mysql自连接查询「建议收藏」自连接查询假想以下场景:某一电商网站想要对站内产品做层级分类,一个类别下面有若干子类,子类下面也会有别的子类。例如数码产品这个类别下面有笔记本,台式机,智能手机等;笔记本,台式机,智能手机又可以按照品牌分类;品牌又可以按照价格分类,等等。也许这些分类会达到一个很深的层次,呈现一种树状的结构。那么这些数据要怎么在数据库中表示呢?我们可以在数据库中创建两个字段来存储id和类别名称,使用第三个字段存

    2022年6月10日
  • java代码是怎么运行的_java代码是什么

    java代码是怎么运行的_java代码是什么1.Java代码有很多不同的运行方式1)可以在开发工具中运行2)可以双击执行jar文件运行,3)也可以在命令行中运行4)甚至可以在网页中运行这些执行方式都离不开JRE,也就是Java的运

    2022年8月1日

发表回复

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

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