返回顶部
首页 > 资讯 > 精选 >Container内部进程监控是怎样的
  • 277
分享到

Container内部进程监控是怎样的

2023-06-05 00:06:40 277人浏览 独家记忆
摘要

这篇文章主要介绍“Container内部进程监控是怎样的”,在日常操作中,相信很多人在Container内部进程监控是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Container内部进程监控是怎样的

这篇文章主要介绍“Container内部进程监控是怎样的”,在日常操作中,相信很多人在Container内部进程监控是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Container内部进程监控是怎样的”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目前市场上的虚拟化技术种类很多,例如moby(Docker)、LXC、RKT等等。在带来方便应用部署和资源充分利用的好处的同时,如何监控相应Container及其内部应用进程成为运维人员不可避免遇到的新情况。UAV.Container从虚拟化技术的基础原理和linux操作系统的内核特性出发,得到Container容器和内部进程的各维度监控数据,使无论是虚拟机或物理机运维人员,还是业务运维人员角度,都能得到合适的监控维度。

虚拟化技术从基础原理上主要是cgroups、namespace和file system的应用,而操作系统作为cgroup和namespace根节点,无论在container里启动何种应用,从内核角度上来说,肯定在操作系统有其一定的特征和表现形式。我们需要做的就是对这些特征做加工处理,以得到相应的监控数据。

下面我们以docker技术举例,其他虚拟化技术类似。

一、Container ID

Container ID是一个Container的唯一标识。从容器监控的角度我们需要能得到该进程在哪个Container里运行。在操作系统层面,进程的cgroup的挂载情况就能有所体现。如图所示,我们在一个ID为3411554ff684的Container内部跑一个Tomcat进程。

Container内部进程监控是怎样的

由于Container的pid namespace是操作系统的pid namespace的子namespace,那么该进程在操作系统级也应该有相应的pid,用docker top命令验证一下:

Container内部进程监控是怎样的

该容器内进程在宿主机上的进程号为1848。接下来进入/proc/1848/cgroup下看看该进程的cgroup挂载情况

Container内部进程监控是怎样的

从cgroup文件里清楚的显示了实现了该容器的虚拟化技术、Container ID和此container的资源挂载路径,对比一下这里面显示的Container ID,和创建Container时的ID完全相同。这也验证了通过扫描宿主机进程的cgroup信息可以获得Container ID。这样就将pid和Container ID做了关联。

二、CPU

虽然cgroup管控了该cgroup下所有进程的CPU使用情况,但从操作系统的角度上,不论进程是否隶属于某个子cgroup下,仍然是共用宿主机的CPU。所以监控宿主机上该进程的CPU就能得到进程的CPU监控指标。

Linux上常用的CPU监控命令是top。top对CPU监控的原理是在time1时刻获取CPU从启动时的累计总时间countAll1和busy总时间countBusy1,再到time2时刻获取CPU总时间countAll2和busy总时间countBusy2,最后用busy的时间差值减去总时间的差值得到了在time1到time2这个时间段内机器CPU的占用情况。也就是:

CPU占用率(%) = (countBusy2 - countBusy1)/(countAll2 - countAll1) * 100

进程同理,在两个时刻分别得到每个进程的busy总时间countProcBusy1和countProcBusy2,则得到进程CPU占用率:

进程CPU占用率(%) = (countProcBusy2 - countProcBusy1)/(countProcAll2 - countProcAll1)*100

宿主机从启动开始的CPU总时间片可以从/proc/stat下获取:

Container内部进程监控是怎样的

第一行是总的CPU使用情况,具体参数的意思:

所以,选择当前为time1,3秒后为time2,countAll = user + nice + system + idle + iowait + irq + softirq + stealstolean + guest + guest_nice。countBusy为countAll减去idle的值,这样上面第一个公式的所有需要的值就齐了,可以直接计算。

第二行、第三行是每个逻辑CPU的使用情况,这里记下有两个逻辑CPU,CPU的逻辑核数与CPU显示模式irix和solaris有关。

接下来是countProcBusy的计算,进程的CPU时间片位于/proc/$pid/stat下,如图所示:

Container内部进程监控是怎样的

