内存使用,如何释放内存

2024-10-01 11:23:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python,当索引文档(用于搜索引擎)时,它需要大量的RAM,在我停止索引过程之后,内存仍然是满的(比如8gb的RAM)。这很糟糕,因为我需要我的搜索引擎一直工作,而不是在我完成索引后重置操作系统。有没有什么有效的方法来管理大型数组、字典和列表,以及如何释放它们。有什么想法吗?在

我在stackoverflow上也看到了一些关于它的问题,但它们都很古老:

Python memory footprint vs. heap size

Profile Memory Allocation in Python (with support for Numpy arrays)

信息:

free -t
             total       used       free     shared    buffers     cached
Mem:          5839       5724        114          0         15       1011
-/+ buffers/cache:       4698       1141
Swap:         1021        186        835
Total:        6861       5910        950


top | grep python 

 3164 root      20   0 68748  31m 1404 R   17  0.5  53:43.89 python                                                                     
 6716 baddc0re  20   0 84788  30m 1692 S    0  0.5   0:06.81 python     

 ps aux | grep python

root      3164 57.1  0.4  64876 29824 pts/0    R+   May27  54:23 python SE_doc_parse.py
baddc0re  6693  0.0  0.2  53240 16224 pts/1    S+   00:46   0:00 python index.py

uptime

01:02:40 up  1:43,  3 users,  load average: 1.22, 1.46, 1.39


sysctl vm.min_free_kbytes

vm.min_free_kbytes = 67584

真正的问题是,当我启动脚本时,索引速度很快,但是当使用量增加时,索引速度会变慢。在

^{pr2}$

文档的大小最多为一到两页的文本。索引10页大约需要2-3秒。在

Tnx所有人寻求帮助:)


Tags: 文档pyfree过程vmrootmingrep
3条回答

我猜你的程序会变慢至少是因为以下原因之一:

  • 你的内存开始交换,数据从RAM到磁盘,反之亦然。解决方案确实是你的程序使用更少的内存。在
  • 你使用的算法很难适应数据的大小。在这种情况下,找到一个更好的算法显然是解决办法。在

在这两种情况下,我们都需要查看您的一些代码(它本质上相当于什么),以便给出更具体的解决方案。在

常见的解决方案包括

  • 使用Python的del来指示不再需要变量。在
  • 使用迭代器而不是列表(迭代器使用的内存不多)。在

从讨论来看,你似乎只把数据存储在一个巨大的dict中(我不常直截了当地说) 也许将数据偏移到像redis这样的适当的数据库中可能会减少python的内存使用。它还可以使您的数据更高效、更快速地处理。在

你的问题不可能与内存使用过多有关。系统使用的内存越多,它的运行速度就越快。这就是为什么我们在系统中添加内存来提高性能。如果您认为使用较少的内存会使系统更快,请取出一些内存。这将迫使它使用更少的内存。但是,毫不奇怪,如果你这样做,速度会变慢。在

系统保持内存的使用,因为它需要努力释放内存。而且没有任何好处,因为自由内存什么也做不了。不是说你今天用了一半,明天就可以用两倍。如果系统需要内存来存储某些东西,它可以很容易地将内存从一个用途直接移动到另一个用途—它不需要大量空闲内存。在

现代操作系统只保留少量的空闲内存来处理某些类型的异常情况,即它们无法将内存从一种用途转换到另一种用途。在Linux上,您可以使用以下命令确定系统需要多少可用内存:sysctl vm.min_free_kbytes。你可能会发现这大概就是你有多少空闲内存,这很好,因为这正是系统所需要的。在

所以你不需要也不想释放内存。你想知道你的系统为什么慢。在

更新:从您的新信息来看,SE_doc_parse.py似乎在猛烈地冲击CPU。如果可能的话,我会考虑优化代码。在

更新:似乎这是一个效率低下的字典算法,使用的大小超出了它的预期,占用了CPU。在

相关问题 更多 >