erlang - `ejabberdctl start` da como resultado el error" kernel pid ended "- ¿qué debo hacer?
crash-dumps (1)
He buscado en Google durante tres horas pero fue en vano.
Tengo una instalación de ejabberd que no está instalada usando apt. Se instala desde la fuente y no hay ningún programa llamado ejabberd. Start and Stop y todo es a través de ejabberdctl.
Funcionó perfectamente durante un mes y de repente un día se detuvo con el infame
kernel pid terminated error
Cada vez que lo hago
sudo ejabberdctl start --node ejabberd@MasterService
Se genera un archivo erl_crash y cuando intento
ejabberdctl
yo obtengo
Failed to connect to RPC at node ejabberd@MasterService
Ahora que he intentado
- Intentó matar a todos los procesos de ejabberd, beam, epmd y start fresh - NO FUNCIONÓ
- Comprobado / etc / hosts y nombre de host y todo está bien. El nombre de host se proporciona en el archivo de hosts con IP
- Comprueba el archivo ejabberdctl.conf para asegurarte de que el nombre de host es correcto y el nombre del nodo es correcto
- el archivo revisado .erlange.cookie se está creando con contenido en él
En toda la web de una manera u otra, la búsqueda me llevó a cualquiera de los anteriores.
No tengo adónde ir y no sé dónde más buscar. Cualquier ayuda sería muy apreciada.
Tendrás que analizar el volcado de emergencia para intentar adivinar por qué falló.
Para llevar a cabo esta tarea, Erlang tiene una herramienta web especial (llamada, uh, webtool
) desde la cual se puede usar una aplicación especial, Crash Dump Viewer, para cargar un volcado e inspeccionar los rastros de la pila de los procesos de Erlang en el momento del accidente. .
Tienes que
Instale los paquetes necesarios:
# apt-get install erlang-webtool erlang-observer
Inicie un intérprete de Erlang:
$ erl
(Se toman acciones adicionales allí).
Ejecute la herramienta web. En el caso más simple, escuchará en el host local:
webtool:start().
(Tenga en cuenta el período). Imprimirá una URL para navegar en su navegador y acceder a la herramienta en ejecución.
Si esto sucede en un servidor, y prefiere que la herramienta web escuche en alguna interfaz no local, la encantación de la llamada sería más complicada:
webtool:start(standard_path, [{port, 8888}, {bind_address, {0, 0, 0, 0}}, {server_name, "server.example.com"}]).
La especificación de IP
{0, 0, 0, 0}
lo hará escuchar en todas partes, y también podría especificar algunos octetos más sensibles, como{192, 168, 0, 1}
. La cláusulaserver_name
podría usar un nombre arbitrario; esto es lo que se imprimirá en la URL generada, el nombre de host del servidor.Ahora conéctese a la herramienta con su navegador, vaya a la entrada del menú "Herramientas de inicio", inicie el visor de volcado de errores y haga que aparezca un vínculo en el menú superior de la herramienta. Proceda allí y busque un enlace para cargar el volcado de emergencia.
Después de cargar un volcado de emergencia, intente meterse con la interfaz de la herramienta para ver los restos de la pila de los procesos activos de Erlang. Al menos uno de ellos debe contener algo sospechoso, que debe incluir un mensaje de error: eso es lo que está buscando para refinar su pregunta (o pedirle a otro en la lista de correo de ejabberd ).
Para salir de la herramienta, ejecuta
webtool:stop().
en el intérprete de Erlang en ejecución. Y luego salga corriendo
q().
y esperando un poco o presionando
Ctrl-g
y luego ingresando la letraq
seguido de presionar la tecla Retorno.
Los enlaces relevantes son: el manual del visualizador de vuelco de emergencia y el manual de la herramienta web .