破案现场:Docker容器资源限制导致的oom问题

破案现场:Docker容器资源限制导致的oom问题

  • 01 事故现场
  • 02 问题定位
  • 03 对症下药
  • 04 后记

原文来自于微信公众号“运维之美”
https://mp.weixin.qq.com/s?__biz=MzA5NDY1MTM3MA==&mid=2247484902&idx=1&sn=8394aefd884ee09ea546fcd400dd233c&chksm=904a1363a73d9a759bb525771b3e8ebe17948f1820e2c70121fc1fb49e0f528de75030cd815a&token=798793277&lang=zh_CN#rd

01 事故现场

有同事反馈grafana监控大盘无法展示监控数据,prometheus界面一直在starting up状态

在这里插入图片描述

02 问题定位

从现象上感觉prometheus状态肯定不对,查看prometheus容器状态,可以看到prometheus在反复重启,验证了我们的猜想

[localhost@ ~]$ docker ps -a |grep prometheus
e2e973cc7e53  prometheus:v2.42.0     "/opt/bitnami/promet…"   4 days ago   Up 1minutes  prometheus

通过docker logs prometheus日志看到容器确实不断启动,但是没有明显的报错,想着看通过messages日志看看能不能找到什么证据

通过journalctl -p err查看系统日志,看到promethus出现“out of memory”内存溢出的报错
在这里插入图片描述

此时已经接近真相了,出现内存溢出,一般有2种情况

  • 一种是主机物理内存不够了,根据优先级kill掉部分服务

  • 另外一种就是容器有资源限制,超出了内存限制后被oom,防止影响其它服务

经过查看监控节点物理内存还有空余,看看第二种情况,可以从下边看到prometheus内存使用在不断增长

[root@localhost ~]# docker stats prometheusCONTAINER ID   NAME         CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O         PIDS
7ab16bd57127   prometheus   90.60%    7.507GiB / 8GiB     42.59%    0B / 0B   7.54GB / 82.4GB   63CONTAINER ID   NAME         CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O         PIDS
7ab16bd57127   prometheus   96.60%    7.807GiB / 8GiB     42.59%    0B / 0B   7.54GB / 82.4GB   63

由于主机节点较多,监控指标越来越多,prometheus当初定义的内存已经不够使用了,那么解决方案要么是优化上报的数据,另外一个就是增加放宽内存限制

03 对症下药

登录监控节点,执行如下命令,修改内存为超过top命令或者docker stats观察到的最大值执行如下命令更新内存使用限制

注:update命令需要容器状态为up时才能更新成功

docker update --memory=15g  prometheus

可能会出现如下报错

[localhost@02-2 ~]$ docker update --memory=20G prometheus
Error response from daemon: Cannot update container e2e973cc7e535201e121fcc5bcfe1dc12fa91e24fee9e6a0af1636ffd119f482: Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same time

命令修改为如下即可解决,上面报错是由于swap内存限制导致

docker update --memory=15g --memory-swap=15g prometheus

成功破案,问题解决,真的太棒了,后续可以优化业务上报的指标

在这里插入图片描述

04 后记

在docker中可以对容器应用程序的资源进行限制,通过cgroup来控制容器,以确保它们在运行时不会占用过多的系统资源。以下是一些常见的 Docker 资源限制选项

  • 内存限制:可以使用 --memory 或 -m 选项来限制容器可以使用的内存。例如,–memory=1g 表示限制容器使用的内存为
    1GB。超出限制的内存使用可能会导致容器被终止或无法正常运行。

  • CPU 限制:可以使用 --cpus 选项来限制容器可以使用的 CPU 核数。例如,–cpus=0.5 表示限制容器使用的 CPU
    核心为 0.5 个。这个值可以是小数,表示分配的 CPU 资源的相对权重

  • CPU 调度策略:可以使用 --cpu-shares 选项来为容器分配 CPU 时间片的权重。这个值越高,容器获得的 CPU
    时间越多。默认情况下,所有容器的 CPU 权重相等。

  • IO 限制:你可以使用 --blkio-weight 选项来设置容器对 IO 资源的相对权重。默认情况下,所有容器的 IO 权重相等。

  • 网络带宽限制:可以使用 --network 选项来限制容器的网络带宽。例如,–network=none
    表示容器没有网络访问权限,–network=host 表示容器与宿主机共享网络

  • 使用方式

docker run --cpus 0.5 --memory 256M -d node_app

可以在启动时指定资源限制

当使用docker-compose的时候,通过resources资源标签来定义

version: '3'
services:web:image: nginx:latestports:- "8080:80"deploy:resources:limits:cpus: '0.5'memory: 256M

查看运行容器的资源限制

#方式一
docker stats
#方式二
docker inspect nginx | grep -i memory

放松时刻
在这里插入图片描述

最近,我们建立了一个技术交流微信群。有兴趣的同学可以加入和我们一起交流技术,在 「运维之美」 公众号直接回复 「加群」 邀请你入群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

是否有无限提取的代理IP?作为技术你需要知道这些

最近有互联网行业的技术小伙伴问到,有没有可以无限提取的代理IP?就是比如我一秒钟提取几万、几十万次,或者很多台机器同时调用API提取链接,这样可以吗?看到这个问题,不禁沉思起来,其实理论上是存…

python基础教程:动态参数

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python的动态参数有两种,分别是*args和**kwargs, 这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别&#…

js粒子效果(二)

效果: 代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Particle Animation</title><…

一篇文章让你入门python集合和字典

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、集合: 增加 add 删除 del 删除集合 discard(常用)删除集合中的元素 &#xff0c;删除一个不存在的元素不会报错 remove 删除一个不存在的元素会报错 pop随…

【点云surface】Poisson表面重建