这个文件里面体现了很多进程的相关信息。其中第14、15、16、17个参数与CPU有关。

所以,countProcBusy = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间。而countProcAll2-countProcAll1=3s,通过两个时刻的countProcBusy和countProcAll,进程CPU的占用率就能得到了。

其中需要注意的问题有两点:

1) jiffies实际上指的是内核时钟使用的节拍总数,所以这里的jiffies需要换算成秒才能应用上面的除法公式。

2) 刚刚我们谈到CPU显示模式irix和solaris,简单来说irix模式就是机器有N个逻辑CPU,CPU显示上限就是N*100%,solaris模式就是不管机器有多少逻辑CPU,CPU显示上限就是100%,而/proc/$pid/stat显示的是计算了所有逻辑CPU时间的,所以两种显示方式意味着计算方法稍有差异,solaris模式的结果需要在上面进程CPU占用率公式基础之上除以逻辑核数。

三、内存

进程内存的监控有两个维度的数据:一是物理占用内存大小,二是进程内存占用百分比的大小。

进程内存占用率(%) = 进程物理内存占用大小 / 宿主机总内存大小 * 100

与CPU类似,/proc/$pid/status文件记录了进程物理内存使用情况,其中VmRSS即为该进程目前所占实际物理内存的大小。

Container内部进程监控是怎样的

/proc/meminfo文件下记录了机器内存占用情况,这个文件很长,截取其中的一部分展示一下,MemTotal就是宿主机总内存大小:

Container内部进程监控是怎样的

这样,这个进程的物理内存占用和机器总内存就都得到了,相应的进程内存的占用率也就得到了。

四、磁盘IO

磁盘IO获取也很简单,/proc/$pid/io已经帮我们把这个进程的io情况记录下来了,但是与CPU类似,io文件里存的也是该进程从启动到现在的io总量,那么:

磁盘I/O(bytes/秒) = (time2时刻I/O – time1时刻I/O) / (time2 – time1)

Container内部进程监控是怎样的

其中的read_bytes和write_bytes分别为该进程从启动到目前为止的读取字节数和写入字节数,分别取2个时刻的值,根据上面的公式,就得到了该进程的磁盘IO。

五、端口号和连接数

由于Network Namespace对网络做了隔离,所以如果进程在Container内部运行,该进程的端口信息也应该是进程本身监听的端口号,而不是真正实际对外的端口,而Container内外端口的映射机制是由应用的虚拟化技术本身控制的,这就避免不了与实现容器的虚拟化技术打交道了,那么问题就转化成获取容器内进程本身监听的端口了。

/proc/$pid/net/tcp(tcp6,udp,udp6)就对端口号和连接数做了相应的历史记录。这些文件格式都类似,以tcp6举例

Container内部进程监控是怎样的

解释几个关键的key:

因为st = 0A代表listen,所以从其中挑选出st = 0A的数据,取出对应的inode号,这里这个inode号是Socket号,则问题转换为了这个进程是否还存在这个socket号代表的socket。在/proc/$pid/fd下有该进程所有的fd(file descriptor),截取一段举个例子。

Container内部进程监控是怎样的

每个文件描述符后面的软链实际上就是打开的文件,以socket开头的就是这个进程打开的socket,在中括号中间的部分就是socket号。拿着这个socket号和上面tcp6里获得的inode号做一个匹配,如果对应上,那么tcp6里的st = 0A的端口就是这个进程监听的。至于容器内外端口的映射,这就需要根据应用的虚拟化技术的映射方法来获取了。连接数计算与端口扫描是同理的,区别只在于需要对st = 01(establish)进行扫描计数累加。

到此,关于“Container内部进程监控是怎样的”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Container内部进程监控是怎样的

