使用psutil库监控linux的系统资源和自定义进程的cpu 内存占用。
1 #coding=utf8 2 import time 3 import psutil 4 from pprint import pprint 5 6 from logger_until import LoggerUntil 7 logger = LoggerUntil(name="Monitor").getlog(logfilename='Monitor.log', loglevel=2, add_StreamHandler=1) 8 9 need_monitor_procces_names = [ 10 'touna0627.py', 11 'dailiip.py', 12 'redis-server', 13 'mongod', 14 ] 15 16 17 class Monitor(object): 18 def __init__(self): 19 self.specified_process_list = self.get_specified_process() 20 21 def print_all_cmd_lines(self): 22 pass 23 24 def get_specified_process(self): 25 all_pids = psutil.pids() 26 process_list = [] 27 for pid in all_pids: 28 p = psutil.Process(pid) 29 p_cmdline = p.cmdline() 30 for argx in p_cmdline: 31 for name in need_monitor_procces_names: 32 if argx.find(name) > -1: 33 if p.status() != 'stopped': 34 process_list.append(p) 35 36 p_pid_set = set() 37 process_list2 = [] 38 for p in process_list : 39 if p.pid not in p_pid_set: 40 process_list2.append(p) 41 p_pid_set.add(p.pid) 42 return process_list2 43 44 @staticmethod 45 def monitor_system(): 46 psutil.cpu_percent() 47 time.sleep(1) 48 mem = psutil.virtual_memory() 49 50 mem_total = mem.total/1000000 51 mem_available =mem.available/1000000 52 mem_percent = str(mem.percent) + '%' 53 54 cpu_count = psutil.cpu_count() 55 cpu_percent = psutil.cpu_percent() 56 57 msg = '本机总内存是:{0}M , 本机可用内存是:{1}M, 本机内存使用率是:{2}, 本机cpu核数是:{3}, 本机cpu使用率是:{4}'.format(mem_total, mem_available, mem_percent,cpu_count,cpu_percent) 58 logger.info(msg) 59 60 61 def monitor_specified_process(self): 62 for p in self.specified_process_list: 63 p.cpu_percent(None) 64 time.sleep(1) 65 for p in self.specified_process_list: 66 #p = psutil.Process(0) 67 """:type :psutil.Process""" 68 cmdline_str =' '.join(p.cmdline()).ljust(60,' ') 69 p_cpu_percent_str = str(round(p.cpu_percent(),2)) +'%' 70 p_memory_percent_str = str(round(p.memory_percent(),2)) + '%' 71 p_strated_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(p.create_time())) 72 p_pid_str = str(p.pid) 73 print p.status(),str(p.status()) 74 75 msg = '进程' + cmdline_str + ' 的pid是:' + p_pid_str +' cpu使用率是:' + p_cpu_percent_str + ' 内存使用率是:' + p_memory_percent_str \ 76 +' 进程的启动时间是:' + p_strated_time 77 78 logger.info(msg) 79 80 81 def monitoring(): 82 while 1: 83 monitor = Monitor() 84 monitor.monitor_system() 85 monitor.monitor_specified_process() 86 87 time.sleep(10) 88 89 90 if __name__ == "__main__": 91 monitoring()
监控linux的系统资源和自定义进程。
填入要监控的进程 ,只要ps -ef的command中包含need_monitor_procces_names中的字符串就可以,也可以监控java njinx。
反对极端面向过程编程思维方式,喜欢面向对象和设计模式的解读,喜欢对比极端面向过程编程和oop编程消耗代码代码行数的区别和原因。致力于使用oop和36种设计模式写出最高可复用的框架级代码和使用最少的代码行数完成任务,致力于使用oop和设计模式来使部分代码减少90%行,使绝大部分py文件最低减少50%-80%行的写法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」