Linux con 256 GB de núcleos mem / 48: la máquina comienza a agitarse / ahogarse con toneladas de memoria restante

12

Máquina: Dell r815, CentOS 5.4, 256 GB de RAM, 4 x 12 núcleos.

Tenemos una aplicación que tiene un archivo de 275GB. Realiza una clasificación in situ de 20 GB de datos a la vez, es decir, intercambia bits y los reemplaza en el mismo archivo. Todo esto funciona bien.

Hay un último paso que luego lee todo el archivo y hace una fusión en los diferentes fragmentos de 20 GB, y los envía a un archivo completamente nuevo.

Este proceso parece funcionar bien por un tiempo y termina vaciando alrededor de 50 GB en el disco. Algún tiempo después de esto, TODA la máquina comienza a enloquecer.

Comandos simples como ps -ef, ls -alcuelgan durante mucho tiempo y aparecen como CPU 100% (que es solo un núcleo).

Mirando las estadísticas de memoria top, veo que está usando alrededor de 120 GB de RAM (128 GB gratis) y tiene 120 GB en la sección "en caché".

¿Alguien ha visto este tipo de comportamiento antes? El mismo proceso funciona bien en una máquina con 64 GB de memoria, por lo que de alguna manera creo que está relacionado con el montaje de RAM que tengo en la máquina.

(mientras hablamos, estoy ejecutando la prueba en esta máquina con todos menos 64 GB, para descartar un problema de hardware).

¿Tal vez me estoy perdiendo algunos parámetros de VM /etc/sysctrl.conf?

¡Gracias!

aspitzer
fuente
¿Qué están haciendo los discos? ¿Vas a ir al infierno de intercambio?
Arenstar
Kernel de 64 bits / aplicación / etc. mencionaste 100% cpu, cuál es el promedio de carga cuando sucede, es la aplicación multiproceso (no usará todos los procesadores si no), lo que vmstat 4 te dice (específicamente io / cpu)
coredump
esto como "ps" son 100% de CPU está fuera de 4800% (porque 48 núcleos), por lo que es probable que estén bloqueados por io o algo así. el promedio de carga en la caja es solo como 5. los discos, que están en estado sólido, no están viendo muchas escrituras ... Parece más un problema de kernel que recursos
aspitzer
la máquina no está cambiando en absoluto.
aspitzer
1
sí ... ejecutándolo con 64 gb ahora. debería saber dentro de una hora si se relaciona con la cantidad total de mem en la máquina
aspitzer

Respuestas:

12

Su pregunta me recordó algo que leí recientemente:

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

Esto aborda cómo las arquitecturas NUMA (como puede encontrar en, digamos, un sistema AMD de 48 núcleos) afectan la asignación e intercambio de memoria. No sé si esto es con lo que te estás encontrando, pero sonó lo suficientemente similar como para que valga la pena leerlo.

Incluso si no es la respuesta, es una lectura fascinante.

larsks
fuente
1
Esa parece una buena oportunidad para resolver el problema de esta pregunta. Y es una lectura fantástica.
coredump
1
Esa es una gran lectura, y 4 zócalos, 256 Gb de RAM = 64 Gb por nodo, y parece que es donde está teniendo problemas, lo que replica exactamente la situación en el documento.
Mark Henderson
12

Así que esto parecía ser un error del núcleo en Centos 5.4 de 64 bits y Fedora 14. 64 bits Después de instalar Centos 5.5, el problema desapareció.

Lo siento, no tengo una mejor respuesta para todos ...

aspitzer
fuente
1
Oye hombre, si eso es lo que lo arregló, eso es lo que lo arregló. Dése la marca de verificación, para que otras personas puedan aprender de sus dificultades :-)
mfinni
0

Puede intentar agregar una línea a /etc/sysctl.conf para especificar que el intercambio se utilizará solo cuando sea absolutamente necesario.

intercambio = 0

Es posible que ya sepa que este archivo define la configuración global, por lo que es necesario tener en cuenta el impacto que este cambio tendrá en el resto de las aplicaciones que se ejecutan en el entorno.

NginUS
fuente
eso ya está configurado ... pero como mencioné, hay 128GB libres, por lo que no está afectando ningún problema de intercambio.
aspitzer
0

¿Dónde está tu espacio temporal? A menudo está en tempfs. Tempfs extrae espacio de la memoria respaldada por el espacio de intercambio, por lo que si termina con demasiadas cosas en tempfs, se activará la E / S de intercambio.

Dado el tamaño de los datos que está fusionando, esperaría intercambios cuando llegue a la fusión final.

Distribuir su almacenamiento de intercambio a través de múltiples discos puede ayudar.

BillThor
fuente
0

Si bien es posible que no esté presionando el intercambio, aún puede estar vinculado a E / S. La información de ls sugiere esto.

Miraría la salida de dstat -dfmostrar estadísticas de disco, o dstat -af(sí, será un gran número de columnas de ancho; esto es lo que sucede cuando tiene 48 núcleos y muestra la utilización de la CPU en todos ellos) si desea verlo todo.

Me sorprendería que todas las CPU estuvieran ocupadas (la clasificación de fusión no es una tarea intensiva de CPU), pero usted no dice nada de su sistema de E / S. Si tiene pocos discos y un montón de archivos, podría estar agotando el disco haciendo búsquedas en cada archivo para mantener el tipo de fusión alimentado.

Slartibartfast
fuente