1 介绍 Poisson表面重建算法是一种用于从点云数据生成平滑曲面模型的算法。它基于Michael Kazhdan等人在2006年发表的论文《Poisson surface reconstruction》。该算法通过将点云数据转换为体素表示&#xff0c;并利用Poisson方程来重建曲面。 该算法的基本原理是将点云数据转…

训练日志——wandb

目录 安装与登录基础使用与可视化常用函数wandb.init()wandb.config()wandb.log()wandb.finish()wandb.watch() 参考 安装与登录 安装 pip install wandb注册并登录 https://wandb.ai/site客户端登陆 在终端中输入wandb login 然后出现You can find you API key的一串网站&am…

【MinIO】几个有用的方法

在windows总安装Minio 进入网址 在Windows安装时&#xff0c;选择相应的exe文件下载&#xff0c;下载到本地后&#xff0c;使用如下的命令即可在前台启动&#xff1a; minio.exe server D:\your_path 或者将该路径写进环境变量的path中&#xff0c;用来为minio指定数据存储…

【Java程序员面试专栏 专业技能篇】Java SE核心面试指引(三):核心机制策略

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:核心机制策略,子节点表示追问或同级提问 异常处理 …

想当老师应该去学什么专业

专业选择是决定未来职业发展的重要步骤&#xff0c;如果你也想成为一名老师&#xff0c;那么这五个专业可能会适合你&#xff01; 教育学专业 教育学专业是培养教育理论和方法的学科&#xff0c;这些理论知识将帮助你理解教学过程、学生发展、课程设计和评估。该专业将让你全面…

【沐风老师】在3dMax中如何把对象随机散布在表面上?

在3dMax中如何把对象随机散布在表面上&#xff1f; 在这个教程中&#xff0c;给大家讲解在3dMax中如何把对象随机散布到另一个对象的表面上。有不少3dMax的初学者在将对象分布在随机表面上时感到手足无措。如果&#xff0c;将每个对象手动放置在表面上并花时间调整每个对象根本…

怎么当代课老师教学生

老师朋友们&#xff0c;有没有帮忙当过代课老师呢&#xff1f;或者&#xff0c;没当过的老师是不是对这种职业充满了好奇&#xff1f;让我来分享一下&#xff0c;当代课老师的日常是什么样的吧&#xff01; 备课 说起备课&#xff0c;那可是个大工程&#xff01;不过&#xff…

教师编制缩减是为什么

老师们有没有注意到一个趋势&#xff1f;那就是教师编制正在逐步缩减。不知道你们发现没有&#xff0c;我最近在研究教育领域的新闻&#xff0c;发现这两年教师编制缩减的消息越来越多。这是为什么呢&#xff1f;今天就来跟大家聊一聊。 原因一&#xff1a;资金压力 第一个原因…

2-10岁女童穿搭 I 看的见的时尚感

分享女儿的时尚穿搭—连帽加绒卫衣 简单易搭怎么穿都好看的卫衣 红色吸睛又显肤色&#xff0c;不挑人穿 面料亲肤柔软&#xff0c;保暖性也很棒 单穿内搭都能轻松打造时尚造型&#xff01;&#xff01;

《微信小程序开发从入门到实战》学习二十八

3.4 开发参与投票页面 3.4.3 使用radio单项选择器组件 逻辑层的数据已经准备好&#xff0c;现在实现视图层的页面展示。 投票的标题、&#xff0c;描述、截止日期、是否匿名等信息通过view和text组件就可以展示。比较特别的是投票选项的展示&#xff0c;涉及到单选还是多选&…

中职组网络安全-Windows操作系统渗透测试 -20221219win(环境+解析)

B-4:Windows操作系统渗透测试 任务环境说明: 服务器场景:20221219win 服务器场景操作系统:Windows(版本不详)(封闭靶机) 1.通过本地PC中渗透测试平台Kali对服务器场景Server08进行系统服务及版本扫描渗透测试,并将该操作显示结果中1433端口对应的服务版本信息作为F…

excel一个单元格换行方法

要是在同一个单元格内输入文字输入不下的话&#xff0c;我们是可以进行同一个单元格换行设置的&#xff0c;而且换行的方法也是有很多种&#xff0c;下面我们就一起来看一下有哪些方法吧。 excel一个单元格换行方法&#xff1a; 方法一&#xff1a; 1、我们可以直接按下alte…

接口自动化测试是个啥?如何开始?什么是框架?带你揭开神秘面纱

自动化测试 自动化测试&#xff0c;这几年行业内的热词&#xff0c;也是测试人员进阶的必备技能&#xff0c;更是软件测试未来发展的趋势。 特别是在敏捷模式下&#xff0c;产品迭代速度快&#xff0c;市场不断调整&#xff0c;客户需求不断变化&#xff0c;单纯的手工测试越…

电子学会C/C++编程等级考试2021年12月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。 时间限制:1000 内存限制:65536输入 第一行1个整数n、,分别表示序列的长。(0 < n…

Mysql数据库 20.DCL数据控制语言

因这类SQL语言开发人员操作较少&#xff0c;主要是数据库管理员&#xff08;DBA&#xff09;使用&#xff0c;所以前文没有提及&#xff0c;这篇文章进行补充说明 DCL数据控制语言 用来管理数据库用户&#xff0c;控制数据库的访问权限 1.管理用户 1.1 查询用户 select * f…

揭秘:如何精准定位性能瓶颈,优化系统性能?

你好&#xff0c;我是小濠&#xff0c;目前在一家准一线互联网大厂做测试开发工程师。对于一般公司普通测试工程师来说&#xff0c;可能性能测试做的并不是很复杂&#xff0c;可能只是编写下脚本&#xff0c;做个压测&#xff0c;然后输出报告结果&#xff0c;瓶颈分析和调优的…