23 votos

La fragmentación de memoria Linux

Hay una forma de detectar la fragmentación de memoria en linux ? Esto es debido a que en algunos largos de funcionamiento de los servidores que he notado una degradación del rendimiento y sólo después de reiniciar el proceso veo mejor rendimiento. Me di cuenta más cuando el uso de linux enorme página de soporte-son enormes páginas en linux más propensos a la fragmentación ?

He mirado en /proc/buddyinfo en particular. Quiero saber si hay alguna forma mejor(no sólo los comandos de la CLI de por sí, cualquier programa o fondo teórico que haría).

12voto

Tim Post Puntos 1268

Estoy respondiendo a la etiqueta. Mi respuesta es específica sólo para Linux.

Sí, las páginas grandes son más propensas a la fragmentación. Hay dos puntos de vista de la memoria, en el que su proceso se consigue (virtual) y el kernel administra (real). El más grande de cualquier página, más difícil va a ser para el grupo (y mantener) sus vecinos, especialmente cuando el servicio se está ejecutando en un sistema que también tiene que apoyar a otros que, por defecto, asignar y escribir de manera más memoria de la que realmente terminan usando.

El núcleo de la asignación de (real) otorga a las direcciones privadas. Hay una muy buena razón por la que el espacio de usuario los ve como el núcleo presenta, debido a que el núcleo debe ser capaz de sobreasignación sin confundir el espacio de usuario. Su proceso se consigue un agradable, contiguo "Disneyficado" espacio de direcciones en el que trabajo, olvidándose de lo que el núcleo es realmente haciendo con que la memoria detrás de las escenas.

La razón por la que ver la degradación del rendimiento en el largo correr de los servidores es más probable debido a que los bloques asignados que no han sido explícitamente bloqueado (por ejemplo mlock()/mlockall() o posix_madvise()) y no se modificó en un tiempo se han paginado, lo que significa que su servicio de patines para el disco, cuando tiene que leer. La modificación de este comportamiento hace que su proceso de un mal vecino, que es la razón por la que muchas personas ponen sus RDBMS en una completamente diferente del servidor de web/php/python/ruby/lo que sea. La única manera de arreglar eso, sana, es reducir la competencia por los bloques contiguos.

La fragmentación es el único que realmente notable (en la mayoría de los casos) cuando Una página está en la memoria y en la página B se ha trasladado a la swap. Naturalmente, re-iniciar su servicio parecer, el "cura", pero sólo porque el kernel no ha tenido una oportunidad a la página a cabo el proceso' (ahora) recién bloques asignados dentro de los límites de su relación de sobreasignación.

De hecho, a partir de re-(digamos) 'apache' bajo una carga alta es probable que va a enviar bloques de titularidad de otros servicios directamente a disco. Así que sí, el 'apache' podría mejorar por un tiempo corto, pero 'mysql' podría sufrir .. al menos hasta que el kernel hace que ellos sufren por igual, cuando no es simplemente una falta de suficiente memoria física.

Agregar más memoria, o se separan exigentes malloc() los consumidores :) no solo que la fragmentación que usted necesita para estar mirando.

Intente vmstat para obtener una visión general de lo que realmente se almacena en donde.

4voto

inikulin Puntos 283

Utilizando enormes páginas no debe causar más la fragmentación de memoria en Linux, el soporte de Linux para gran páginas es sólo para la memoria compartida (a través de / shmget o mmap), y una gran páginas que se utiliza debe ser solicitada expresamente y preasignados por un administrador del sistema. Una vez en memoria, que están atrapados allí, y no se intercambia. El reto de intercambio en las páginas grandes en la cara de la fragmentación de la memoria es exactamente la razón por la que permanecen anclados en la memoria (a la hora de asignar un 2MB gran página, el kernel debe encontrar 512 libre contiguo 4KB páginas, que puede incluso no existir).

Documentación de Linux en gran páginas: http://lwn.net/Articles/375098/

Hay una circunstancia en la que la fragmentación de la memoria podrían causar grandes asignación de la página a ser lento (pero no en las que las grandes páginas de la causa de la fragmentación de la memoria), y que si su sistema está configurado para hacer crecer el grupo de páginas grandes, si es solicitado por una aplicación. Si /proc/sys/vm/nr_overcommit_hugepages es mayor que /proc/sys/vm/nr_hugepages, esto puede suceder.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: