cgroups

Docker 基础技术之 Linux cgroups 详解

徘徊边缘 提交于 2020-11-08 11:21:26
点击上方蓝色字体 “ aCloudDeveloper ” 关注 云计算领域大小事,你都能尽在掌握 前面两篇文章我们总结了 Docker 背后使用的资源隔离技术 Linux namespace,本篇将讨论另外一个技术——资源限额,这是由 Linux cgroups 来实现的。 cgroups 是 Linux 内核提供的一种机制,这种机制可以根据需求把一系列任务及子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。(来自 《Docker 容器与容器云》) 通俗来说,cgroups 可以限制和记录任务组(进程组或线程组)使用的物理资源(包括 CPU、内存、IO 等)。 为了方便用户(程序员)操作,cgroups 以一个伪文件系统的方式实现,并对外提供 API,用户对文件系统的操作就是对 cgroups 的操作。 从实现上来,cgroups 实际上是给每个执行任务挂了一个钩子,当任务执行过程中涉及到对资源的分配使用时,就会触发钩子上的函数对相应的资源进行检测,从而对资源进行限制和优先级分配。 cgroups 的作用 总结下来,cgroups 提供以下四个功能: 资源限制: cgroups 可以对任务使用的资源总额进行限制,如设定应用运行时使用内存的上限,一旦超过这个配额就发出 OOM(Out of Memory)提示。 优先级分配: 通过分配的 CPU

Docker核心技术之Cgroups浅析

人盡茶涼 提交于 2020-11-08 04:18:31
1. Cgroups简介 1.1 功能和定位 Cgroups全称Control Groups,是Linux内核提供的物理资源隔离机制,通过这种机制,可以实现对Linux进程或者进程组的资源限制、隔离和统计功能。 比如可以通过cgroup限制特定进程的资源使用,比如使用特定数目的cpu核数和特定大小的内存,如果资源超限的情况下,会被暂停或者杀掉。 Cgroup是于2.6内核由Google公司主导引入的,它是Linux内核实现资源虚拟化的技术基石,LXC(Linux Containers)和docker容器所用到的资源隔离技术,正是Cgroup。 1.2 相关概念介绍 任务(task): 在cgroup中,任务就是一个进程。 控制组(control group): cgroup的资源控制是以控制组的方式实现,控制组指明了资源的配额限制。进程可以加入到某个控制组,也可以迁移到另一个控制组。 层级(hierarchy): 控制组有层级关系,类似树的结构,子节点的控制组继承父控制组的属性(资源配额、限制等)。 子系统(subsystem): 一个子系统其实就是一种资源的控制器,比如memory子系统可以控制进程内存的使用。子系统需要加入到某个层级,然后该层级的所有控制组,均受到这个子系统的控制。 概念间的关系: 子系统可以依附多个层级,当且仅当这些层级没有其他的子系统

Linux课堂笔记 | 进程2——命名空间

元气小坏坏 提交于 2020-10-25 07:04:49
Linux 容器技术(Linux Containers,LXC) Linux 操作系统上提供的一种操作系统级虚拟化 (Operating-system-level virtualization)技术 允许在同一 Linux 内核的基础上对不同进程族的环 境进行划分和隔离。 容器技术使用 Linux 内核提供的 namespace 机制隔离应用环境,同时使用 cgroups 机制限制进程资源 Docker 是 Docker.Inc 发布的一款开源 Linux 容器引 擎,与2013年3月首次发布 Linux cgroups 机制 cgroups 最早在2006年开始由 Google 的工程师发起, 并在2008年1月首次合并到 Linux 主线内核版本 2.6.14 目的 :为加入控制组的进程提供资源的限制和审计 - 这里的”资源”包括进程所使用的 CPU,内存,磁盘 I/O 和网络 Linux 将 cgroup 实现为一个文件系统,通常位于 /sys/fs/cgroup 下 目录下包含 cpu,memory,devices 等资源 可以在相应资源下创建分组写入资源限制 然后将进程加入分组来对进程资源进行控制。 支持 在编译时启用 -逐一指定需要支持的命名空间 -一般性支持总是会编译到内核中 默认命名空间 -没有显式指定的话,则每个进程关联到一个默 认的命名空间 创建 创建新进程 -

二十一、Linux性能优化实战学习笔记- 如何“快准狠”找到系统内存的问题?

