Как найти источник увеличения использования памяти скрученного сервера?

У меня есть аудио широковещательный сервер, записанный в Python и на основе Скрученного. Это хорошо работает, но его использование памяти увеличивается, когда существует больше пользователей на сервере, но использование памяти никогда не понижается, когда те пользователи выходят из строки. Поскольку Вы видите в следующем числе: alt text

Вы видите, что кривая использования памяти повышается, где кривая слушателей/радио повышается, но после того, как пик слушателя/радио, использование памяти все еще высоко, никогда не понижается.

Я попробовал следующий метод за решение этой проблемы:

  1. Обновление, скрученное от 8,2 до 9,0
  2. Используйте гуппи, чтобы вывести бесформенный, но не помочь вообще
  3. Переключите селекторный реактор на epoll реактор, ту же проблему.
  4. Используйте objgraph для рисования схемы отношения объектов, но я не вижу точки от этого.

Вот среда, которую я использовал для выполнения моего скрученного сервера:

  • Python: 2.5.4 r254:67916
  • ОС: версия Linux, 2.6.18-164.9.1.el5PAE (mockbuild@builder16.centos.org) (gcc версия 4.1.2 20080704 (Red Hat 4.1.2-46))
  • Скрученный: 9.0 (под virtualenv)

Дамп гуппи:

Partition of a set of 116280 objects. Total size = 9552004 bytes.
 Index  Count   %     Size   % Cumulative  % Type
  0  52874  45  4505404  47   4505404  47 str
  1   5927   5  2231096  23   6736500  71 dict
  2  29215  25  1099676  12   7836176  82 tuple
  3   7503   6   510204   5   8346380  87 types.CodeType
  4   7625   7   427000   4   8773380  92 function
  5    672   1   292968   3   9066348  95 type
  6    866   1    82176   1   9148524  96 list
  7   1796   2    71840   1   9220364  97 __builtin__.weakref
  8   1140   1    41040   0   9261404  97 __builtin__.wrapper_descriptor
  9   2603   2    31236   0   9292640  97 int

Как Вы видите, общий размер, 9 552 004 байта составляют 9,1 МБ, и Вы видите RSS, о котором сообщает команда PS:

[xxxx@webxx ~]$ ps -u xxxx-o pid,rss,cmd
  PID   RSS CMD
22123 67492 twistd -y broadcast.tac -r epoll

RSS моего сервера составляет 65,9 МБ, это означает, что в моем сервере существует невидимое использование памяти на 56,8 МБ, каковы они?

Мои вопросы:

  1. Как найти источник увеличения использования памяти?
  2. Что видимое использование памяти гуппи?
  3. Что это невидимое использование памяти?
  4. Это вызывается утечками памяти некоторых модулей, записанных в C? Если это, как я могу проследить и зафиксировать это?
  5. Как Python управляет памятью? Пул памяти? Я думаю этот, мог бы вызванный блоками аудиоданных. Так, чтобы было мало утечек в блоке памяти, принадлежавшем интерпретатору Python.

Обновление 20.01.2010: это интересно, я загружаю последний файл журнала, и это показывает, что память никогда не увеличивается с момента. Я думаю, могло бы быть выделенное пространство памяти, является достаточно большим. Вот последние данные. alt text

Обновление 21.01.2010: Другое число здесь. гудите.... повышают немного alt text

Ой... Все еще восстановление работоспособности alt text

17
задан Glorfindel 15 May 2019 в 03:52
поделиться

3 ответа

Вы могли бы попробовать это: http://webservices.seekda.com/providers/webservicex.net/country

Если это не нужно обновлять очень часто, вы могли бы просто гуглить список (есть тысячи, например, это: http://www.nationsonline.org/oneworld/countries_of_the_world.htm ) и проанализировать его до формата, подходящего для вашего приложения.

-121--4349401-

Контекст, который вы передаете, также доступен в расширенных шаблонах. Добавив в контекст 'menu _ class': 'selected', можно задать

<div id="menu" class="{{ menu_class }}">

в базовом шаблоне.

Другой способ обойти будет

<div id="menu" class="mymenu {% block menu_attrib %}{% endblock %}">

, который затем может быть расширен в вашем шаблоне ребенка на

{% block menu_attrib %}selected{% endblock %}
-121--2406193-

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

  1. размер блока 511
  2. размер блока 1040
  3. размер блока 386
  4. размер блока 1350
  5. ...

Большинство из них больше 256 байт, Python использует malloc для блоков, которые больше 256 байт, а не использует пул памяти. И вы можете себе представить, что эти куски выделены и освобождены, что бы произошло? Например, когда блок размером 1350 освобождается, может быть свободное пространство размером 1350 байт в куче. После этого приходит еще один запрос 988, один раз malloc забрать отверстие, а затем есть еще одно новое маленькое свободное отверстие размера 362. После долгого бега дыр в кучах становится все больше, другими словами, в кучах так много осколков. Размер страницы виртуальной памяти обычно 4KB, эти фрагменты распределены по большому диапазону кучи, из-за чего ОС не может поменять местами эту страницу. Таким образом, RSS всегда высокий.

После изменения конструкции модуля управления аудио-блоками моего сервера он теперь использует мало памяти. Вы можете увидеть рисунок и сравнить его с предыдущим.

alt text

Новая конструкция использует bytearray , а не список последовательностей . Это большой кусок памяти, поэтому больше нет фрагментации.

6
ответ дан 30 November 2019 в 14:41
поделиться

Вам придется сопоставить текстуру с сферой , как вы сказали. Но afaik silverlight 3 не поддерживает аппаратно ускоренные 3d.

Итак, ваши варианты:

Надеюсь, что это поможет

-121--3747475-

Пожалуйста, посмотрите на http://www.ikv.de/mediniunite/ Возможно, это поможет решить ваши проблемы. С medini объединить мы предоставляем полезный Diff/Merge-инструмент для Matlab/Simulink/Stateflow, который очень прост в использовании и, конечно, для интеграции в различные системы управления версиями.

-121--2681580-

Для меня это похоже на утечку памяти в модуле C. Valgrind является хорошим инструментом для отслеживания проблем, связанных с распределением памяти. Я не знаю, как хорошо это работает с загруженными во время выполнения модулями, хотя...

2
ответ дан 30 November 2019 в 14:41
поделиться

Думали ли вы об использовании CentOS' альтернативы dtrace - SystemTap, думаю, она вызвана.

Это должно дать вам довольно низкий уровень трассировки того, что происходит внутри ваших *nix процессов.......a в темноте, но может дать вам некоторую большую прозрачность во внутрипроцессной активности.

Интересный вопрос. С нетерпением жду ответов других.

Бен

0
ответ дан 30 November 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: