如何正确查看容器的CPU使用率

2024-04-18 10:20

本文主要是介绍如何正确查看容器的CPU使用率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

进入容器中top,虽然看到的PID是容器的,但是%Cpu的统计信息却是宿主机的。

如图

dfdfee677cc9ac630429a841ee83ee3d.jpeg


原理

进程的cpu使用率是如何计算出来的?

每个进程的状态是放在文件里的,在/proc目录下,每个进程有自己pid命名的文件夹,

5394fdf956bad0a9941bf979855094d6.jpeg

比如我现在这个jenkins的docker进程,通过inspect查询到Pid是30134

a9952a783a54311758e732a6608d207c.jpeg

我们继续查看/proc/30134下的文件。

里面的文件比较多,我们现在只关心stat文件

[root@paas-m-k8s-node-1 30134]# cat stat 30134  (tini)  S 30112 30134 30134 0 -1 1077944576 1639 0 0 0 244 934 0 0 20 0 1 0 2352840503 2514944 114 18446744073709551615 94288423874560 94288423890205 140731692225440 140731692224320 139648449412143 0 0 3145728 0 18446744072548467014 0 0 17 12 0 0 0 0 0 94288423901968 94288423904395 94288443621376 140731692228014 140731692228057 140731692228057 140731692228586 0

这个stat文件是进程的实时状态信息,实时输出了进程的状态信息,比如进程的运行态(Running 还是

Sleeping)、父进程 PID、进程优先级、进程使用的内存等等总共 50 多项。

这些指标每个空格隔开是一项,现在就看第14项时utime,即进程的用户态部分占用的cpu时间片。244

第15项是 stime,即进程的内核态部分占用的cpu时间片。934

需要注意的是,utime 和 stime 都是一个累计值,也就是说从进程启动开始,这两个值就是一直在累积增长的

然后根据这两个值来计算进程的cpu使用率。具体的计算公式就不讲了。

上面是单个进程的cpu使用计算,那整个系统的cpu数据在哪?

在/proc/stat文件

9938a7ab4ac6323a071d5a9dfe8b9c52.jpeg


明白了

在容器里top看到的是宿主机的cpu的原因就是,top查的是/proc/stat文件,这个文件是反应整个宿主机的状态信息的,不是单个容器的。

有什么办法吗

我们知道每个容器有自己的cpu cgroup控制组,在这个控制组的目录下有很多文件

比如我现在的容器cgroup的目录是

/sys/fs/cgroup/cpuacct/system.slice/docker-1a97854ff7856b7327122bea18c3676f05cd2bf74e9502fe24370c8f011ceb1c.scope

其中有个cpuacct.stat文件,就有整个容器的cpu信息

注意,这里的user和system的信息也是累计值

所以我们可以每秒获取一次,通过计算得到实时的cpu使用率。

65b2b431ca47b7d78edf2d5684f12fb2.jpeg

很多工具如Prometheus,k8s中的资源计算,docker的计算最终都是从这个cgroup文件来的。

单台节点上容器数量小于1000,计算周期位10s的情况下,计算资源的消耗很小。

是不是还是感觉很麻烦,下一篇分享一个小工具帮我们解决这个问题。


这篇关于如何正确查看容器的CPU使用率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914505

相关文章

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

mysql如何查看当前连接数

《mysql如何查看当前连接数》:本文主要介绍mysql如何查看当前连接数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql查看当前连接数查看mysql数据库允许最大连接数总结mysql查看当前连接数查看当前连接数SHOW STATUS LIKE

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Python如何查看数据的类型

《Python如何查看数据的类型》:本文主要介绍Python如何查看数据的类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python查看数据的类型1. 使用 type()2. 使用 isinstance()3. 检查对象的 __class__ 属性4.

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C