Búsqueda de sitios web

Corrección del alto uso de memoria por metarchivo en Windows Server 2008 R2


Uno de los servidores de archivos que ejecutan Windows Server 2008 R2 encontró un problema de alta carga de RAM que provocó problemas con el servidor y el rendimiento de las aplicaciones. Resultó que la memoria estaba inundada por la caché de archivos del sistema que contenía metadatos del sistema de archivos. El problema afecta potencialmente a todos los servidores de archivos con una gran cantidad de archivos a los que acceden los usuarios. Es el más crítico para las versiones de Windows x64, en las que el tamaño del archivo de metadatos en la memoria puede aumentar casi hasta el tamaño total de la RAM.

Alta carga de RAM en el servidor de archivos de Windows

El problema se manifiesta de la siguiente manera: en el Administrador de tareas vemos que la memoria física está ocupada en un 95-99%.

En la pestaña Procesos, no hay ningún proceso filtrado con un consumo de memoria anormalmente alto. Además, si suma los valores aproximados de la memoria utilizada por todos los procesos, no obtendrá ni el 50% de la memoria física que tiene en su servidor. ¿Qué se come entonces la memoria?

Los datos reales sobre el uso de RAM se pueden obtener con la ayuda de una pequeña utilidad: RAMMap (de Mark Russinovich). Descargue el archivo que contiene la herramienta y ejecute RAMMap.exe con privilegios de administrador. En la pestaña Use Counts, vemos que Metafile está usando la mayor cantidad de RAM. (En nuestro caso, está usando 11 de 25 GB de RAM del servidor).

¿Qué es un Metarchivo en Windows?

Un metarchivo es una parte de la memoria caché del sistema que contiene metadatos NTFS y se utiliza para aumentar el rendimiento del sistema de archivos al acceder a los archivos. Los metadatos NTFS incluyen los datos de MFT (Master File Table). Para cada archivo o carpeta al que acceden los usuarios, se crea en el metarchivo un bloque correspondiente de al menos 1 KB (el registro de un atributo de cada archivo es de 1 KB y cada archivo tiene al menos un atributo). Por lo tanto, en servidores de archivos con una gran cantidad de archivos, el tamaño del metarchivo (caché NTFS) puede superar varias decenas de gigabytes.

Es imposible deshabilitar este caché o administrarlo usando las herramientas integradas de Windows. Como solución, puede aumentar el tamaño de la memoria en el servidor, pero no siempre es posible.

Para liberar memoria, puede reiniciar el servidor, pero en algún momento el tamaño del metarchivo en la memoria comienza a crecer increíblemente.

Por ejemplo, puede estimar el tamaño de la MFT utilizando otra herramienta de Russinovich: ntfsinfo. En nuestro caso, el tamaño de la MFT en un disco de 2 TB es de 13 GB.

Cómo limpiar rápidamente un metarchivo

RAMMap permite borrar rápidamente la memoria usada de la basura MFT sin reiniciar el servidor. Para hacerlo, seleccione Vacío -> Conjunto de trabajo del sistema vacío en el menú.

Después de eso, el tamaño del metarchivo en la memoria se redujo docenas de veces y el porcentaje de uso de RAM por parte de la CPU se redujo del 95 % al 26 %.

La principal desventaja de este método es que la compensación es manual y no se puede hacer automáticamente.

Servicio de caché dinámico para administrar el caché de archivos

Otra solución, más cardinal, de alta carga de memoria por parte del metarchivo del sistema de archivos es la instalación de Dynamic Cache Service ( http://www.microsoft.com/en-us/download/details.aspx?id=9258). Este servicio permite gestionar los parámetros de la caché MFT dedicada utilizando las API del sistema.

Importante. Use esta solución solo si ocurre el problema descrito anteriormente. La instalación de este servicio no será una solución universal para otras causas de alto uso de memoria en sus servidores.

Es bastante fácil instalar DynCache (hay instrucciones detalladas en el archivo).

  • Copie el archivo DynCache.exe a la carpeta %SystemRoot%\System32

  • Cree DynCache servicio usando este comando:

    sc create DynCache binpath= %SystemRoot%\System32\DynCache.exe start= auto type= own DisplayName= "Dynamic Cache Service"

  • Importe DynCache.reg al registro (contiene valores predeterminados)

  • Cambie los valores de las siguientes claves de registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters

    1. MaxSystemCacheMBytes: 4096 (dec): el tamaño máximo de caché (Mb)

    2. MinSystemCacheMBytes: 100 (diciembre): el tamaño mínimo de caché (MB)

    Nota. Estas y otras configuraciones del servicio DynCache deben editarse de acuerdo con el tamaño de la RAM, la carga del servidor, el rendimiento requerido, etc. Como regla general, no se recomienda configurar el tamaño de la caché en más de la mitad de la RAM física instalada en el servidor. Después de realizar los cambios, no necesita reiniciar DynCache, ya que todos los cambios se aplican dinámicamente.

  • Ejecute el servicio usando este comando:

    sc start DynCache

En nuestro caso, después de haber instalado el servicio DynCache, el uso de memoria por parte del metarchivo dejó de superar los 4 GB que habíamos configurado. Los usuarios no han informado de ningún problema de rendimiento en el servidor de archivos.

Artículos relacionados