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

news2024/11/26 0:34:52

进入容器中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的情况下,计算资源的消耗很小。

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1604551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode 如何支持点击函数跳转

一、配置方式 我要配置的是 python 语言,以 python 语言为例来设置 1、在扩展商店搜索 python 并安装 2、安装完成后点击设置按钮,进入扩展设置 3、在扩展设置中搜索 go to definition,将下面红框的两项设置为 goto 4.连接远程服务器后还需…

基于go+vue的多人在线聊天的im系统

基于govue的多人在线聊天的im系统 文章目录 基于govue的多人在线聊天的im系统一、前端部分二、后端部分1、中间件middleware设计jwt和cors2、配置文件设计3、Mysql和Redis连接4、路由设计5、核心功能设计 一、前端部分 打算优化一下界面,正在开发中。。。 二、后端…

软件测试入门学习笔记

系统测试流程规范 一.研发模型 1.瀑布模型 从可行性研究(或系统分析)开始,需求 2.增量迭代模型 3.敏捷开发模型 二.质量模型

神经网络中正则化和正则化率的含义

在神经网络中,正则化是一种用于防止模型过拟合的技术。过拟合是指模型在训练数据上表现得很好,但是对于未见过的新数据,其泛化能力却很差。正则化通过在损失函数中添加一个额外的项来惩罚模型的复杂度,从而鼓励模型学习更加简单、更加泛化的特征。 正则化的含义 正则化通常…

如何修改WordPress数据库表前缀以提高安全性

WordPress作为世界上最受欢迎的内容管理系统之一,吸引了数以百万计的用户。然而,正因为其广泛的使用,WordPress网站也成为了黑客攻击的目标之一。其中一个最常见的安全漏洞是使用默认的数据库表前缀wp_,使得黑客能够更轻松地进行大…

引导过程和服务控制

目录 一.Linux操作系统的引导过程 1.开机自检(BIOS): 2.MBR引导: 3.启动GRUB菜单: 4.加载Linux内核 5.init进程初始化 二.系统初始化进程 1.init 进程 2.Systemd 2.1 systemd 概述 2.2 Systemd 与 传统 Sy…

设计千万级并发系统架构需要考虑的各方面因素

设计千万级并发系统架构需要考虑多方面因素,包括系统的可伸缩性、高可用性、性能、安全性等。 1、分布式架构: 使用微服务架构:将系统拆分成多个独立的服务,每个服务都可以独立部署和扩展。 使用分布式服务框架:如S…

Unity类银河恶魔城学习记录12-11 P133 Merge Skill Tree with Parry skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Parry_Skill.cs using UnityEngine; using UnityEngine.UI;public class P…

Python多态

1.多态 多态定义:多态(polymorphism)是指同一个方法调用由于对象不同可能会产生不同的行为 注意以下2点: 1.多态是方法的多态,属性没有多态。 2.多态的存在有2个必要条件:继承、方法重写 class Animal:de…

LearnOpenGl练习题-着色器

LearnOpenGl练习题-着色器 题目地址:着色器 - LearnOpenGL CN 题目一:修改顶点着色器让三角形上下颠倒: #version 330 core layout (location 0) in vec3 aPos; layout (location 1) in vec3 aColor; out vec3 ourColor; void main() {gl…

openEuler 22.03 LTS SP3源码编译部署OpenStack-Bobcat(Neutron使用OVN)

openEuler 22.03 LTS SP3部署OpenStack-Bobcat 说明机器详情安装操作系统注意事项基础准备Controller节点 && Compute节点 && Block节点关闭防火墙关闭selinux设置静态IP更新安装前准备Controller节点 && Compute节点 && Block节点设置主机名配…

简单认识Git(dirsearch、githack下载),git泄露(ctfhub)

目录 dirsearch下载地址: githack下载(一次不成功可多试几次) 一、什么是Git 1.git结构 2.git常用命令及示例 3.Git泄露原理 二、Git泄露 1.Log 2.Stash 3.Index 工具准备:dirsearch、githack dirsearch下载地址: GitHub - mauroso…

配置流策略实现不同网段间限制互访

在创建了 vlanif 接口并配置 IP 地址后,不同 vlan 间就可以互通了。 如果我们想要限制vlan 之间的通信,就可以通过配置流策略实现。 配置步骤(以华为交换机为例) 1、ACL 定义拒绝通过的数据流 2、定义流分类,按照ACL 对报文进行分类 3、配置流行为,动作为deny 4、配置流…

计算机不联网是否有IP地址

计算机不联网是否会有IP地址,这个问题涉及到计算机网络的基础知识。要深入探讨这个问题,我们需要从IP地址的定义、作用,以及计算机在不联网状态下的网络配置等多个方面进行分析。 首先,IP地址(Internet Protocol Addre…

深度学习——常用激活函数解析与对比

1、 简介 在神经网络中,激活函数扮演着至关重要的角色。它们的主要目的是引入非线性因素,使得网络能够学习和表示更加复杂的函数映射。以下是激活函数应具备的特点,以及这些特点为何重要的详细解释: 引入非线性有助于优化网络&am…

求奖金(if)(C语言)

一、N-S流程图&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int I 0;float bonus 0;//提示用户&#xff1b;printf("请输入利润I&#xff1a;");//获取用户值&#xf…

怎么给一个字典进行按值或key来排序?

字典是具有指定数字或键的特定数据集或组。在 Python 以外的编程语言中&#xff0c;它们也被称为哈希映射或关联数组。 一般来说&#xff0c;它是键值对的形式&#xff0c;就像现实世界的字典一样。 要创建字典&#xff0c;请从左括号开始&#xff0c;添加键并键入一个冒号。…

SpringBoot 项目Docker部署三种方式

一种&#xff1a;直接拷贝jar到服务器部署 1.增加docker配置文件 新建Dockerfile文件&#xff0c;负责Docker的配置 FROM openjdk:21#ENV timezone RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo Asia/Shanghai >/etc/timezone# WORKD…

[2021最新]Java时间戳和日期时间互转换

代码&#xff1a; import java.text.ParseException; import java.text.SimpleDateFormat;public class MainProcess {public static void main(String[] args) throws ParseException {// 1.set formatSimpleDateFormat timeSmat new SimpleDateFormat("yyyy-MM-dd HH:…

【Jupyter Notebook】快捷键

在命令模式下&#xff0c;单元格边框是灰色&#xff08;缺省&#xff09;的。这些快捷键主要用于操作单元格。 Enter&#xff1a;进入编辑模式Shift Enter&#xff1a;运行当前单元格并选中下一个单元格Ctrl Enter&#xff1a;运行当前单元格Alt Enter&#xff1a;运行当前单…