本文链接: https://lsjlt.com/news/240394.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Container内部进程监控是怎样的
    这篇文章主要介绍“Container内部进程监控是怎样的”,在日常操作中,相信很多人在Container内部进程监控是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Container内部进程监控是怎样的...
    99+
    2023-06-05
  • python是怎样实现监控指定进程的cpu和内存使用率
    这篇文章给大家介绍python是怎样实现监控指定进程的cpu和内存使用率,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为了测试某个服务的稳定性,通常需要在服务长时间运行的情况下,监控其资源消耗情况,比如cpu和内存使用...
    99+
    2023-06-22
  • zabbix是怎样监控mongodb
    这期内容当中小编将会给大家带来有关zabbix是怎样监控mongodb,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。很长时间没有整理zabbix了,发现有些东西不能用了,...
    99+
    2024-04-02
  • mysql中的监控与优化过程是怎样的
    mysql中的监控与优化过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 监控与优化1.1 监控指标1.1.1 ...
    99+
    2024-04-02
  • 怎么对docker内存进行监控
    怎么对docker内存进行监控?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一直运行的docker容器显示内存已经耗尽,并且容器内存耗尽也没出现重启情况,通过后台查看发现进程没...
    99+
    2023-06-14
  • 怎样使用Shell进行文件监控
    怎样使用Shell进行文件监控,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。文件监控可以配合rsync实现文件自动同步,例如监听某个目录,当文件变化时,使用rsync命令将变化...
    99+
    2023-06-28
  • JavaScript内部原理是怎样的
    本篇文章给大家分享的是有关JavaScript内部原理是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。简介Javascript &nbs...
    99+
    2024-04-02
  • python监控某个进程内存的情况问题
    目录python监控某个进程内存python监控进程并重启分析了具体思路相关代码很简单python监控某个进程内存 测试场景: 某个客户端程序长时间运行后存在内存泄漏问题,现在开发解...
    99+
    2024-04-02
  • python如何监控某个进程内存的情况
    这篇文章主要讲解了“python如何监控某个进程内存的情况”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python如何监控某个进程内存的情况”吧!python监控某个进程内存测试场景:某个...
    99+
    2023-06-30
  • JVM监控工具用法是怎么样的
    JVM监控工具用法是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。你对JVM监控工具的用法是否了解,这里向大家描述几种,VisualVM是一种集成了多个JDK命令行工具...
    99+
    2023-06-17
  • percona监控mysql的几张图形是怎样的
    本篇文章为大家展示了percona监控mysql的几张图形是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。percona监控mysql的几张图形解释 最近,...
    99+
    2024-04-02
  • kafka-manager监控工具的搭建是怎样的
    这篇文章给大家介绍kafka-manager监控工具的搭建是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.下载sbthttp://www.scala-sbt.org/download.html[root@sh...
    99+
    2023-06-03
  • Linux内核进程管理的基础是怎样的
    本篇文章为大家展示了Linux内核进程管理的基础是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。内核通过 task_struct 描述进程用命令 pstree 可以让内核以树形的结构把进程之间...
    99+
    2023-06-15
  • Linux内核源码的进程调度是怎样的
    这篇“Linux内核源码的进程调度是怎样的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux内核源码的进程调度是怎样的...
    99+
    2023-06-16
  • Zabbix监控的安装部署过程
    本篇内容介绍了“Zabbix监控的安装部署过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、安装Zabbix部署所需依赖包#yum&nb...
    99+
    2023-06-05
  • python守护进程监控子进程怎么实现
    在Python中,可以使用multiprocessing模块来创建子进程并监控它们。具体实现方法如下: 导入multiproces...
    99+
    2023-10-23
    python
  • 如何使用JMX监控应用程序内、外部的状况
    这篇文章主要介绍如何使用JMX监控应用程序内、外部的状况,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java管理API (JMX)对管理WebLogic服务器而言是必需的。通过这个API,你可以在应用程序服务器里搜...
    99+
    2023-06-03
  • Android 系统的内部机制是怎样的?
    作者:禅与计算机程序设计艺术 1.简介 Android 是由 Google 公司开发的开源移动操作系统,其开发者大多拥有计算机科学或相关专业的背景。随着移动互联网的发展,越来越多的人把目光投向了 A...
    99+
    2023-10-21
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • python进程监控及管理的方法是什么
    在Python中,可以使用以下方法来监控和管理进程:1. 使用`subprocess`模块创建和管理子进程。`subprocess`...
    99+
    2023-10-12
    python
  • Linux系统性能监控工具Glances是怎样的
    本篇文章为大家展示了Linux系统性能监控工具Glances是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、Glances介绍glances是一个基于python语言开发,可以为linux...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作