У меня есть аудио широковещательный сервер, записанный в Python и на основе Скрученного. Это хорошо работает, но его использование памяти увеличивается, когда существует больше пользователей на сервере, но использование памяти никогда не понижается, когда те пользователи выходят из строки. Поскольку Вы видите в следующем числе:
Вы видите, что кривая использования памяти повышается, где кривая слушателей/радио повышается, но после того, как пик слушателя/радио, использование памяти все еще высоко, никогда не понижается.
Я попробовал следующий метод за решение этой проблемы:
Вот среда, которую я использовал для выполнения моего скрученного сервера:
Дамп гуппи:
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 МБ, каковы они?
Мои вопросы:
Обновление 20.01.2010: это интересно, я загружаю последний файл журнала, и это показывает, что память никогда не увеличивается с момента. Я думаю, могло бы быть выделенное пространство памяти, является достаточно большим. Вот последние данные.
Обновление 21.01.2010: Другое число здесь. гудите.... повышают немного
Вы могли бы попробовать это: 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- . Первоначальная конструкция заключается в том, чтобы сохранить порции аудиоданных в списке, все они не имеют фиксированного размера. Как только общий размер списка буферизации превышает предел буфера, он выскакивает из верхней части списка некоторые фрагменты для ограничения размера. Это может выглядеть следующим образом:
Большинство из них больше 256 байт, Python использует malloc для блоков, которые больше 256 байт, а не использует пул памяти. И вы можете себе представить, что эти куски выделены и освобождены, что бы произошло? Например, когда блок размером 1350 освобождается, может быть свободное пространство размером 1350 байт в куче. После этого приходит еще один запрос 988, один раз malloc забрать отверстие, а затем есть еще одно новое маленькое свободное отверстие размера 362. После долгого бега дыр в кучах становится все больше, другими словами, в кучах так много осколков. Размер страницы виртуальной памяти обычно 4KB, эти фрагменты распределены по большому диапазону кучи, из-за чего ОС не может поменять местами эту страницу. Таким образом, RSS всегда высокий.
После изменения конструкции модуля управления аудио-блоками моего сервера он теперь использует мало памяти. Вы можете увидеть рисунок и сравнить его с предыдущим.
Новая конструкция использует bytearray , а не список последовательностей . Это большой кусок памяти, поэтому больше нет фрагментации.
Вам придется сопоставить текстуру с сферой , как вы сказали. Но afaik silverlight 3 не поддерживает аппаратно ускоренные 3d.
Итак, ваши варианты:
Надеюсь, что это поможет
-121--3747475-Пожалуйста, посмотрите на http://www.ikv.de/mediniunite/ Возможно, это поможет решить ваши проблемы. С medini объединить мы предоставляем полезный Diff/Merge-инструмент для Matlab/Simulink/Stateflow, который очень прост в использовании и, конечно, для интеграции в различные системы управления версиями.
-121--2681580-Для меня это похоже на утечку памяти в модуле C. Valgrind является хорошим инструментом для отслеживания проблем, связанных с распределением памяти. Я не знаю, как хорошо это работает с загруженными во время выполнения модулями, хотя...
Думали ли вы об использовании CentOS' альтернативы dtrace - SystemTap, думаю, она вызвана.
Это должно дать вам довольно низкий уровень трассировки того, что происходит внутри ваших *nix процессов.......a в темноте, но может дать вам некоторую большую прозрачность во внутрипроцессной активности.
Интересный вопрос. С нетерпением жду ответов других.
Бен