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


相关推荐

  • pip安装本地指定版本的whl文件

    pip安装本地指定版本的whl文件用pip装一些包的时候,由于pip默认的源也就那几个,换了清华的没用,豆瓣的也没用。。。老停在下载途中就不走了。。,所以就想到了能不能先把这些包down下来,然后本地进行安装呢?说干就干,这里以Tensorflow为例:1.下载.whl文件百度输入:TensorFlowpypi查看到最近能用的最新.whl版本为1.5.0rc1:点开该链接:选择好适合自己系统的版本,然后下载!重点来了:一般来说直…

    2022年6月5日
    109
  • J2EE架构师之路

    J2EE架构师之路不经意的回首,工作进入第五个年头了,发现走过了从Java程序员到J2EE架构师的历程。发现电脑上安装了各种各样的J2EE工具:JBuilder,WSAD,Eclipse,Rose,Together,Weblogic,Jtest,Optimizator,Mysql…发现电脑上保存了各种各样的OpenSource项目:Tomcat,JBoss,Ant,Hibernate,Spr

    2022年6月30日
    32
  • list转json字符串,实体类包含list转实体类「建议收藏」

    list转json字符串,实体类包含list转实体类「建议收藏」StringjsonString=JSON.toJSONString(list);//list转json字符串 List<FanMate>list=JSON.parseArray(jsonString,FanMate.class);//listjson字符串转list StringjsonString=JSON.toJSONString(entity);//list转json字符串 FanMateentity=JSON.parseObject(…

    2022年10月18日
    0
  • ospf数据库同步过程_OSPF的概念

    ospf数据库同步过程_OSPF的概念OSPF协议之链路数据库同步OSPF如何实现链路状态数据库的同步-链路信息主要包括:1、链路的类型;2、接口IP地址及掩码;3、链路上所连接的邻居路由器;4、链路的带宽(开销)。区别于RIP路由器之间交互的路由信息,OSPF路由器同步的是最原始的链路状态信息,而且对于邻居路由器发来的链路状态信息,仅作转发。最终所有路由器都将拥有一份相同且完整的原始链路状态信息。为…

    2022年10月15日
    0
  • matlab——for循环「建议收藏」

    matlab——for循环「建议收藏」简单for循环for循环用来循环处理数据。例:输出1~100的和>>clear>>sum=0;>>fori=1:100sum=sum+i;end>>sumsum=5050解释:i从1到100,每次增加一个,该共循环100次注意:分号的位置;不能使用“+=”符号…

    2022年6月25日
    36
  • javascript如何定义类

    javascript如何定义类

    2021年8月5日
    58

发表回复

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

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