ejabberd: разница в памяти между процессами Erlang и Linux - PullRequest
3 голосов
/ 06 марта 2012

Я использую сервер ejabberd 2.1.10 в Linux (Erlang R14B 03). Я создаю XMPP-соединения, используя инструмент в пакетном режиме и отправляю сообщения случайным образом. ejabberd принимает большинство соединений. Хотя связи постоянно увеличиваются, значение erlang: memory (total) наблюдается в пределах диапазона.
Но если я проверю использование памяти процессом ejabberd с помощью команды top, я могу заметить, что использование памяти процессом ejabberd непрерывно увеличивается.

Я вижу, что разница между значениями erlang: memory (total) и использованием памяти, показанным командой top, постоянно увеличивается.

Пожалуйста, дайте мне знать причину показанной разницы в памяти. Это из-за утечки памяти? Могу ли я отладить эту проблему? Зачем нужна дополнительная память (разница между командой erlang & top), если это не утечка памяти?

1 Ответ

2 голосов
/ 22 марта 2012

Утечка памяти в самой Erlang VM или в не-Erlang частях ejabberd будет иметь эффект, который вы описываете. ejabberd содержит несколько файлов NIF - в ejabberd-2.1.10 имеется 10 файлов ".c".

Был ли ваш ejabberd настроен на "--enable-nif"? Если это так, попробуйте сравнить с версией, созданной с использованием «--disable-nif», чтобы увидеть, имеет ли она другое поведение использования памяти.

Другие возможности отладки включают использование Valgrind для обнаружения и обнаружения утечки. (Я не пробовал использовать его на Erlang VM; может быть несколько ложных срабатываний, но, если повезет, утечка будет заметна по размеру или по источнику.)

Последнее замечание: куча процесса Erlang, возможно, была фрагментирована. Разрывы между распределениями будут учитываться в размере процесса ОС; Не похоже, что они включены в erlang: memory (total).

...