监控Linux系统中的进程内存使用情况对于系统性能调优和故障排查非常关键。Python因其强大的库支持与简洁的语法成为完成这一任务的理想工具。在Ubuntu系统中,我们可以利用Python结合系统命令或者使用第三方库来获取进程的内存使用信息。
本文将介绍几种用Python监控Ubuntu系统进程内存使用的方法。
使用ps
命令
在Linux系统中,ps
命令是查看当前进程状态的常用工具。我们可以在Python脚本中调用这个命令来监控进程内存。
示例1:使用subprocess
模块调用ps
import subprocess def get_process_memory(process_name): # 使用ps命令获取进程的内存使用情况 command = f"ps -aux | grep {process_name}" process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() # 分析输出结果 if process.returncode == 0: lines = stdout.decode().split('\n') for line in lines: if process_name in line and not 'grep' in line: # 提取内存使用信息 parts = line.split() mem_usage = parts[3] # %MEM列 return mem_usage else: print(f"Error: {stderr.decode().strip()}") return None # 使用示例 process_name = "python3" mem_usage = get_process_memory(process_name) print(f"{process_name} memory usage: {mem_usage}%")
使用psutil
库
psutil
是一个跨平台库,用于在Python中获取进程和系统利用率(包括内存)的信息。它提供了一个丰富的API来获取各种系统信息。
示例2:使用psutil
检索特定进程的内存使用信息
import psutil def get_process_memory_psutil(process_name): # 遍历所有进程 for proc in psutil.process_iter(['pid', 'name', 'memory_info']): if proc.info['name'] == process_name: # 输出进程内存使用信息 memory_info = proc.info['memory_info'] return { 'rss': memory_info.rss, # 实际使用物理内存 'vms': memory_info.vms, # 分配的虚拟内存 } return None # 使用示例 process_name = "python3" memory_info = get_process_memory_psutil(process_name) if memory_info: print(f"{process_name} memory usage: RSS={memory_info['rss']} bytes, VMS={memory_info['vms']} bytes") else: print(f"No process named {process_name} found.")
监控系统内存使用
另外,监控整个系统的内存使用情况也是有益的。下面的代码示例使用psutil
来监控整个系统的内存使用。
示例3:使用psutil
监控系统内存使用
import psutil def get_system_memory_info(): # 获取系统内存使用详情 mem = psutil.virtual_memory() return { 'total': mem.total, # 总内存 'available': mem.available, # 可用内存 'used': mem.used, # 已用内存 'percent': mem.percent # 内存使用百分比 } # 使用示例 memory_info = get_system_memory_info() print(f"System memory info: {memory_info}")
总结
在本文中,我们介绍了使用Python来监控Ubuntu系统中进程的内存使用情况的几种方法。通过直接调用系统命令ps
和使用psutil
库,我们可以获取有关进程和系统内存使用的详细信息。这些方法可以方便地集成到更复杂的系统监控或性能分析工具中。