内存使用情况,如何释放内存(memory usage, how to free memory)

2019-06-24 20:53发布

我使用Python和索引文件(搜索引擎)时,它需要大量的内存,当我停止索引过程记忆依然充满(如8GB的内存)。 这是不好的,因为我需要我的搜索引擎工作的所有时间,而不是当我完成索引复位OS。 有没有什么有效的方法如何与巨大的数组,字典和列表,以及如何释放他们管理。 有任何想法吗?

我也看到了关于它的计算器一些问题,但他们都老了:

Python的内存占用与堆大小

在Python资料内存分配(与numpy的阵列的支持)

信息:

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大家的帮助:)

Answer 1:

从讨论看来你是存储任何数据,但一个巨大的庞大的字典(不,我常常说着脸;))中的数据可能抵消到一个合适的数据库一样的Redis可能会降低蟒蛇的内存使用情况。 这也可能使您的数据更加高效,快速的工作。



Answer 2:

您的问题,不可能涉及到太多的内存使用。 本系统采用更多的内存, 更快的运行。 这就是为什么我们添加内存到系统,以提高其性能。 如果你认为使用更少的内存会以某种方式使系统速度更快,需要一些内存不足。 这将迫使它使用较少的内存。 但是,这并不奇怪,它会如果你这样做会比较慢。

该系统使内存的使用,因为它需要的努力,使内存可用。 而且也没有好处,因为可用内存没有做任何事情。 如果你今天用一半之多它不喜欢,你可以使用尽可能多的明天的两倍。 如果系统需要记忆的东西,它可以很容易地只是直接从一个使用移动存储到另一个 - 它并不需要大量的内存围坐免费。

现代操作系统只保留自由应对某些类型的不寻常的情况下,他们无法从一个应用到另一个过渡少量内存的内存。 在Linux上,你可以找到系统使用此命令多少空闲内存需求: sysctl vm.min_free_kbytes 。 您可能会发现这是大概有多少可用内存有 - 这是很好的,因为这是系统需要。

所以,你不需要或不想要释放内存。 你想弄清楚为什么你的系统很慢。

更新 :从你的新的信息,它看起来像SE_doc_parse.py是硬地一声CPU。 我想看看优化的代码,如果可能的话。

更新 :似乎是它的目的是扩展到和霸占CPU大小以上正在使用一个低效率的字典算法。



Answer 3:

我猜想,你的程序变慢,因为以下原因至少一个:

  • 你的记忆开始交换,从RAM中的数据将磁盘,反之亦然。 该解决方案确实是你的程序使用较少的内存。
  • 你惨使用秤的数据大小的算法。 在这种情况下,找到一个更好的算法显然是解决方案。

在这两种情况下,我们需要看到一些你的代码(它实际上相当于),以提供一个更具体的解决方案。

常见的解决方案包括:

  • 使用Python的del为了表明不需要变了。
  • 使用迭代器而不是列表(迭代器不使用的内存)。


文章来源: memory usage, how to free memory