当前位置: 首页 > news >正文

容器docker的ulimit

Ulimit

在linux里ulimit命令可以对shell生成的进程的资源进行限制。

常用的ulimit限制

  • 打开文件句柄数
  • core文件大小
  • 设置进程能够消耗的虚拟内存
  • 设置用户能够打开的进程数目

不太常用的ulimit限制

设置数据段的最大值.单位:kbytes
设置创建文件的最大值.单位:blocks
设置在内存中锁定进程的最大值.单位:kbytes
设置可以使用的常驻内存的最大值.单位:kbytes
设置内核可以同时打开的文件描述符的最大值.单位:n
设置管道缓冲区的最大值.单位:kbytes
设置堆栈的最大值.单位:kbytes
设置CPU使用时间的最大上限.单位:seconds

ulimit设置限制的两条水线

ulimit设置限制的时候会设置两条线soft和hard线,当资源到达了soft线那么只是告警,如果达到了hard线那么内核就强制限制了。

在docker里使用ulimit限制

从上面小节中可以看到linux系统可以通过配置ulimit对很多资源进行限制。在docker内部如何使用ulimt这个工具便利性呢。

在dockerd中为所有容器配置默认的ulimit

  • 在/etc/docker/daemon.json里通过

“ulimit”:ulimit-resource=M:N 对所有容器默认某个资源进行限制。

表2-1

上表中M为soft水线,N为hard水线。如果“=”右边只有一个那么同时设置soft水线=hard水线

  • 在dockerd启动参数中设置
    这种方式是指通过修改docker.service文件或者直接命令行启动dockerd的方式

--default-ulimit unlimit-resources=M:N

表2-2

表2-2中的M和N和表2-1中的同义

在docker run时为某个容器设置ulimit

除了在dockerd里设置容器的默认ulimit值,还可以为某个容器指定一个的ulimit值。这借助在docker run时带参数

--ulimit ulimit-resources=M:N

表2-3
表2-3中的M和N和表2-1中同意义

docker中能够设置的ulimit参数

常用的docker ulimit设置项

参数意义例子
nofileshell进程打开文件数目docker run --ulimit nofile=20
core进程生成core文件的尺寸docker run --ulimit core =-1 //开启进程core
nprocshell能打开的进程多少Na
fsize进程写文件的最大尺寸na

其他docker ulimit设置项

参数意义例子
cpuulimit cpu 限制进程能够使用的cpu资源,单位为s。当达到soft线后触发SIGXCPU,默认为杀死进程(可以忽略此信号)。达到hard线后,发送SIGKILLna
dataulimit datana
locksulimit locksna
memlockulimit memlockna
msgqueueulimit msgqueuena
Niceulimit nicena
rssulimit rssna
rtprioulimit rtpriona
rttimeUlimit rttimena
Sigpendingulimit sigpendingna
stackulimit stackna

Docker里如何实现ulimit的传递

ulimit参数定义和解析

docker里对ulimit参数的定义在go-unit/ulimit.go里,这里定义了docker可以传递的ulimit参数。

  • 参数解析是通过
    opts/ulimit.Set()设置内部结构
    opts/ulimit.GetList()取用
  • 参数解析过程
    NewRunCommand()/NewCreateCommand() --->opts.AddFlags()—->pflag.FlagSet.Var()解析命令行传递过来的ulimit参数,FlagSet最终调用opts/ulimit.Set()将命令行传递的参数转换为内部格式。
    Container.runCreate()—>runconfigopts.Parse==opts.Parse()将内部格式转换为container.HostConfig格式。而这个HostConfig格式最终变成一个runc的spec(config.json)里的hostconfig字段rlimit。
    而runc解析configxx.json,完成ulimit配置。
http://www.lryc.cn/news/482899.html

相关文章:

  • 一、HTML
  • 使用Geekbench6软件对真实和虚拟的苹果桌面系统(macOS)进行打分比较
  • lua入门教程:随机数
  • 华为大咖说 | 浅谈智能运维技术
  • creo toolkit二次开发学习之获取任意选择模型作为元件,并进行获取约束等
  • sanitize-html 防止 XSS(跨站脚本攻击)
  • 【JavaEE】文件io
  • FlinkPipelineComposer 详解
  • 蓝桥杯-洛谷刷题-day2(C++)
  • 16008.行为树(五)-自定义数据指针在黑板中的传递
  • javascript Vue
  • 《揭秘观察者模式:作用与使用场景全解析》
  • 【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题
  • 下划线命名json数组转java对象
  • 实测运行容器化Nginx服务器
  • 显示器接口种类 | 附图片
  • C++初阶——list
  • 软件设计师-排序算法
  • 即插即用篇 | YOLOv8 引入 代理注意力 AgentAttention
  • 020_Servlet_Mysql学生选课系统(新版)_lwplus87
  • LabVIEW导入并显示CAD DXF文件图形 程序见附件
  • 《云原生安全攻防》-- K8s安全防护思路
  • 鸿蒙系统的发展及开发者机遇
  • Java | Leetcode Java题解之第556题下一个更大元素III
  • OSPF动态路由配置实验:实现高效网络自动化
  • CRM对企业有什么用?如何在实践中有效应用CRM系统?
  • 渗透测试之 -- Linux基础
  • 【excel】easy excel如何导出动态列
  • [Linux] 进程间通信
  • 【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数