我们两清 提交于 2020-10-24 14:33:18
目录 一、内存性能指标 二、进程内存的使用 1、虚拟内存 2、常驻内存 3、共享内存 4、swap内存 5、缺页异常 三、工具 四、迅速分析内存的性能瓶颈 1、思路逻辑图 2、优化思路 一、内存性能指标 已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量。 共享内存 是通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小。tmpfs其实也是一种特殊的缓存 缓存 分两部分: 读取 文件的页缓存 ,用来缓存从磁盘读取的数据,可以加快以后再次访问的速度 Slab 分配器中的可回收内存 缓冲区: 对原始磁盘块的 临时存储 ,用来缓存将要写入磁盘的数据。这样,内核就可以把 分散的写集中起来,统一优化磁盘写入 缓存和缓冲区,就属于可回收内存。它们在内存管理中,通常被叫做 文件页(File-backed Page), 内存映射获取的文件映射页,也是一种常见的文件页。它也可以被释放掉,下次再访问的时候,从文件重新读取 二、进程内存的使用 虚拟内存、常驻内存、共享内存以及 Swap 内存 1、虚拟内存 进程代码段、数据段、共享内存、已经申请的堆内存和已经换出的内存等。这里要注意, 已经申请的内存,即使还没有分配物理内存,也算作虚拟内存。 2、常驻内存 实际使用的物理内存,注意不包括共享内存和swap。 常驻内存一般会换算成占系统总内存的百分比,也就是 进程的内存使用率 3

Docker使用小技巧

泪湿孤枕 提交于 2020-10-15 21:02:34
Docker常用方法 Docker简介 docker通过内核虚拟化技术(namespace及cgroups等)来提供容器的资源隔离与安全保障等,由于docker通过操作系统层的虚拟化实现隔离,所以docker容器在运行时,不需要类似虚拟机额外的操作系统开销,提供资源利用率。 Docker优点 标准化应用发布 docker容器包含了运行环境和可执行程序,可以跨平台和主机使用 环境标准化 方便持续集成,提供从运维到测试再到开发的统一运行环境 节约时间 快速部署和启动,VM启动一般是分钟级,docker容器启动是秒级 节省开支 更高的物理机使用效率;虚拟机至少需要几个GB的磁盘空间,docker容器可以减少到MB级 Docker常用命令 安装 以Ubuntu为例: sudo apt install -y update sudo apt-get install -y docker.io 拉取镜像使用阿里云加速器解决方法 首先打开配置文件daemon.json,没有就创建一个,添加以下内容 { "registry-mirrors":["https://cabcj35w.mirror.aliyuncs.com"], "dns": ["114.114.114.114", "8.8.8.8"] } sudo systemctl daemon-reload sudo systemctl

Linux离线安装docker&docker-compose

南楼画角 提交于 2020-08-14 08:48:23
1.安装docker 1.1 下载docker离线安装包   下载地址     链接:https://pan.baidu.com/s/1GLXoyQ9ZrFpiq-iAzqdg6A     提取码:nf7s 1.2 安装   1、解压     tar -xvf docker-18.06.1-ce.tgz   2、将解压出来的docker文件内容移动到 /usr/bin/ 目录下     cp docker/* /usr/bin/   3、将docker注册为service     vim /etc/systemd/system/docker.service   4.将下列配置加到docker.service中并保存    [Unit] Description = Docker Application Container Engine Documentation =https: // docs.docker.com After=network- online.target firewalld.service Wants =network- online.target [Service] Type = notify # the default is not to use systemd for cgroups because the delegate issues still #

docker cgroup 技术之memory(首篇)

徘徊边缘 提交于 2020-08-14 08:16:27
  测试环境centos7 ,内核版本4.20 内核使用cgroup对进程进行分组,并限制进程资源和对进程进行跟踪。内核通过名为cgroupfs类型的虚拟文件系统来提供cgroup功能接口。cgroup有如下2个概念: subsystem:用于控制cgroup中的进程行为的内核组件,可以在/proc/cgroups查看所有支持的subsystem,subsystem也别称为resource controller;第二列为croup id;第三列为cgroup中进程数目。 # cat /proc/ cgroups #subsys_name hierarchy num_cgroups enabled cpuset 8 6 1 cpu 7 105 1 cpuacct 7 105 1 blkio 5 105 1 memory 3 327 1 devices 6 106 1 freezer 4 6 1 net_cls 2 6 1 perf_event 11 6 1 net_prio 2 6 1 hugetlb 9 6 1 pids 12 106 1 rdma 10 1 1 hierarchy:由cgroup组成的层级树,每个hierarchy都对应一个cgroup虚拟文件系统,每个hierarchy都有系统上的所有task

