Gopsutil/Process常用进程监控资源信息
大家好 我是寸铁
总结了一篇Go常用库Gopsutil中关于Process资源的文章
喜欢的小伙伴可以点点关注
往期回顾
Windows Nginx 服务器部署(保姆级)
运维/全栈必备Window命令
Linux查看端口号及进程
蓝桥杯上岸全指南
LeetCode Hot100刷题指南(第一期)
LeetCode Hot100刷题指南(第二期)
LeetCode Hot100刷题指南(第三期)
操作系统期末题库 第九期(完结)
数据库SQL语句(期末冲刺不挂科)
正文
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, _ := newProcess.CPUPercent()
fmt.Println("CPU_Percent返回此进程使用的 CPU 时间的百分比: ", cpupercent)
times, _ := newProcess.Times()
fmt.Println("Times 返回进程的 CPU 时间: ", times)
Disk
这里要注意Process没有提供与Disk直接相关的API
这里需要追溯到原来Python的gopsutil库结合输出结果
知道IOCounters
返回进程的磁盘信息
counters, _ := newProcess.IOCounters()
fmt.Println("IOCounters() 返回进程的磁盘信息:", counters)
返回信息:
readCount:磁盘读入的总数
writeCount:写入磁盘的总数
readBytes:磁盘读入的字节数
writeBytes:写入磁盘的字节数
网络
Process的网络信息由 netIOcounters
监管
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的语句(处理错误)
返回的第一个结果就是我们想看到的数据和信息
喜欢的小伙伴点点关注!