码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Gopsutil/Process常用进程监控资源信息


    Gopsutil/Process常用进程监控资源信息

    大家好 我是寸铁👊
    总结了一篇Go常用库Gopsutil中关于Process资源的文章✨
    喜欢的小伙伴可以点点关注 💝

    Memory📟

    MemoryInfo

    newProcess, _ := process.NewProcess(18024) //参数:想监控的进程号pid
    	info, _ := newProcess.MemoryInfo()
    	fmt.Println("返回平台独立内存信息", info)
    
    • 1
    • 2
    • 3

    返回如下信息:
    rSS:实际使用物理内存
    vmS:虚拟使用内存
    hwm: 表示进程所占用物理内存的峰值
    data: 表示进程数据段的大小
    stack: 表示进程堆栈段的大小
    locked: 表示被锁定的内存大小
    swap:交换分区


    MemoryInfoEx

    ex, _ := newProcess.MemoryInfoEx()
    fmt.Println("MemoryInfoEx()返回与平台相关的内存信息: ", ex)
    
    • 1
    • 2

    MemoryMaps

    maps, _ := newProcess.MemoryMaps(true)
    fmt.Println("MemoryMaps 从 /proc/(pid)/smaps 获取内存映射: ", maps)
    
    
    • 1
    • 2
    • 3

    MemoryPercent

    memorypercent, _ := newProcess.MemoryPercent()
    fmt.Println("MemoryPercent 返回此进程使用的总 RAM 的百分比: ", memorypercent)
    
    
    • 1
    • 2
    • 3

    RAM :是与CPU直接交换数据的内部存储器,也叫主存(内存)


    CPU📀

    主要是CPUPercent获取进程CPU使用率

    cpupercent, _ := newProcess.CPUPercent()
    fmt.Println("CPU_Percent返回此进程使用的 CPU 时间的百分比: ", cpupercent)
    
    times, _ := newProcess.Times()
    fmt.Println("Times 返回进程的 CPU 时间: ", times)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    cpu.Percent(time.Second, false)

    这个函数的目的是返回一个包含每个逻辑CPU使用率百分比的切片。
    其中的参数和返回值:

    • interval 参数表示获取 CPU 使用率的时间间隔。它是一个 time.Duration 类型的值,通常会传入一个时间段,比如 time.Second 表示每秒获取一次 CPU 使用率。
    • percpu 参数是一个布尔值,表示是否获取每个逻辑 CPU 的使用率。如果设置为 true,返回的切片将包含每个逻辑 CPU 的使用率百分比;如果设置为 false,返回的切片将只包含总的 CPU 使用率百分比。
    • 返回值是一个 []float64 类型的切片,其中包含了每个逻辑 CPU 或总 CPU 的使用率百分比。每个元素的取值范围是 0 到 100,表示对应 CPU 的使用率百分比。

    关于CPUPercent的补充
    在这里插入图片描述

    查看官方文档源代码的注释,发现指的是进程的CPU的使用率
    监控的是子进程其实返回的是子进程所在的父进程的CPU的使用率
    子进程直接调用该函数,没有参数可以调整

    Disk 💾

    这里要注意Process没有提供与Disk直接相关的API
    这里需要追溯到原来Python的gopsutil库结合输出结果
    知道IOCounters返回进程的磁盘信息

    counters, _ := newProcess.IOCounters()
    	fmt.Println("IOCounters() 返回进程的磁盘信息:", counters)
    
    • 1
    • 2
        返回信息:
    	readCount:磁盘读入的总数
    	writeCount:写入磁盘的总数
    	readBytes:磁盘读入的字节数
    	writeBytes:写入磁盘的字节数
    
    • 1
    • 2
    • 3
    • 4
    • 5

    网络 💻

    Process的网络信息由 netIOcounters监管
    在这里插入图片描述

    根据输入的参数(true/false)返回不同的信息,根据自己需求来。

    netIOcounters, _ := newProcess.NetIOCounters(true)
    fmt.Println("NetIOCounters 返回进程的网络信息: ", netIOcounters)
    
    
    • 1
    • 2
    • 3

    demo

    package main
    
    import (
    	"fmt"
    	"github.com/shirou/gopsutil/process"
    )
    
    func main() {
        //获取到所有进程的详细信息
    	p1, _ := process.Pids() //获取当前所有进程的pid
    	fmt.Println("p1:", p1)
    	//根据PID获得进程
    	newProcess, _ := process.NewProcess(18024) 
    	//参数:想监控的进程号pid 从p1中选择测试
    	
    	info, _ := newProcess.MemoryInfo()
    	fmt.Println("返回平台独立内存信息", info)
    	/*返回如下信息:
    	//rSS:实际使用物理内存
    	//vmS:虚拟使用内存
    	//hwm: 表示进程所占用物理内存的峰值
    	//data: 表示进程数据段的大小
    	//stack: 表示进程堆栈段的大小
    	//locked: 表示被锁定的内存大小
    	//swap:交换分区
    	*/
    
    	ex, _ := newProcess.MemoryInfoEx()
    	fmt.Println("MemoryInfoEx()返回与平台相关的内存信息: ", ex)
    
    	maps, _ := newProcess.MemoryMaps(true)
    	fmt.Println("MemoryMaps 从 /proc/(pid)/smaps 获取内存映射: ", maps)
    
    	memorypercent, _ := newProcess.MemoryPercent()
    	fmt.Println("MemoryPercent 返回此进程使用的总 RAM 的百分比: ", memorypercent)
    	//RAM :是与CPU直接交换数据的内部存储器,也叫主存(内存)
    
    	cpupercent, _ := newProcess.CPUPercent()
    	fmt.Println("CPU_Percent返回此进程使用的 CPU 时间的百分比: ", cpupercent)
    
    	times, _ := newProcess.Times()
    	fmt.Println("Times 返回进程的 CPU 时间: ", times)
    
    	counters, _ := newProcess.IOCounters()
    	fmt.Println("IOCounters() 返回进程的磁盘信息:", counters)
    	/*
    		//readCount:磁盘读入的总数
    		//writeCount:写入磁盘的总数
    		//readBytes:磁盘读入的字节数
    		//writeBytes:写入磁盘的字节数
    	*/
    	//返回信息样例{"readCount":6689,"writeCount":8516,"readBytes":4778776,"writeBytes":20146627}
    
    	netIOcounters, _ := newProcess.NetIOCounters(true)
    	fmt.Println("NetIOCounters 返回进程的网络信息: ", netIOcounters)
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    结果如下:
    在这里插入图片描述

    这里的nil(空)实际上是go调用函数API返回的第二个结果:error
    一般情况下为nil 开发中最好还是写一个判断nil的语句(处理错误)
    返回的第一个结果就是我们想看到的数据和信息

    喜欢的小伙伴点点关注 🎏 🎏


    往期回顾

    不清楚蓝桥杯考什么的点点下方👇

    考点秘籍

    想背纯享模版的伙伴们点点下方👇

    蓝桥杯省一你一定不能错过的模板大全(第一期)

    蓝桥杯省一你一定不能错过的模板大全(第二期)

    蓝桥杯省一你一定不能错过的模板大全(第三期)

    蓝桥杯省一你一定不能错过的模板大全(第四期)!!!

    想背注释模版的伙伴们点点下方👇

    蓝桥杯必背第一期

    蓝桥杯必背第二期

    往期精彩回顾

    蓝桥杯上岸每日N题 第一期(一)!!!

    蓝桥杯上岸每日N题第一期(二)!!!

    蓝桥杯上岸每日N题第一期(三)!!!

    蓝桥杯上岸每日N题第二期(一)!!!

    蓝桥杯上岸每日N题第三期(一)!!!

    蓝桥杯上岸每日N题 第四期(最少刷题数)!!!

    蓝桥杯上岸每日N题 第五期(山)!!!

    蓝桥杯上岸每日N题 第六期(求阶乘)!!!

    蓝桥杯上岸每日N题 第七期(小猫爬山)!!!

    蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

    蓝桥杯每日N题 (消灭老鼠)

    蓝桥杯每日N题(杨辉三角形)

    蓝桥杯每日N题 (砝码称重)

    蓝桥杯上岸每日N题(鸡尾酒)

    操作系统期末题库 第九期(完结)

    LeetCode Hot100 刷题(第三期)

    idea创建SpringBoot项目报错解决方案

    数据库SQL语句(期末冲刺)

    想看JavaB组填空题的伙伴们点点下方 👇

    填空题

    竞赛干货

    算法竞赛字符串常用操作大全

    蓝桥杯上岸必刷!!!(模拟/枚举专题)

    蓝桥杯上岸必背!!! (第三期 DP)

    蓝桥杯上岸必背!!!(第四期DFS)

    蓝桥杯上岸必背!!!(第五期BFS)

    蓝桥杯上岸必背!!!(第六期树与图的遍历)

    蓝桥杯上岸必背!!!(第七期 最短路算法)

    蓝桥杯上岸必背!!!(第八期 简单数论)

    蓝桥杯上岸必刷!!!(进制、数位专题)

    蓝桥杯上岸考点清单 (冲刺版)!!!

    蓝桥杯上岸必背模板 (纯享版)

  • 相关阅读:
    vite+rollup
    快速理解 JVM 内存模型 & 对象组成 & 对象内存分配
    P2P分布式搜索引擎YaCy
    云原生之使用Docker部署Laverna笔记工具
    用HTML+CSS做一个漂亮简单的个人网页——动漫网页【火影忍者】1个页面
    【路径规划-PRM路径规划】基于RRT算法避障路径规划附完整matlab代码
    针对 DNS 监控的 Grafana Dashboard面板DeepFlow
    支付宝小程序基础库升级2.x实践
    Nacos-Go-Sdk代码逻辑解析
    java固定资产设备管理系统(源码开源分享)
  • 原文地址:https://blog.csdn.net/joeyoj/article/details/134288576
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号