[英]memory usage, how to free memory
我正在使用python,在对文档建立索引(用于搜索引擎)时,它会占用大量RAM,在我停止索引过程后,内存仍已满(例如8gb的RAM)。 这很糟糕,因为我需要我的搜索引擎一直工作,并且在完成索引编制后不要重置操作系统。 有什么有效的方法来管理大型数组,字典和列表,以及如何释放它们。 有任何想法吗?
我在stackoverflow上也看到了一些有关它的问题,但是它们很旧:
信息:
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
真正的问题是,当我启动脚本时,索引编制速度很快,但是当使用量增加时,编制索引的速度就会变慢。
Document wikidoc_18784 added on 2012-05-28 01:03:46 "fast"
wikidoc_18784
-----------------------------------
Document wikidoc_21934 added on 2012-05-28 01:04:00 "slower"
wikidoc_21934
-----------------------------------
Document wikidoc_22903 added on 2012-05-28 01:04:01 "slower"
wikidoc_22903
-----------------------------------
Document wikidoc_20274 added on 2012-05-28 01:04:10 "slower"
wikidoc_20274
-----------------------------------
Document wikidoc_23013 added on 2012-05-28 01:04:53 "even more slower"
wikidoc_23013
文件大小最多为一两页文字。 10页的索引大约需要2-3秒。
Tnx大家的帮助:)
您的问题可能与过多的内存使用无关。 系统使用的内存越多,运行速度就越快 。 这就是为什么我们向系统添加内存以提高其性能。 如果您认为使用较少的内存会以某种方式使系统更快,请取出一些内存。 这将迫使它使用更少的内存。 但是,毫不奇怪,如果这样做,它会变慢。
该系统使内存保持使用状态,因为它会花时间释放内存。 而且没有好处,因为空闲内存不会做任何事情。 就像今天使用的一半不一样,明天使用的可能不是两倍。 如果系统需要某种用途的内存,则可以轻松地将内存从一种用途直接转移到另一种用途-它不需要大量的可用内存。
现代操作系统只能保留少量内存,以应付某些类型的异常情况,即它们无法将内存从一种用途转换为另一种用途。 在Linux上,您可以使用以下命令找出系统需要多少可用内存: sysctl vm.min_free_kbytes
。 您可能会发现大概有多少可用内存,这很好,因为这是系统所需的。
因此,您不需要或不想释放内存。 您想弄清楚为什么系统运行缓慢。
更新 :从您的新信息来看, SE_doc_parse.py
正在SE_doc_parse.py
CPU。 如果可能的话,我会考虑优化该代码。
更新 :似乎是一种效率低下的字典算法,超出了要扩展到的大小并占用了CPU。
从讨论中看,您似乎只是将数据存储在一个巨大的巨大字典中(我常常不敢直说这句话;))也许将数据偏移到像redis这样的适当数据库中可能会减少python的内存使用量。 它还可以使您的数据更高效,更快速地使用。
我猜您的程序速度变慢是由于至少以下原因之一:
在这两种情况下,我们都需要查看一些代码(实质上是什么),以便提供更具体的解决方案。
常见的解决方案包括
del
来指示不再需要变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.