2012-03-06 5 views
3

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

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

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

ответ

2

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^