针对如何用 Python 监控进程内存的情况,以下是详细的攻略:
1. 获取 PID
首先,需要获取要监控的进程的 PID(进程id)。可以使用命令行的工具,比如 pidof <进程名称>
或者 ps aux | grep <进程名称>
来查找进程的 PID。或者也可以使用 Python 的第三方库如 psutil 来获取。
例如,通过以下代码片段可以获取指定进程名的 PID:
import psutil
process_name = "process_name"
for proc in psutil.process_iter():
try:
if proc.name() == process_name:
pid = proc.pid
break
except (psutil.AccessDenied, psutil.NoSuchProcess):
pass
2. 监控进程内存
获取到要监控的进程的 PID 后,可以使用 psutil 库来监控进程的内存情况。可以使用 psutil.Process(pid)
创建一个进程对象,然后调用相应的方法来获取内存信息。
以下是示例代码,实时获取指定进程的内存使用情况:
import psutil
pid = 1234 # 要监控的进程的 PID
p = psutil.Process(pid)
while True:
mem_info = p.memory_info() # 获取内存使用信息
rss = mem_info.rss / 1024 / 1024 # 虚拟内存的占用大小(MB)
vms = mem_info.vms / 1024 / 1024 # 实际内存的占用大小(MB)
print(f"RSS: {rss:.2f} MB, VMS: {vms:.2f} MB")
time.sleep(1) # 等待 1 秒再进行下一次监控
示例说明
示例一
我们有一个 Python 脚本 test.py
,我们想要在执行此脚本的同时监控它的内存占用情况。我们可以使用以下代码:
import os
import psutil
import time
pid = os.getpid() # 获取当前进程的 PID
p = psutil.Process(pid)
while True:
mem_info = p.memory_info() # 获取内存使用信息
rss = mem_info.rss / 1024 / 1024 # 虚拟内存的占用大小(MB)
vms = mem_info.vms / 1024 / 1024 # 实际内存的占用大小(MB)
print(f"RSS: {rss:.2f} MB, VMS: {vms:.2f} MB")
time.sleep(1) # 等待 1 秒再进行下一次监控
执行以上代码时,会输出当前 Python 解释器的内存使用信息。
示例二
我们有一个名为 httpd
的 Apache 服务器进程正在运行,我们想要定期在日志文件中记录该进程的内存情况。我们可以使用以下代码实现:
import psutil
import time
process_name = "httpd"
for proc in psutil.process_iter():
try:
if proc.name() == process_name:
pid = proc.pid
break
except (psutil.AccessDenied, psutil.NoSuchProcess):
pass
p = psutil.Process(pid)
with open("httpd_mem_log.txt", "a") as f:
while True:
mem_info = p.memory_info() # 获取内存使用信息
rss = mem_info.rss / 1024 / 1024 # 虚拟内存的占用大小(MB)
vms = mem_info.vms / 1024 / 1024 # 实际内存的占用大小(MB)
timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
log_str = f"{timestamp} | RSS: {rss:.2f} MB, VMS: {vms:.2f} MB\n"
f.write(log_str)
time.sleep(60) # 每隔 1 分钟进行一次记录
以上代码会不断地记录 httpd
进程的内存使用情况,并将记录信息写入 httpd_mem_log.txt
文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 监控某个进程内存的情况问题 - Python技术站