python 睡眠内存消耗测量不准确
python sleep for memory consumption measurement not accurate
我有一个 python 脚本 (runner.py
),它定期测量进程的内存消耗。为了监控内存消耗,我使用了一个名为 ProcessTimer.py
的助手 class。 processtimer是根据给出的解决方案实现的here.
解决方案基于轮询。所以有一个 while
循环。在此 while
循环中测量内存消耗,然后线程休眠一定时间以确保定期测量。在我的例子中,睡眠完成了 500 毫秒。然而,我的问题是测量不是每 500 毫秒完成一次。测量之间的时间似乎是任意的,我不知道为什么不是每 500 毫秒完成一次(根据 time.sleep(.500)
)。
在这里您可以看到我测量的 CSV 输出。第一列是时间(以秒为单位),第二列是内存消耗:
time,rss_mem
0.0,12.38
1.1,101.89
2.3,110.74
3.4,110.79
4.5,113.61
5.7,101.6
6.8,102.44
8.0,104.28
9.1,104.48
10.3,108.13
11.4,102.64
12.6,102.83
13.7,102.86
14.9,102.86
如您所见,每次测量之间总是有 ~1.1 秒,即使 while
循环(用于测量另一个进程的内存消耗)应该每 500 毫秒执行一次。这是为什么?
time.sleep(.5)
不能确保您的循环每秒执行两次;它只睡了半秒钟。如果其余代码需要 1 秒执行,则每次迭代将花费 .5 + 1 = 1.5 秒。
如果您想以更精确的间隔进行测量,则需要测量调用 ptimer.poll()
所需的时间,然后从 0.5 秒中减去该时间。
但是从上面的数据来看,ptimer.poll()
似乎花费了大量的时间。您可能需要先优化内存测量代码,以便能够尽可能快地进行测量。
我有一个 python 脚本 (runner.py
),它定期测量进程的内存消耗。为了监控内存消耗,我使用了一个名为 ProcessTimer.py
的助手 class。 processtimer是根据给出的解决方案实现的here.
解决方案基于轮询。所以有一个 while
循环。在此 while
循环中测量内存消耗,然后线程休眠一定时间以确保定期测量。在我的例子中,睡眠完成了 500 毫秒。然而,我的问题是测量不是每 500 毫秒完成一次。测量之间的时间似乎是任意的,我不知道为什么不是每 500 毫秒完成一次(根据 time.sleep(.500)
)。
在这里您可以看到我测量的 CSV 输出。第一列是时间(以秒为单位),第二列是内存消耗:
time,rss_mem
0.0,12.38
1.1,101.89
2.3,110.74
3.4,110.79
4.5,113.61
5.7,101.6
6.8,102.44
8.0,104.28
9.1,104.48
10.3,108.13
11.4,102.64
12.6,102.83
13.7,102.86
14.9,102.86
如您所见,每次测量之间总是有 ~1.1 秒,即使 while
循环(用于测量另一个进程的内存消耗)应该每 500 毫秒执行一次。这是为什么?
time.sleep(.5)
不能确保您的循环每秒执行两次;它只睡了半秒钟。如果其余代码需要 1 秒执行,则每次迭代将花费 .5 + 1 = 1.5 秒。
如果您想以更精确的间隔进行测量,则需要测量调用 ptimer.poll()
所需的时间,然后从 0.5 秒中减去该时间。
但是从上面的数据来看,ptimer.poll()
似乎花费了大量的时间。您可能需要先优化内存测量代码,以便能够尽可能快地进行测量。