容器异常退出,通过docker ps -a查看当前容器状态

状态码   描述

0         表示正常退出

非 0       表示异常退出(退出状态码采用 chroot 标准)

125      Docker 守护进程本身的错误

126      容器启动后,要执行的默认命令无法调用

127      容器启动后,要执行的默认命令不存在

137      表明容器收到了 SIGKILL 信号,进程被杀掉,对应kill -9

139      表明容器收到了 SIGSEGV 信号,无效的内存引用,对应kill -11

143      表明容器收到了 SIGTERM 信号,终端关闭,对应kill -15

通过docker inspect container查看容器状态

若"OOMKilled"为true,"ExitCode"为137,代表内存不足导致容器退出,如下图:

由于linux对大部分申请内存的请求都是yes,以便于运行更多的程序,因此可能造成申请内存超出可用内存的情况(OOM),发生OOM后,linux会根据响应的判断标准杀掉进程

内存超出后常见的有以下几种办法可以解决这种情况

1、内存扩容   简单粗暴,直接有效,需要成本

2、容器运行时指定内存

-m,--memory 内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M

--memory-swap 内存+交换分区大小总限制。格式同上。必须必-m设置的大

--memory-reservation 内存的软性限制。格式同上

--oom-kill-disable 是否阻止 OOM killer 杀死容器,默认没设置

--oom-score-adj 容器被 OOM killer 杀死的优先级,范围是[-1000, 1000],默认为 0

--memory-swappiness 用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数

--kernel-memory 核心内存限制。格式同上,最小为 4M

3、使用top命令查看进程内存使用率,杀掉占用率较高的内存

本次介绍另一种方式,清除缓存从而释放内存,比较通用,即使内存没有超出,也可以定期检查内存使用情况,从而尽量避免内存超出的情况

执行free -m 查看当前系统内存占用情况,如果持续执行,可以看到缓存一直在上升,那么迟早会出现内存不够用的情况

清除缓存的命令:

To free pagecache:仅清除页面缓存(PageCache)

echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:清除目录项和inode

echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:清除页面缓存,目录项和inode

echo 3 > /proc/sys/vm/drop_caches

为了方便,可以将清除命令封装为脚本,定时执行

脚本如下:

功能:监测系统剩余内存占总内存的百分比,当内存使用率超过80%时,则执行清除缓存的命令

free_memory.sh

#!/bin/bash

#系统分配的区总量

mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`

echo $mem_total

#当前剩余的大小

mem_free=`free -m | awk 'NR==2' | awk '{print $4}'`

echo $mem_free

#当前已使用的used大小

mem_used=`free -m | grep Mem | awk '{print $3}'`

if (($mem_used != 0)); then

#如果已被使用,则计算当前剩余free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0

mem_per=0`echo "scale=2;$mem_free/$mem_total" | bc`

echo $mem_per

DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per"

echo $DATA >> /root/wanghaonan/Script/log/mem_detect.log

#设置的告警值为20%(即使用超过80%的时候告警)。

mem_warn=0.20

#当前剩余百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )

mem_now=`expr $mem_per \> $mem_warn`

#如果当前使用超过80%(即剩余小于20%,上面的返回值等于0),释放内存

if (($mem_now == 0)); then

sync

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

#将release memory OK !写入temp文件夹的memstat_日期.log日志中

echo "--->release memory OK ! " >>/root/wanghaonan/Script/log/memstat_$(date +%Y%m%d_%H%M%S).log

fi

fi

创建crontab定时任务执行脚本:

执行crontab -e,编辑定时任务即可,此处设置的是每两个小时检测一遍

docker-内存不足导致容器异常退出时怎么办相关推荐

  1. 如何定位导致程序异常退出的Bug?

    一 引言 我们写代码的时候经常会遇到一些Bug导致程序异常退出,比如访问了空指针.在大多数情况下,我们能够根据经验和IDE本身提供的调试功能来定位问题,并找到解决方案.但最近在工作中遇到了一个问题,一 ...

  2. 安卓软件错误log_Android编程实现捕获程序异常退出时的错误log信息功能详解

    本文实例讲述了Android编程实现捕获程序异常退出时的错误log信息功能.分享给大家供大家参考,具体如下: 很多时候我们程序无缘无故的就挂掉了,让我们一头雾水,如果刚好我们在调试,那我们可以通过错误 ...

  3. java线程异常终止_java线程莫名异常退出时,如何捕获异常信息

    之前有同事说他的程序里的线程时常莫名退出,日志中没有任何异常信息. 目前我知道的可以获取线程异常信息的方法主要有 1.Future>和ScheduledFuture>的get()方法 2. ...

  4. [ARM异常]-异常进入和异常退出时的arm core的硬件自动的行为

    引流关键词: IRQ,FIQ,Serror, 中断,同步异常,异步异常,TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk, ...

  5. linux c 程序异常退出时打印堆栈调用信息

    先来了解三个函数 #include <execinfo.h> int backtrace(void **buffer, int size); char **backtrace_symbol ...

  6. Docker容器的退出状态码及解决方法

    容器内应用启动异常, 导致容器很快就结束或者构建镜像时失败了等问题 会出现的情况: 容器处于Exited异常退出时,将无法用docker exec进入容器内,会提示该容器不在运行中 docker lo ...

  7. Docker 容器的退出状态码及重启策略

    Docker 容器的退出状态码: 0:表示正常退出 非 0:表示异常退出(退出状态码采用 chroot 标准) 125:Docker 守护进程本身的错误 126:容器启动后,要执行的默认命令无法调用 ...

  8. Docker容器的退出状态和重启策略

    Docker 容器的退出状态码: 状态码 解释 0 表示正常退出 非 0 表示异常退出(退出状态码采用 chroot 标准) 125 Docker 守护进程本身的错误 126 容器启动后,要执行的默认 ...

  9. python强制退出进程时或是异常错误时强制执行某代码:退出处理器

    需求背景: 使用python+selenium做web自动化.脚本异常退出时,需要关闭webdriver的chrome进程,不能让他驻留.本身程序出现异常时,已经用try-except-进行异常捕捉, ...

最新文章

  1. 为什么说重启能解决90%的问题
  2. 过滤驱动加密文件(代码)
  3. 面试题 flex(二)
  4. 【枭·音频】声随意动——浅谈《暗影火炬城》声音设计
  5. Android eMMC 分区详解(转载)
  6. 几个免费高质量图标搜索引擎。
  7. 告诉你,为什么要娶物理系御姐?
  8. 设计模式学习笔记(1)——单例模式
  9. 广外大全国计算机,广外全国计算机等级考试考生人数再创新高
  10. go -生成pb文件 - 上
  11. Everything常见问题及搜索技巧
  12. Python 转 exe
  13. Google(谷歌)走了我们该用什么呢?
  14. speedoffice怎样在word文档中画横线
  15. 关于深度学习云服务器推荐
  16. 旋转的数学表达:欧拉角、轴向角、四元数与矩阵
  17. 使用Hilo做一个H5接金币类小游戏
  18. c语言航班系统使用手册,isagraf_中文操作手册.pdf
  19. 2017.10.12 记者招待会
  20. 知名摄影师、摄影器材专家赵嘉最新最全面的顶级摄影器材图书大系旋风上市!...

热门文章

  1. python学习笔记68-78
  2. 怎么取消手机APP自动续费?详细方法来了,轻松易懂
  3. 信息化环境下企业如何做到数据安全
  4. python写cdr插件_python 写一个scheme解释器(一)
  5. 【小玩意】访客记录查询
  6. GeForce Experience无法登录、WhisperMode无法关闭和Nvidia控制面板闪退
  7. 测试用例,必须这么写....
  8. MTK MT7628芯片方案使用IQXEL的RF射频测试教程
  9. android p是哪个版本,Android P是什么系统?Android P与Android有什么区别?[多图]
  10. 蛇形填数-2020年蓝桥杯C/C++题目解析和代码