LINUX.ORG.RU
ФорумAdmin

ejabberd. Куда ему столько памяти???


0

2

25106 jabber 20 0 875m 807m 4012 S 0 5.0 1:34.32 beam

Только что перезапущенный. Я сперва думал, что утечка. Фиг там.

Как его можно образумить, есть мысли?

★★★★★

Последнее исправление: KRoN73 (всего исправлений: 1)
Ответ на: комментарий от KRoN73

Вместе с erlang ставится. Лежит в <erlang dir>/lib/erlang/lib/observer-0.9.9/priv/bin/etop

Есть графический вариант (getop в той же директории)

anonymous
()
Ответ на: комментарий от anonymous
========================================================================================
 etop@airbase                                                              11:13:42
 Load:  cpu         0               Memory:  total        8475    binary         25
        procs      35                        processes    1191    code         3718
        runq        0                        atom          442    ets           254

Pid            Name or Initial Func    Time    Reds  Memory    MsgQ Current Function
----------------------------------------------------------------------------------------
<0.31.0>       user                     '-'    5812   34296       0 group:server_loop/3 
<0.41.0>       etop_txt:init/1          '-'    2289   21376       0 etop:update/1       
<0.30.0>       user_drv                 '-'     107    5728       0 user_drv:server_loop
<0.32.0>       group:server/3           '-'      37    5760       0 group:get_line1/4   
<0.21.0>       net_kernel               '-'       7    5800       0 gen_server:loop/6   
<0.23.0>       net_kernel:ticker/2      '-'       2    2528       0 net_kernel:ticker_lo
<0.0.0>        init                     '-'       0   26336       0 init:boot_loop/2    
<0.2.0>        etop_server              '-'       0   88272       0 etop:data_handler/2 
<0.3.0>        erl_prim_loader          '-'       0  108944       0 erl_prim_loader:loop
<0.5.0>        error_logger             '-'       0    5688       0 gen_event:fetch_msg/
========================================================================================

Мне это ни о чём не говорит :-/

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от hizel
25106 ?        S      1:35 /usr/lib64/erlang/erts-5.7.5/bin/beam -K true -P 250000 -- -root /usr/lib64/erlang -progname erl -- -home /var/spool/jabber -- -sname ejabberd@airbase -noshell -noinput -noshell -noinput -pa /usr/lib64/erlang/lib/ejabberd-2.1.6/ebin -mnesia dir "/var/spool/jabber" -s ejabberd -sasl sasl_error_logger {file,"/var/log/jabber/erlang.log"} -smp auto start 

Нода, как я понимаю, ejabberd@airbase

# ./etop -node ejabberd@airbase
Erlang R13B04 (erts-5.7.5) [source] [64-bit] [rq:1] [async-threads:0]

Eshell V5.7.5  (abort with ^G)
(etop@airbase)1> Error Couldn't connect to node ejabberd@airbase 

:-/

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от hizel

Пробовал:

