我使用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所有人寻求帮助:)
我猜你的程序会变慢至少是因为以下原因之一:
在这两种情况下,我们都需要查看您的一些代码(它本质上相当于什么),以便给出更具体的解决方案。在
常见的解决方案包括
del
来指示不再需要变量。在从讨论来看,你似乎只把数据存储在一个巨大的dict中(我不常直截了当地说) 也许将数据偏移到像redis这样的适当的数据库中可能会减少python的内存使用。它还可以使您的数据更高效、更快速地处理。在
你的问题不可能与内存使用过多有关。系统使用的内存越多,它的运行速度就越快。这就是为什么我们在系统中添加内存来提高性能。如果您认为使用较少的内存会使系统更快,请取出一些内存。这将迫使它使用更少的内存。但是,毫不奇怪,如果你这样做,速度会变慢。在
系统保持内存的使用,因为它需要努力释放内存。而且没有任何好处,因为自由内存什么也做不了。不是说你今天用了一半,明天就可以用两倍。如果系统需要内存来存储某些东西,它可以很容易地将内存从一个用途直接移动到另一个用途—它不需要大量空闲内存。在
现代操作系统只保留少量的空闲内存来处理某些类型的异常情况,即它们无法将内存从一种用途转换到另一种用途。在Linux上,您可以使用以下命令确定系统需要多少可用内存:
sysctl vm.min_free_kbytes
。你可能会发现这大概就是你有多少空闲内存,这很好,因为这正是系统所需要的。在所以你不需要也不想释放内存。你想知道你的系统为什么慢。在
更新:从您的新信息来看,
SE_doc_parse.py
似乎在猛烈地冲击CPU。如果可能的话,我会考虑优化代码。在更新:似乎这是一个效率低下的字典算法,使用的大小超出了它的预期,占用了CPU。在
相关问题 更多 >
编程相关推荐