版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
那么在容器里,toptopCPU,这是因为我们在容器中运行top命令,虽然可以看到容器中每个进程的CPU使用率,但是topCpu(sCPU机的CPU使用率。12CPU运行top命令。这时我们可以看到,容器里有两个进程threads-cpu,总共消耗了200%的CPU(2CPUUsage),而"%Cpu(s)"那一行的"uscpu"是58.5%。对于12CPU的系统来说,12*58.5%=7.02,也就是说这里显示总共消耗了7个CPU,远远大于容器中2个CPU的消这个例子说明,top这个工具虽然在物理机或者虚拟机上看得到系统CPU开销,但是如果是放在容器环境下,运行top就无法得到容器中总的CPU使用率。那么,我们还有什么其CPUCPU通过问题重现,我们发现top工具主要显示了宿主机系统整体的CPU使用率,以及单个进程的CPU使用率。既然没有现成的工具可以得到容器CPU开销,那我们需要自己开发所以,在解决怎样得到单个容器整体的CPU使用率这个问题之前,我们先来 LinuxCPUCPU进程CPULinuxCPUtoptop行,然后“%CPU”的那一列就是这个进程的实时CPU使用率了。比如说,1001CPU,2002top命令的 源代码。在代码中你会看到对于每个进程,top都会从proc文件系统中每个进程对应的stat文件中2个数值。我们先来看这个文件,再来解读文件中具体的两个数stat/proc/[pid]/stat[pidPID比如PID值为1的进程,这个文件就是/proc/1/stat,那么这个完整的stat文件内容和格式在proc文件系统的Linuxprogrammer’smanual义了。在这里,我们只需要重点关注这两项数值,stat文件中的第14项utime和第15项stime。utimestimeutimeLinux调度中获得CPU的ticks,stime是表示进程的内核态部分在Linux调度中获得CPU的ticksticksLinux在Linux中有个自己的时钟,它会周期性地产生中断。每次中断都会触发Linux内核去做一次进程调度,而这一次中断就是一个tick。因为是周期性的中断,比如1秒钟100次中断,那么一个tick作为一个时间单位看的话,也就是1/100秒。我给你举个例子说明,假如进程的utime是130ticks,就相当于130*1/100=1.3秒,也就是进程从启动开始在用户态总共运行了1.3秒钟。这里需要你注意,utime和stime都是一个累计值,也就是说从进程启动开始,这两个值ticks11T1T2我们就能获得T1时刻的utime_1和stime_1,同时获得T2时刻的utime_2和在这1秒的瞬时,进程用户态获得的CPUticks就是(utime_2–utime_1),进程内核态获得的CPUticks就是(stime_2–stime_1)。那么我们可以推导出,进程CPU总的开销就是用户态加上内核态,也就是在1秒瞬时进程总的CPUticks等于(utime_2–utime_1)+(stime_2–stime_1)。好了,现在我们得到了进程以ticks为单位的CPU开销,接下来还要做个转化。我们怎样才能把这个值转化成我们熟悉的百分比值呢?其实也不难,我们还是可以去top的源代CPUutime_2utime_1)stime_2stime_1*100.0HZ*et*1)utime_2utime_1stime_2stime_1CPUticks。这个其次,我们来看100.0,这里乘以100.0最后,我再讲一下(HZ*et*1)HZticksticks我们的Linux系统里1秒钟是100次,那么HZ就是1秒钟里ticks的次数,这里值是etutime_1utime_2这第三个“11CPU。那么这三个值相乘,你是不是也知道了它的意思呢?就是在这“瞬时”的时间(et)里,1个CPU所包含的ticks数目。进程的CPU(进程的ticks/CPU总ticks)*100.0知道了这个,就需要上手来验证一下这个方法对不对,怎么验证呢?我们可以启动个消耗CPU的小程序,然后一下进程对应的/proc/[pid]/stat中的utime和stime,然后用这个方法来计算一下进程使用率这个百分比值,并且和top的输出对比一下,看先启动一个消耗200PID是10021,CPU使用率是200然后,我们查看这个进程对应的stat文件/proc/10021/stat,间隔1秒钟输出第二次,stat文件内容很多,我们知道utimestime1415项,所以我们这里只截取了前15项的输出。这里可以看到,utime_1=399,stime_1=0,utime_2=600,根据前面的,我们计算一下进程threads-cpu的CPU使用率。套用前面的,计((60039900*100.0100*1*1201201%。你会发现这个值和我们运行top里的值是一样的。同时,我们也就验证了这个是没问题的。系统CPULinuxCPULinux是怎么计算系统的整体CPU使用率的。CPUCPUCPUproc里得到,对于整个系统的CPU使用率,这个文件就是/proc/stat。在/proc/stat文件的cpu这行有10列数据,同样我们可以在proc文件系统的programmer’smanual8top中"%Cpu(s)"那一行里的8项数据,也就是在上一讲中,我们介绍过的user/system/nice/idle/iowait/irq/softirq/steal这8项。而在/proc/statticks时”的CPU使用率,首先就要算出这个“瞬时”的ticks,比如1秒钟的“瞬时”,我们可以记录开始时刻T1的ticks,然后再记录1秒钟后T2时刻的ticks,再把这两者相减,就可以得到这1秒钟的ticks了。这里我们可以得到,在这1秒钟里每个CPU使用率的CPU1的ticks相加得到一个总值,然后拿某一项的ticks值,除以这个总值。比如说计算idleCPU的使用率就是:(1203/0+0+0+1203+0+0+0+LinuxCPU率和系统的CPU使用率。对于单个进程的CPU使用率计算,我们需要对应进程的/proc/[pid]/stat文件,将进程瞬时用户态和内核态的ticks数相加,就能得到进程的总ticks。然后我们运用“(进程的ticks/单个CPU总ticks)*100.0”计算出进程CPU使用率对于系统的CPU使用率,需要/proc/stat文件,得到瞬时各项CPU使用率的前面我们学习了在Linux中,top工具是怎样计算每个进程的CPU使用率,以及系统总的CPU使用率。现在我们再来看最初的问题:为什么在容器中运行top命令不能得到容器中总的CPU使用率?这就比较好解释了,对于系统总的CPU使用率,需要/proc/stat文件,但是这个文件中的各项CPUticks是反映整个节点的,并且这个/proc/stat文件也不包含在任意一个Namespace里。那么,对于topCPU的各项CPU的使用率。既然top命令不行,我们还有没有办法得到整个容器的CPU使用我们之前已经学习过了CPUCgroup,每个容器都会有一个CPUCgroup的控制组。在这个控制组下面有很多参数文件,有的参数可以决定这个控制组里最大的CPU可使用率外,除了它们之外,下面还有一个可读项ccct.stat。这里包含了两个统计值,这两个值分别是这个控制组里所有进程的内核态ticks和用户态的ticks,那么我们就可以用前面讲过的,也就是计算进程CPU使用率的,去计算整个容器的CPU使用率:CPUutime_2–utime_1)+(stime_2–stime_1))*100.0/(HZ*et*1就像下图显示的这样,整个容器的CPU使用率的百分比就是((174021-173820)+(4–4))*100.0/(100*1*1)=201,也就是201%。所以,我们从每个容器的CPUCgroup控制组里的ccct.stat的统计值中,可以比较快地得到整个容器的CPU使用率。Linux里获取CPU使用率的工具,比如top,都是通过proc文件系统下的stat文件来得到CPU使用了多少ticks。而这里的ticks,是Linux操作系统里的一个时间单位,可statproc/[pid]/stat,里面包含了进程用户态和内核态的ticks数目;对于整个节点,它的stat文件是/proc/stat,里面包含了user/system/nice/idle/iowait等不同CPU开销类型的ticks。/proc/statNamespace,因此在容器中无法通过/proc/stat文件来获取单个容器的CPU使用率。所以要得到单个容器的CPU使用率,我们可以从CPUCgroup每个控制组里的统计文件 cct.stat中获取。单个容器CPU使用率=((utime_2–utime_1)+(stime_2–stime_1))*100.0/(HZ*et*1)。得到单个容器的CPU的使用率,那么当宿主机上负载变高的时候,就可以很快知道是哪个容器引起的问题。同时,用户在管理自己成百上千的容器的时候,也可以很快发现CPU使写一个小程序,在容器中执行,它可以显示当前容器中所有进程总的CPU使用率。CPU 归科技所有 不得售卖。页面已增加防盗追踪,将依法其下一 07|LoadAverage:加了CPUCgroup限制,为什么我的容器还是很慢言言USER_HZ"getconfCLK_TCK4,3计算的,是这样吗?如果是的,那么,这个cpu的代码就需要侵入程序代码(容器中跑>容器的22我当然做的时候发现dockerstats和cadvisor(或通过cgroup直接计算)通过cgroup拿@cpu/memorydockerstatscadvisor1 cpuinfo1=$(cat/sys/fs/cgroup/cpu,c utime1=$(echo$cpuinfo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学习小学生守则
- 学生请假销假制度
- 物业小区安保服务部管理制度及执勤流程
- 检察院服务基层提升自查报告及整改措施
- 交通安全知识题库及参考答案
- 人教版小学语文五年级上册《毛主席在花山》教学设计
- T-HBSZ 001.6-2025 湖北省市政示范工程质量评价标准 第6部分:垃圾处理工程实体质量评价
- 宿舍水电节约管理工作手册
- 开关厂新产品研发试制管理手册
- 商业演出项目统筹管理工作手册
- GA/T 1215-2025中小学与幼儿园周边道路交通组织设计与交通设施设置规范
- 2026年四川省成都市中考语文真题(试题+答案)
- 2025年食品安全事故应急处置全流程培训
- 2026年淡水养殖高级水产工程师答辩题库
- 探秘南海IODP349基底玄武岩中钙质碳酸盐岩脉:岩石学与地球化学的深度剖析
- 上市公司收购方案
- 矿山安全教育培训课直播课件
- GB/T 14233.2-2025医用输液、输血、注射器具检验方法第2部分:生物学试验方法
- 2025年基本公共卫生服务项目(慢阻肺健康管理)培训试题(附答案)
- 供应商资质与实力评估体系模板
- GB/T 4662-2025滚动轴承额定静载荷
评论
0/150
提交评论