容器内存

news2024/10/7 14:32:49

一、容器内存概述

容器本质上还是一个进程,是一个被隔离和限制的进程。因此容器内存和进程内存在表现形式上其实是一样的,这块主要涉及三部分内容:RSS,page cache和swap这三部分,容器基于memory Cgroup对内存进行限制,但是具体限制的什么呢?又有哪些参数可以对其进行控制呢?

二、容器进程被莫名kill掉

在linux中当一个进程使用malloc申请分配内存的时候,操作系统并不会立即给该进程分配真实的物理存,此时分配的其实是虚拟内存。因此进程是可以申请超过物理内存上限的内存。为啥要这么设计呢?因为空闲内存空间是不断变化的,有进程申请必然有进程归还,此时申请的时候不够,谁能保证下一个时刻还不够呢?因此才有这个overcommit机制。
但是当一个进程在不断向内存中写数据的时候,如果内存还是不够用,此时就会OOM,被操作系统kill掉,毕竟不能把数据写到别的进程的内存空间中去,也算是一种保护机制。
当然kill掉是容器的默认行为,具体的这个行为是可以通过参数设置的。
其中43fxxxxxx 是容器的id,也就是每个容器都可以对其进行控制
image.png
还有几个比较重要的参数
image.png
从文件名称也可以看出来分别是最大限制,和当前使用。
每个运行的容器下面都有这些文件,可以自定义合适的参数值。

三、容器与page cache

进程除了有自己独立的RSS内存,如果涉及到文件的读写,linux还会为进程分配page cache,什么是page cache呢,page cache是操作系统在读写磁盘上的文件的时候,操作系统为了提升性能会预加载一部分内容到空闲的内存中来,而这部分空闲的内存则称为page cache。
但是如果没有空闲内存,而进程由要申请新的内存,则会回收page cache。保证内存供进程使用。
而上面提到的memory.usage.in_bytes = RSS + page cache
因此在某些情况下,memory.usage.in_bytes 是大于memory_limit_in_bytes的,但是不用担心,因为page cache是自动回收的。
因此查看容器的真实的内存占用,查看memory.usage.in_bytes 是不准的,需要看:
image.png
page cache不属于传统的内存限制范畴,是操作系统用来缓存文件的,不属于用户,属于操作系统内核,每个容器都可以使用page cache。
image.png
红色的部分就是page cache。
在关注容器的内存占用的时候,主要关注RSS。

四、容器和swap

swap其实并不是一块内存空间,而是一块磁盘空间,不过操作系统有时会将这块磁盘空间当作内存使用而已。当内存写满的时候,操作系统可以将一部分不用的数据暂时存放到swap空间上,待需要的时候再从swap中加载进来。
那么当内存紧张的时候,操作系统是会选择先释放page cache呢还是先把冷数据放到swap中去呢?
这个可以针对每一个容器进行定制化,具体修改下面这个配置文件:
image.png
swappiness的取值范围在0到100之间,

  • 值为100的时候, 释放Page Cache和写冷数据到swap是同等优先级的。
  • 值为60,这是大多数Linux系统的缺省值,这时候Page Cache的释放优先级高于写冷数据到swap。
  • 值为0的时候,会限制该容器中的进程使用swap空间,仅对该容器生效

容器级别的swappiness会覆盖操作系统级别的。
因此swap也不属于传统内存的限制范畴,每个容器都可以使用。

五、总结

memory cgroup 限制的是容器真正使用到的内存,对于swap和page cache 都是内核级别的,是由操作系统进行管理的,是所有进程共享的,是不能被memory cgroup所限制的。

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

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

相关文章

k8s部署单机版mysql8

一、创建命名空间 # cat mysql8-namespace.yaml apiVersion: v1 kind: Namespace metadata:name: mysql8labels:name: mysql8# kubectl apply -f mysql8-namespace.yaml namespace/mysql8 created# kubectl get ns|grep mysql8 mysql8 Active 8s二、创建mysql配…

某网页gpt的JS逆向

原网页网址 (base64) 在线解码 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei8 逆向效果图 调用代码(复制即用) 把倒数第三行换成下面的base64解码 aHR0cHM6Ly9jbGF1ZGUzLmZyZWUyZ3B0Lnh5ei9hcGkvZ2VuZXJhdGU import hashlib import time import reques…

Python学习篇:PyCharm的基本使用教程(二)

目录 1 前言 2 创建Python项目 3 创建Python文件 4 编写 Hello World 并运行 5 PyCharm界面简介 1 前言 PyCharm的使用贯穿整个Python的学习,所以单独拿出来出教程不合适,说多了对于新手来说也还是不明白,这里我们先从学习开始前大家需…

【仪器仪表】 矢量网络分析仪 Vector Network Analyzer

主要功能: 测量S参数: S11(输入反射系数):测量输入端口的反射。S21(正向传输系数):测量从输入端口到输出端口的传输。S12(反向传输系数):测量从输…

【后端面试题】【中间件】【NoSQL】MongoDB的配置服务器、复制机制、写入语义和面试准备

MongoDB的配置服务器 引入了分片机制之后,MongoDB启用了配置服务器(config server) 来存储元数据,这些元数据包括分片信息、权限控制信息,用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。 MongoDB的配置服务器有一个很大的优…

全网小视频去水印接口使用说明

一、请求地址: https://www.lytcreate.com/api/qsy/ 二、请求方式:POST 三、请求体:JSON body {"token": "个人中心的token","url": "视频分享地址"} token获取地址,访问&#xff…

DP:子序列问题