# sudo -u jabber ./etop -node ejabberd@airbase
{error_logger,{{2011,3,26},{15,9,51}},{error,"Error when reading /dev/null/.erlang.cookie: enotdir"},[]}
{error_logger,{{2011,3,26},{15,9,51}},crash_report,[[{initial_call,{auth,init,['Argument__1']}},{pid,<0.20.0>},{registered_name,[]},{error_info,{exit,{{error,"Error when reading /dev/null/.erlang.cookie: enotdir"},[{auth,init_cookie,0},{auth,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[net_sup,kernel_sup,<0.9.0>]},{messages,[]},{links,[<0.18.0>]},{dictionary,[]},{trap_exit,true},{status,running},{heap_size,377},{stack_size,24},{reductions,329}],[]]}
{error_logger,{{2011,3,26},{15,9,51}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{{error,"Error when reading /dev/null/.erlang.cookie: enotdir"},[{auth,init_cookie,0},{auth,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{offender,[{pid,undefined},{name,auth},{mfa,{auth,start_link,[]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2011,3,26},{15,9,51}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},{mfa,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}
{error_logger,{{2011,3,26},{15,9,51}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})

etop без параметров от этого юзера то же самое вываливает.

KRoN73 ★★★★★
() автор топика

У меня кушает 45мб, генту, ejabberd 2.1.6, erlang 13.2.4 Может глюк какой. У меня практически в дефолтной конфигурации, БД встроенная.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Тоже Gentoo :-/

Может, связано как-то с тем, что контактов под 2,5 тыс. Но, ведь, активных — единицы :-/

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

В смысле, не контактов, а зарегистрированных юзеров.

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Юзеры лежат в локальной базе mnesia? Или во внешней? Встроенная мне кажется не рассчитана на такое количество. Посмотри сколько она на диске занимает, может он всю информацию оттуда при запуске кеширует... В любом случае лучше перенести во внешюю СУБД.

blind_oracle ★★★★★
()
Ответ на: комментарий от KRoN73

Через ejabberdctl debug надо собирать статистику:

> erlang:memory().
> p1_prof:m().

Также надо убрать +P 250000 (под это дело выделяется дофига памяти). И перейти на sql.

zenith ★★★
()
Ответ на: комментарий от JB

> у ejabberd потребление памяти еще растет от количества s2s соединений

Не совсем так. Фишка в том, что 60% памяти поедает грёбанный tls (openssl) и zlib.

zenith ★★★
()
Ответ на: комментарий от blind_oracle

>Юзеры лежат в локальной базе mnesia? Или во внешней?

Как отличить? :) Я в Erlang-инфраструктуре — ноль.

Посмотри сколько она на диске занимает


/var/spool/jabber весит 56Мб.
roster.DCD — 32Мб,
offline_msg.DAT - 16Мб,
vcard.DAT — 1,8Мб.

Остальное, соответственно, меньше.

В любом случае лучше перенести во внешюю СУБД.


Ну, да, вроде, народ про MySQL в роли бэкенда ejabberd положительно отзывался. Пароли точно без потерь перенесутся?

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от JB

>у ejabberd потребление памяти еще растет от количества s2s соединений

Вряд ли у десятка активных юзеров должно быть много s2s :-/

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

> Оно без хомяка не может, что ли?

да, кукисы ему складывать некуда иначе

JB ★★★★★
()
Ответ на: комментарий от KRoN73

Ну если ты не делал доп. телодвижений по настройке ODBC к внешней базе, то у тебя всё лежит во встроенной базе :)

В принципе для привязки к MySQL вроде как уже не нужен ODBC, есть нативный драйвер, я уже точно не помню.

Насчёт как перенесётся - не знаю, я настраивал только с нуля внешнюю базу.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

>то у тебя всё лежит во встроенной базе :)

Значит, так и есть. Как несколько лет назад, намучившись с jabberd2, пересел на ejabberd, так с нуля его поднял. И сейчас до сих пор на нём.

Насчёт как перенесётся - не знаю, я настраивал только с нуля внешнюю базу.


Вот это пока и останавливает. Собственно, до последнего мне и пофиг было, но нынешние 800Мб — смущают…

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

> Да: /dev/null:/sbin/nologin

Оно без хомяка не может, что ли?

Ну без куки ты никак статистику памяти вообще не соберёшь, так как к эмулятору удалённо не подключишься.

zenith ★★★
()

Вообще, наиболее вероятно - это большие таблица roster и passwd в мнезии, так как они в память полностью грузятся. SQL короче спасёт точно, ну и +P убрать нафиг: дефолтные 32000 хватит за глаза для твоей нагрузки.

zenith ★★★
()
Ответ на: комментарий от KRoN73

> Ну, да, вроде, народ про MySQL в роли бэкенда ejabberd положительно отзывался. Пароли точно без потерь перенесутся?

http://ivanosipov.ru/?p=372

zenith ★★★
()
Ответ на: комментарий от KRoN73

/usr/lib64/erlang/lib/observer-0.9.8.2/priv/bin/etop -node ejabberd@localhost -setcookie `cat /var/spool/jabber/.erlang.cookie`


-node взял из ejabberdctl

The node ejabberd@localhost is started with status: started

hizel ★★★★★
()
Ответ на: комментарий от hizel

>а какие там мучения, а я не знаю?

Да просто, то не работал, то глючил, то падал, то были проблемы с внешними транспортами… Пока jabberd стоял, только и приходилось им заниматься. А как поставил ejabberd — так уже несколько лет его, вообще, не вижу и не слышу :) Вот только обратил внимание сейчас, что память жрёт. Вышел на третье место среди потребителей :)

KRoN73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.