использование памяти, как освободить память

Я использую python, и при индексировании документов (для поисковой системы) требуется много оперативной памяти, после того как я прекратил процесс индексирования, память все еще заполнена (например, 8 ГБ ОЗУ). Это плохо, потому что мне нужна моя поисковая система для работы все время, а не для сброса ОС, когда я закончил индексирование. Есть ли эффективный способ управления огромными массивами, словарями и списками и как их освобождать. Есть идеи?

Я также видел некоторые вопросы об этом в stackoverflow, но они старые:

Объем памяти 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 каждый за помощь 🙂

  • glDrawElements для рисования куба в PyOpenGL
  • Аргументы подпроцесса Python
  • MemoryError с python / pandas и большими левыми внешними соединениями
  • как сделать скрипт python или perl переносимым как в linux, так и в windows?
  • Как использовать переменную внутри регулярного выражения?
  • Ошибка apache mod_wsgi с django в virtualenv
  • отправка кода из vim в stata
  • Отладчик Pycharm работает на Ubuntu, но не на Windows для идентичного кода
  • 3 Solutions collect form web for “использование памяти, как освободить память”

    Из обсуждения кажется, что вы храните данные только в гигантском гигантском диктове (нередко я могу сказать это с прямым лицом;)) Возможно, смещение данных в соответствующую базу данных, например redis, может уменьшить использование памяти python. Это может также сделать ваши данные более эффективными и быстрыми, с которыми можно работать.

    Ваша проблема не может быть связана с чрезмерным использованием памяти. Чем больше памяти используется системой, тем быстрее она работает. Вот почему мы добавляем память в систему для повышения ее производительности. Если вы считаете, что использование меньше памяти каким-то образом ускорит работу системы, возьмите немного памяти. Это заставит его использовать меньше памяти. Но неудивительно, что это будет медленнее, если вы это сделаете.

    Система сохраняет память в использовании, поскольку она требует усилий для освобождения памяти. И нет никакой пользы, поскольку свободная память ничего не делает. Не похоже, что сегодня вы используете вдвое больше, вы можете использовать в два раза больше завтра. Если система нуждается в памяти для чего-то, она может легко просто перемещать память напрямую из одного использования в другое – ей не нужно много памяти, сидящей свободно.

    Современные операционные системы поддерживают только небольшой объем памяти, чтобы справляться с определенными типами необычных случаев, когда они не могут переводить память из одного приложения в другое. В Linux вы можете узнать, сколько свободной памяти требуется системе с помощью этой команды: sysctl vm.min_free_kbytes . Вероятно, вы обнаружите, что это примерно то, сколько свободной памяти у вас есть – и это хорошо, потому что это то, что нужно системе.

    Таким образом, вам не нужно или хотите освободить память. Вы хотите понять, почему ваша система работает медленно.

    Обновление . Из вашей новой информации выглядит, что SE_doc_parse.py захлопывает процессор. Я бы посмотрел на оптимизацию этого кода, если это возможно.

    Обновление : Похоже, что это был неэффективный алгоритм словаря, который использовался над размерами, которые он предназначен для масштабирования и зависания процессора.

    Я бы предположил, что ваша программа замедляется, потому что по крайней мере одна из следующих причин:

    • Ваша память начинает меняться, причем данные поступают из ОЗУ на диск и наоборот. Решение состоит в том, что ваша программа использует меньше памяти.
    • Алгоритм, который вы используете, сильно влияет на размер данных. В этом случае поиск лучшего алгоритма, очевидно, является решением.

    В обоих случаях нам нужно будет увидеть некоторые из вашего кода (что, по сути, это означает), чтобы дать более конкретное решение.

    Общие решения включают

    • Использование Delphi Python для указания того, что переменная больше не нужна.
    • Использование итераторов вместо списков (итераторы не используют много памяти).
    Python - лучший язык программирования в мире.