使用100%RAM后缓慢

时间:2013-12-05 13:53:24

标签: performance python-2.7 memory ram

我的硬件规格如下所列,但这可能并不重要

我使用我的机器进行数据处理,这通常涉及在内存中保存大量数据(我最近通过读取部分文件来减少内存使用,但我的代码已经做了很多改进,但这仍然存在问题)我的分析是在Python 2.7(numpy / scipy和pandas)中完成的。当RAM使用率== 100%时,计算机性能预计会变得缓慢。我不明白为什么它在我的代码完成运行后仍然缓慢(例如,打开一个〜4kb文件需要大约20秒),内存使用率下降到~10-50%,并且CPU位于空闲之上。我甚至强迫所有Python进程在任务管理器中关闭,这没有帮助。此外,缓慢持续直到重新启动。

根据我的硬件状态统计数据,我希望性能更好,所以我怀疑幕后会发生一些事情。因为这只发生在我将内存使用量推到100%之后(这只发生在我在Python中处理数据时)我想知道Python是否在幕后做了一些我不知道的事情(老实说,我无法想象这将是什么,但我真的很难过)。因为我只在Python中看到这个,所以给它一个python标签(虽然我认为这不是python问题)。

任何见解将不胜感激。我在网上搜索过,但我发现的一切都与“为什么我的电脑在CPU / RAM使用率== 100%时运行缓慢”有关 - 键入查询。

操作系统:Windows 7企业版,64位

Python:2.7通过Anaconda

CPU:Xeon E5645,六核

RAM:12GB

3 个答案:

答案 0 :(得分:2)

有一个名为'system-load'的概念。大负载下的系统(包括中断,IO等待,上下文切换,计算等)需要时间来恢复。负载持续一段时间,因为与核心计算不同,使系统工作的其他操作不会简单地突然停止。

例如,脚本while(true) i++;将仅使用cpu,但脚本 - while(true) print(i++)会将i的值推送到队列中的某些内容,如 nature- stdout可以是监视器,NW端口或打印机队列。现在,当您kill进程时,内核所做的就是释放进程的内存并停止分配 it CPU。

但总有一个'罪',在不同的层次和组成部分。这些,依次消耗资源,直到完成。而且因为你只能杀死你的python脚本而不是你不可逆转地调用的n个打印进程,所以内核无法做任何事情。

但要明白,这只是SW情况之一。有Paging,Swapping,Thrashing操作(以及更多),这也使得“恢复”变得更慢。从交换中恢复需要1000倍的时间作为内存(RAM)操作。总而言之,零负载下的系统可以在x时间内处理10个任务,而满负荷下的系统将花费100倍的时间来完成相同的任务,因为每个上下文切换,每个内务操作都是“更昂贵的” 。

这里可行的是运行tophtop这样的实用程序,看看高负载平均值持续多久。

答案 1 :(得分:0)

一旦你达到100%的内存,你就会开始在你的机器上进行交换,它使用的WAYYY比内存慢。程序运行完毕后,所有其他程序需要将这些信息重新读回内存。如果问题在几分钟后没有消失,那么你可能会遇到一个单独的问题。

答案 2 :(得分:0)

我原以为任务管理器,进程,通过View选择了适当的列,通过单击列标题(对于Top)排序,会提示原因以及Performance选项卡信息。然后是Perfmon资源监视器和我最喜欢的,通过Perfmon,性能,数据收集集,用户定义进行记录。