文章目录 什么是子序列子序列的特点举例说明常见问题 关于子序列问题的几个例题1.最长递增子序列2.摆动序列3.最长递增子序列的个数4.最长数对链5.最长定差子序列 总结 什么是子序列 在计算机科学和数学中,子序列(Subsequence)是指从一个序列…

继承QAbstractListModel,结合QListView

这里想要写一个QAbstractListModel的子类&#xff0c;学习一下如何实例化QAbstractListModel。 QAbstractListModel子类化-CSDN博客 QVariant与自定义类型互转之奇巧淫技_qt 类型转 qvariant-CSDN博客 #pragma once#include <QStyledItemDelegate> #include <qmeta…

012-GeoGebra基础篇-构造圆的切线

前边文章对于基础内容已经悉数覆盖了&#xff0c;这一篇我就不放具体的细节&#xff0c;若有需要可以复刻一下 目录 一、成品展示二、算式内容三、正确性检查五、文章最后 一、成品展示 二、算式内容 A(0,0) B(3,0) c: Circle(A,B) C(5,4) sSegment(A,C) DMidpoint(s) d: Circ…

javaEE——Servlet

1.web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行交互 2.java后端开发环境搭建 web后端(javaEE)程序需要运行在服务器中的&#xff0c;这样前端才可以访问得到 3.服务器是什么&#xff1f; ①服务器就是一款软件&#xff0c;可以向其发送请求&#…

分解+降维+预测!多重创新!直接写核心!EMD-KPCA-Transformer多变量时间序列光伏功率预测

分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;EMD-KPCA-Transformer多变量时间序列光伏功率预测 目录 分解降维预测&#xff01;多重创新&#xff01;直接写核心&#xff01;EMD-KPCA-Transformer多变量时间序列光伏功率预测效果一览基本介绍程序设计参…

嵌入式学习——硬件(Linux系统在2440上的启动)——day57

1. Linux2.6系统在s3c2440上的启动过程分三个阶段 1.1 启动u-boot 1.2 启动Linux内核 1.3 挂载根文件系统 2. bootloader 2.1 定义 bootloader的本质是一个裸机程序&#xff0c;bootlood专门是为了能够正确地启动linux操作系 统&#xff0c;在系统初上电时需要对系统做一些…

中霖教育怎么样?咨询工程师备考技巧

中霖教育怎么样?咨询工程师备考技巧 在备考咨询工程师的过程中&#xff0c;掌握正确的方式方法能够少走很多弯路&#xff0c;所以想取得好成绩采用恰当的备考技巧是非常重要的。 1、了解题型及考试结构 在准备阶段&#xff0c;理解各类型题目的特征和作答要求&#xff0c;确…

github仓库的基本使用-创建、上传文件、删除

1.第一步 先点击左侧菜单栏的远程仓库 2.点击NEW 3.创建仓库 然后点击右下角的 CREATE 4.点击code 点击SSH,然后我出现了You don’t have any public SSH keys in your GitHub account. You can add a new public key, or try cloning this repository via HTTPS. 1&#xff…

【JavaEE精炼宝库】多线程进阶(2)synchronized原理、JUC类——深度理解多线程编程

一、synchronized 原理 1.1 基本特点&#xff1a; 结合上面的锁策略&#xff0c;我们就可以总结出&#xff0c;synchronized 具有以下特性(只考虑 JDK 1.8)&#xff1a; 开始时是乐观锁&#xff0c;如果锁冲突频繁&#xff0c;就转换为悲观锁。 开始是轻量级锁实现&#xff…

成人职场商务英语学习柯桥外语学校|邮件中的“备注”用英语怎么说?

在英语中&#xff0c;"备注"通常可以翻译为"Notes" 或 "Remarks"。 这两个词在邮件中都很常用。例如: 1. Notes Notes: 是最通用和最常见的表达&#xff0c;可以用在各种情况下&#xff0c;例如&#xff1a; 提供有关电子邮件内容的附加信息 列…

Mysql并发控制和日志

文章目录 一、并发控制锁机制事务&#xff08;transactions&#xff09;事务隔离级别 二、日志事务日志错误日志通用日志慢查询日志二进制日志 备份在线查看二进制离线查看二进制日志 一、并发控制 锁机制 锁类型&#xff1a; 读锁&#xff1a;共享锁&#xff0c;也称为 S 锁…

ANSYS新能源汽车动力电池仿真应用案例

燃料电池是一种非燃烧过程的电化学能转换装置&#xff0c;将氢气&#xff08;等燃料&#xff09;和氧气的化学能连续不断地转换为电能&#xff0c;是发电设备而非储能设备。 根据电解质的不同&#xff0c;分为碱性燃料电池AFC、磷酸燃料电池PAFC、熔融碳酸盐燃料电池MCFC、固体…

电信NR零流量小区处理

【摘要】随着目前网络建设逐步完善&#xff0c;5G用户的不断发展&#xff0c;针对零流量小区的分析及处理存在着必要性&#xff0c;零流量小区的出现既是用户分布及行为的直观体现&#xff0c;也是发展用户的一个指引&#xff0c;同时也能发现设备的一些故障。一个站点的能够带…

【Python】MacBook M系列芯片Anaconda下载Pytorch,并开发一个简单的数字识别代码(附带踩坑记录)

文章目录 配置镜像源下载Pytorch验证使用Pytorch进行数字识别 配置镜像源 Anaconda下载完毕之后&#xff0c;有两种方式下载pytorch&#xff0c;一种是用页面可视化的方式去下载&#xff0c;另一种方式就是直接用命令行工具去下载。 但是由于默认的Anaconda走的是外网&#x…