根据pid定时监控CPU使用率和内存使用率并输出到文件 (windows和linux跨平台可用)
有时服务器运维中,某些程序员的应用发布后完全不管CPU和内存的使用率,只觉得代码能运行就行了,这样给我们运维人员经常造成困扰;
比如我在zabbix平台中就经常监测到凌晨1~3~5点时候突然CPU飙升到50~93%,win和linux系统都没有比较方便的定时监控指定进程的方法,经过长时间的寻解、修改和测试,如下python代码可以实现根据pid定时监控CPU使用率和内存使用率,并输出到.csv文件,windows和linux平台皆可用:
# 本程序可以实现自动识别CPU内核数,然后根据输入的进程pid号,来计算出多核的CPU使用率和内存使用率,并将监控结果同时打印到屏幕和文件中。
import sys
import time
import psutil
# 查询显示当前系统的CPU内核和颗数等信息
print('逻辑CPU个数:' + str(psutil.cpu_count())) # 取多内核平均值时应除以物理内核比较近似
print('物理CPU个数:' + str(psutil.cpu_count(logical=False)))
# print('当前可用CPU个数:' + str(len(psutil.Process().cpu_affinity())))
# 将输入的参数pid号保存到列表sys.argv中,若输入的值小于2位则中断退出并提示
if len(sys.argv) < 2:
print("输入pid值无效,请按示例输入,例:“python CPU_Analysis_Python.py pid号码”")
sys.exit()
# 通过psutil模块,获取并保存pid对应的进程对象
pid = int(sys.argv[1])
p = psutil.Process(pid)
# 监控进程相关的CPU和内存使用率数据,写入存储
interval = 1 # 设置监控的循环间隔时间
with open("CPU_Analysis_pid" + str(pid) + "_" + p.name() + ".csv", "a") as f: # 创建记录输出文档,格式为.csv
f.write(" 时间 , CPU使用率(%), 内存使用率(%) \n") # 写入标题——>.csv文档中
while True:
with open("CPU_Analysis_pid" + str(pid) + "_" + p.name() + ".csv", "a") as f: # 添加监控记录输出文档
current_time = time.strftime('%Y%m%d-%H:%M:%S', time.localtime(time.time()))
# 计算CPU使用率(%) = 所有核心使用率之和 / (1s * 物理内核数量), 参数interval的值为获取当前CPU使用率的时间间隔
cpu_percent = round(((p.cpu_percent(interval=1) / 100) / psutil.cpu_count(logical=False)) * 100, 2)
mem_percent = p.memory_percent()
line = current_time + ',' + str(cpu_percent) + ',' + str(mem_percent)
print('时间:' + current_time + ', CPU使用率:' + str(cpu_percent) + ', 内存使用率:' + str(mem_percent)) # 输出控制台,可注销掉
f.write(line + "\n")
time.sleep(interval)
根据pid定时监控CPU使用率和内存使用率并输出到文件 (windows和linux跨平台可用)的更多相关文章
- 【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
问题描述 在Azure上创建虚拟机(VM)后,在门户上可以查看监控指标(Metrics),如CPU Usage,Memory,Disk I/O等.那如何通过Java 代码获取到这些指标呢? 关于VM ...
- 获取Windows操作系统的CPU使用率以及内存使用率
此功能参考了ProcessHacker项目的代码. 声明定义 typedef struct _UINT64_DELTA { ULONG64 Value; ULONG64 Delta; } UINT64 ...
- C# 获取Windows系统:Cpu使用率,内存使用率,Mac地址,磁盘使用率
一.获取CPU使用率: #region 获取CPU使用率 #region AIP声明 [DllImport("IpHlpApi.dll")] ...
- linux下实现CPU使用率和内存使用率获取方法
想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了. 方法就是读取proc下的文件来获取了. cpu使用率: /proc/stat ,内存使用情况: /p ...
- crond守护进程实现定时监控某进程占有内存的大小
1)添加计划任务 crontab -e会使用某个编辑器打开某个文件,然后在内输入需要执行的计划任务,保存后在/var/spool/cron/crontabs/下会出现以用户名命名的文件 2)计划任务如 ...
- win 系统设置weblogic 进行定时自动重启并删除其日志和缓存文件,定时监控cpu是否达到100%并重启weblogic服务
一:如何在win系统设置 任务管理:请百度查询 win系统设置 任务管理 二:设置 webogic 重启并删除垃圾文件的bat脚本 sqlplus /nolog @C:\Users\Administr ...
- 查看Linux服务器CPU使用率、内存使用率、磁盘空间占用率、负载情况
[root@server script]# vi monitor.py #!/usr/bin/env python # -*- coding:utf-8 -*- #Author: nulige imp ...
- 获取当前电脑的cpu使用率、内存使用率
https://www.cnblogs.com/Chary/p/7771365.html http://www.cnblogs.com/zl1991/p/4679461.html 要关注几个类 Per ...
- qt 获取磁盘空间大小,cpu利用率,内存使用率
转自:http://www.qtcn.org/bbs/read-htm-tid-60613.html. 1:封装成一个类,直接调用即可.已经在多个商业项目中使用.2:所有功能全平台 win linux ...
- [No0000112]ComputerInfo,C#获取计算机信息(cpu使用率,内存占用率,硬盘,网络信息)
github地址:https://github.com/charygao/SmsComputerMonitor 软件用于实时监控当前系统资源等情况,并调用接口,当资源被超额占用时,发送警报到个人手机: ...
随机推荐
- HttpProxyCacheServer (音视频缓存框架)
implementation 'com.danikula:videocache:2.7.0' //包 MyApplication 中: //音视频缓存框架private HttpProxyCacheS ...
- MySQL联合索引的创建规则
1.索引应该按照最常用于查询的列的顺序创建.这样可以最大程度地提高查询性能. 2.如果查询中包含的列与索引中的列顺序不一致,则无法使用索引.因此,如果您有多个查询,每个查询都包含不同的列,那么最好为每 ...
- mybatis动态标签——trim
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- python数据方面的文章
excel 对接 jupyter https://mp.weixin.qq.com/s/NTCIOs_Yz3MIRgT8S36yGQ pandas 常用分拆数据 https: ...
- Mac的Dock栏是什么?Mac Dock栏使用技巧
Dock栏就是Mac电脑屏幕下方的那一排快捷键,我们可以把自己常用的程序放到Dock上面,这样可以帮助我们快速的打开自己想要打开的文件和程序,默认情况下,OS X 的 Dock 置于屏幕的底部.当 ...
- 八、常用Api
Object 深拷贝和浅拷贝 Objects 包装类 StringBuilder StringJoin Math System RuntimeBigDecimal Date SImpleDateFor ...
- java poi技术基础案例
基础 HSSF - 提供读写Microsoft Excel格式档案的功能.(03版本,处理xls) XSSF - 提供读写Microsoft Excel OOXML格式档案的功能.(07版本,处理xl ...
- CentOS7下MySQL数据的导入和导出
一.数据导入 (1)进入mysql [root@localhost mysql]# mysql -u root -p (2)转到对应数据库下 mysql> use zenith_star; (3 ...
- 题解[CF1628F]A_Random_Code_Problem
题意 给定一个数组 \(a\),进行 \(k\) 次操作.第 \(i\) 操作等概率随机 \(a\) 中一个元素 \(a_x\),将这个元素的值加入答案,并使其减去 \(a_x\bmod i\) .问 ...
- el-scrollbar滚动加载
mounted() { 监听滚动条 this.$refs.scrollbar.wrap.addEventListener("scroll", this.scrollCo ...