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

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

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

Memory

MemoryInfo

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

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


MemoryInfoEx

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

MemoryMaps

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

MemoryPercent

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

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


CPU

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

cpupercent, _ := newProcess.CPUPercent()
fmt.Println("CPU_Percent返回此进程使用的 CPU 时间的百分比: ", cpupercent)

times, _ := newProcess.Times()
fmt.Println("Times 返回进程的 CPU 时间: ", times)

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的补充
Gopsutil/Process常用进程监控资源信息_第1张图片

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

Disk

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

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

网络

Process的网络信息由 netIOcounters监管
Gopsutil/Process常用进程监控资源信息_第2张图片

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

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

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)

}


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

这里的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)

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

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

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

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

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

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

你可能感兴趣的:(go,Go,gopsutil,Process,CPU,DISK,Memory,IO)