GreenPlum GPCC6.0 workload配置

☆樱花仙子☆ 提交于 2020-08-11 05:57:40
最近在接触GPCC 6.0 的安装,官方文件给出了使用cgroups来控制资源的分配。 一、创建配置文件 vim /etc/cgconfig.d/gpdb.conf group gpdb { perm { task { uid = gpadmin; gid = gpadmin; } admin { uid = gpadmin; gid = gpadmin; } } cpu { } cpuacct { } cpuset { } memory { } } 二、启动cgroup服务 该服务依赖 gconfig.d]# /etc/init.d/cgconfig restart Stopping cgconfig service: [ OK ] Starting cgconfig service: [ OK ] 如果启动失败,检查一下参数设定格式是否存在问题,然后cgclear,再开启 三、 检查cgroup目录是否创建成功。 成功之后会有如下信息。 gpdb]# ll total 0 --w--w---- 1 gpadmin gpadmin 0 May 28 20:54 cgroup.event_control -rw-rw-r-- 1 gpadmin gpadmin 0 May 28 20:54 cgroup.procs -rw-rw-r-- 1 gpadmin gpadmin 0

温故知新:Docker基础知识知多少

北城余情 提交于 2020-08-10 02:38:33
记得之前曾经粗略的写过一篇Docker的基础及ASP.NET Core部署Docker示例的 入门文章 ,但那个时候刚刚学习Docker对Docker的认知还比较浅,现在重新来温故知新一下。此外,本篇已加入《 .NET Core on K8S学习实践系列文章索引 》,可以点击查看更多容器化技术相关系列文章。 一、容器的用途   首先,我们来温习一下Docker的几个用途,亦或者说 Docker到底帮我们解决什么问题? 1、标准化打包   记得在容器技术出来之前,我们开发者进行打包一般都依赖于各自开发语言平台独有的打包机制,比如.NET和Java平台下都会依赖于各自不同的发布部署技术,但在容器技术出来之后,不管是.NET还是Java都会将其发布为 容器镜像 推送到镜像仓库中来进行复用。 2、隔离   每个容器在运行时都会认为自己是独自占有了一台机器,即一个独立的环境互不干扰。其实, 容器的本质是一个进程 ,进程与进程之间相互隔离造就了容器与容器互不影响的特性。在启动一个容器(即创建一个进程时), 通过 Namespace 技术实现容器的隔离、通过 Cgroups 来实现容器的资源控制 。   关于Namespace 和 Cgroups 可以继续浏览本文3.3小节。 3、标准化部署   在容器技术出来之前,和打包机制一样,我们都依赖于具体开发语言平台的部署机制,比如IIS

Linux性能优化从入门到实战:22 综合篇:性能问题的分析与优化总结、工具速查

可紊 提交于 2020-08-06 13:48:45
一、分析总结 系统是应用的运行环境,系统的瓶颈会导致应用的性能下降; 而应用的不合理设计,也会引发系统资源的瓶颈。 (1)CPU 性能分析 (2)内存性能分析 (3)磁盘和文件系统 I/O 性能分析 (4)网络性能分析 (5)应用程序瓶颈分析 1)strace,观察系统调用; 2)perf 和火焰图,分析热点函数; 3)动态追踪技术,来分析进程的执行状态。     二、优化总结 (1)CPU 优化 核心在于排除所有不必要的工作、充分利用 CPU 缓存并减少进程调度对性能的影响。 1)把进程绑定到一个或者多个 CPU 上,充分利用 CPU 缓存的本地性,并减少进程间的相互影响。 2)为中断处理程序开启多 CPU 负载均衡,以便在发生大量中断时,可以充分利用多 CPU 的优势分摊负载。 3)使用 Cgroups 等方法,为进程设置资源限制,避免个别进程消耗过多的 CPU。同时,为核心应用程序设置更高的优先级,减少低优先级任务的影响。 (2)内存优化 核心是解决内存使用的问题,如 可用内存不足、内存泄漏、Swap 过多、缺页异常过多以及缓存过多等。 1)除非有必要,Swap 应该禁止掉。这样就可以避免 Swap 的额外 I/O ,带来内存访问变慢的问题。 2)使用 Cgroups 等方法,为进程设置内存限制。这样就可以避免个别进程消耗过多内存,而影响了其他进程。对于核心应用,还应该降低