¿Qué puede causar que TODOS los servicios en un servidor se caigan, y aún así respondan al ping? y cómo averiguar

9

Me ha sucedido ya dos veces en muy pocos días que mi servidor se cae por completo, lo que significa http, ssh, ftp, dns, smtp, básicamente TODOS los servicios dejan de responder, como si el servidor se hubiera apagado, excepto que todavía responde al ping , que es lo que más me sorprende.

Tengo algunas secuencias de comandos php que causan una gran carga (CPU y memoria) en el servidor en ráfagas cortas, utilizadas por un pequeño grupo de usuarios, pero generalmente el servidor "sobrevive" perfectamente a estas ráfagas, y cuando se cae nunca coinciden con tales picos en el uso (no digo que no se pueda relacionar, pero no sucede solo después de eso).

No te estoy pidiendo que mágicamente puedas decirme la causa última de estos accidentes, mi pregunta es: ¿hay un solo proceso cuya muerte pueda hacer que todos estos servicios se caigan simultáneamente? Lo curioso es que todos los servicios de red se caen, excepto el ping. Si el servidor tuviera el 100% de la CPU consumida por algún proceso, tampoco respondería al ping. Si apache se bloqueó debido a (por ejemplo) un script php roto, eso afectaría solo http, no ssh y dns ... etc.

Mi sistema operativo es Cent OS 5.6

Lo más importante, después de reiniciar el servidor, ¿qué registros del sistema debo mirar? / var / log / messages no revela nada sospechoso.

matteo
fuente

Respuestas:

8

( tl; dr todavía responde al ping es un comportamiento esperado, verifique el uso de su memoria)

Las solicitudes de eco ICMP (es decir, ping) son manejadas por la pila de red en el núcleo, sin ninguna otra dependencia.

El núcleo se conoce como "residente de memoria", lo que significa que siempre se mantendrá en la RAM y no se puede cambiar al disco como lo hace una aplicación normal.

Esto significa que en situaciones en las que las aplicaciones que se quedan sin memoria física se intercambian en el disco, pero el núcleo permanece donde está. Cuando tanto la memoria física como la de intercambio están llenas (y el sistema ya no puede administrar sus programas), la máquina se caerá. Sin embargo, debido a que a) el núcleo todavía está en la memoria yb) puede responder a las solicitudes de ping sin la ayuda de nada más, el sistema seguirá respondiendo al ping a pesar de que todo esté muerto.

Con respecto a su problema, sospecharía fuertemente de problemas de memoria. Instale "sysstat" y use el comando "sar" para ver un registro de memoria / cpu / load / io load, etc. Esperaría que en los momentos de bloqueo se vería tanto el 100% físico como el intercambio.

También consideraría mirar dmesg o / var / log / messages en busca de cualquier signo de que se invoque el OOM-killer (asesino sin memoria). Este es el sistema de emergencia del núcleo que comenzará a matar procesos en caso de que se agote la memoria. Su efectividad depende en gran medida de los procesos que se están eliminando. Un solo proceso que consume la memoria se eliminará de manera eficiente y la memoria se liberará, sin embargo, un sitio web basado en Apache generará procesos de reemplazo tan pronto como se elimine un proceso secundario.

Cooperativas
fuente
+1 para OOM Killer
HTTP500
Muchas gracias, estoy casi seguro de que este es el problema, ya que tanto la RAM como el intercambio estaban llenos antes de la falla del servidor. (Puedo ver las estadísticas del Gerente de ovh). Y probablemente son algunos de mis scripts de php locos que usan mucha memoria. Sin embargo, me desconcierta por un par de razones. (1) parece que la memoria cargada por php no se libera después, pero eso no tendría sentido; (2) en cualquier caso, no esperaría que un sistema operativo adecuado muriera por completo solo debido a uno (o incluso a algunos) procesos que usan demasiada memoria ... Espero que lo
haga
negarse a asignar memoria a los programas que lo solicitan cuando no hay suficiente RAM para que el sistema siga funcionando correctamente ... Quiero decir, un programa defectuoso o incluso malicioso nunca debería poder destruir todo el sistema ...
matteo
3
@matteo Linux tiene lo que llama "sobrecompromiso": el hecho de que malloc()1 GB de RAM no signifique realmente que lo va a usar, por lo que el administrador de memoria realiza un seguimiento de la cantidad de memoria que su programa cree tener y cuánta memoria El programa realmente ha utilizado, y en realidad funciona bien, la mayoría de las veces. Al menos, hasta que más de un programa realmente quiera usar todo el 1GB que cree que tiene.
DerfK
1
@matteo veo ninguna indicación de que este es un tema OOM. Por lo general, el OOM-killer elegirá procesos específicos o que cumplan ciertos criterios, pero no siempre matará a un demonio como ssh. Esto definitivamente está en el lado de E / S. No explicó su situación / especificaciones de hardware como solicité en mi respuesta.
ewwhite
5

Por lo general, es un problema de E / S o subsistema de disco. Muchas veces, esto se combinará con un promedio de carga del sistema extremadamente alto. Por ejemplo, el sistema detallado en el gráfico a continuación dejó de responder (aunque era pingable) cuando un script se ejecutó mal, bloqueó un montón de archivos y la carga aumentó a 36 ... en un sistema de 4 CPU.

ingrese la descripción de la imagen aquí

Los servicios que se ejecutan en RAM y no requieren acceso al disco continúan ejecutándose ... Por lo tanto, la pila de red (ping) está activa, pero los otros servicios se bloquean cuando se requiere acceso al disco ... SSH cuando se hace referencia a una clave o búsqueda de contraseña necesaria. SMTP tiende a apagarse cuando el promedio de carga alcanza 30 o más ...

Cuando el sistema está en este estado, intente un control remoto nmapcontra la IP del servidor para ver qué pasa.

Su registro probablemente no funcione si se trata de un problema de disco o almacenamiento ...

¿Puedes describir la configuración del hardware? ¿Es esta una máquina virtual? ¿Cuál es el diseño de almacenamiento?

Más que iniciar sesión, desea ver si puede graficar el rendimiento del sistema y comprender cuándo sucede esto. Vea si esto se correlaciona con una actividad específica.

ewwhite
fuente
Suponiendo que este sea el problema, ¿hay alguna manera de decirle a SSH que mantenga las contraseñas en la memoria, por lo que incluso si el servidor está en este estado, al menos puedo iniciar sesión a través de ssh y ejecutar algunos comandos para ver ¿que esta pasando?
matteo
1
Si se trata de E / S, debe llegar al fondo del problema. Si se trata de un tiempo de espera de la matriz de disco o de la interacción del controlador, es diferente a un script que se ejecuta mal o un problema de contención de recursos.
ewwhite