如何在Docker内部使用ulimit——如何在docker内部生成core
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设置项
参数 | 意义 | 例子 |
---|---|---|
nofile | shell进程打开文件数目 | docker run --ulimit nofile=20 |
core | 进程生成core文件的尺寸 | docker run --ulimit core =-1 //开启进程core |
nproc | shell能打开的进程多少 | Na |
fsize | 进程写文件的最大尺寸 | na |
其他docker ulimit设置项
参数 | 意义 | 例子 |
---|---|---|
cpu | ulimit cpu 限制进程能够使用的cpu资源,单位为s。当达到soft线后触发SIGXCPU,默认为杀死进程(可以忽略此信号)。达到hard线后,发送SIGKILL | na |
data | ulimit data | na |
locks | ulimit locks | na |
memlock | ulimit memlock | na |
msgqueue | ulimit msgqueue | na |
Nice | ulimit nice | na |
rss | ulimit rss | na |
rtprio | ulimit rtprio | na |
rttime | Ulimit rttime | na |
Sigpending | ulimit sigpending | na |
stack | ulimit stack | na |
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配置。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云香港VPS综合测评-海外服务器2折起
如果我们有准备中文网站长期使用,建议还是选择国内的机房,比如上海、杭州、青岛、北京、深圳等都是可以用的。虽然需要BA域名,但是正常的手续都需要办法,因为BA的域名后续如果使用可以使用到一些附加产品,比如CDN、云存储等与之结合是最佳的选择。不过,如果我们不希望BA域名,那如果需要速度较好的服务器机房,建议选择香港机房,阿里云香港服务器速度与国内速度差不多。而且最近阿里云香港服务器打2折活动 >> 点击直达 这篇文章中,我们就一起看看阿里云香港服务器的速度,以及对于常规数据的评测性能。便于我们网友选择阿里云香港服务器提供一些参考建议帮助。(参考:最新阿里云代金券/阿里云优惠券活动汇总) 第一、阿里云香港服务器PING速度 我们可以看到PING速度对于国内节点速度是很快的。 第二、路由追踪回程测试 第三、配置信息 CPU 型号 : Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHzCPU 核心数 : 1CPU 频率 : 2494.222 MHz总硬盘大小 : 40.0 GB (5.3 GB Used)总内存大小 : 996 MB (933 MB ...
- 下一篇
阿里云服务器怎么样?阿里云购买了肯定不会后悔的!
阿里云服务器怎么样、云服务器如何选择等问题是打算上云的用户常常问的最多的问题,阿里云在国内云计算领域的地位是毋庸置疑的,市场占有率早已超过了半壁江山,阿里云起步早,面对各领域有成熟的解决方案,不选阿里云选谁呢? 底层架构我国春节时段的返乡大迁徙场面壮观吧?大家再来感受下天猫双十一或者春晚抢红包等活动,这看不见的数据大迁徙可比春节返乡壮观多了,过年你往返一次吧,双十一你都快把鼠标点烂了,春晚都要把手机摇吐了,你见天猫或者支付宝崩溃了吗?你购买的ECS云服务器与天猫、支付宝使用的为同一架构。阿里云能够抗住双十一,就能抗住你的业务。 云服务器ECS是基于飞天系统的底层架构,飞天(Apsara)是阿里云自主研发的底层系统。 云服务器CPU 据说阿里云使用CPU是找Intel专门定制的,是不是定制不太清楚,但是有一点可以肯定的是阿里云与其他小厂的区别在于不会超卖,你就是买了32核的CPU,如果从遇到超卖的服务商,那只是个数而已。 但是阿里云最近推出的那个突发性能t5实例,被大家诟病,其实这个t5只是大家用错了地方。首先这个t5价格便宜,这是毋庸置疑,但是这个t5限制CPU使用率啊,这一点没搞清楚...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果