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 -al
cuelgan 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!
Respuestas:
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.
fuente
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 ...
fuente
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.
fuente
¿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.
fuente
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 -df
mostrar estadísticas de disco, odstat -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.
fuente