Solución de problemas de rendimiento de Caché y Memory Manager

Antes Windows Server 2012, dos posibles problemas principales provocaban que la memoria caché de archivos del sistema creciera hasta que la memoria disponible se agotase casi en determinadas cargas de trabajo. Cuando esta situación da lugar a que el sistema sea lento, puede determinar si el servidor se enfrenta a uno de estos problemas.

Contadores que se supervisarán

  • Memoria\Duración media de caché en espera a largo plazo < de 1800 segundos

  • Memoria\Mbytes disponibles es bajo

  • Memoria\Bytes residentes de caché del sistema

Si Memory\Available Mbytes es bajo y, al mismo tiempo, Memory\System Cache Resident Bytes consume una parte importante de la memoria física, puede usar RAMMAP para averiguar para qué se usa la memoria caché.

La caché de archivos del sistema contiene estructuras de datos de metarchivo NTFS

Este problema se indica mediante un gran número de páginas de metarchivo activas en la salida rammap, como se muestra en la ilustración siguiente. Es posible que este problema se haya observado en servidores ocupados con millones de archivos a los que se tiene acceso, lo que da lugar a que los datos del metarchivo NTFS en caché no se liberan de la memoria caché.

rammap view

El problema que se solía mitigar con la herramienta DynCache. En Windows Server 2012+, la arquitectura se ha rediseñado y este problema ya no debería existir.

La caché de archivos del sistema contiene archivos asignados a memoria

Este problema se indica mediante un gran número de páginas de archivos asignados activas en la salida de RAMMAP. Esto suele indicar que alguna aplicación del servidor está abriendo numerosos archivos grandes mediante CreateFile API con FILE_FLAG_RANDOM_ACCESS marca establecida.

Este problema se describe en detalle en el artículo de KB 2549369. FILE_FLAG_RANDOM_ACCESS marca es una sugerencia para que el Administrador de caché mantenga las vistas asignadas del archivo en memoria tanto como sea posible (hasta que el Administrador de memoria no señale una condición de memoria baja). Al mismo tiempo, esta marca indica al Administrador de caché que deshabilite la captura previa de los datos de archivo.

Esta situación se ha mitigado hasta cierto punto gracias a las mejoras de recorte del conjunto de trabajo en Windows Server 2012+, pero el propio problema debe solucionarlo principalmente el proveedor de la aplicación al no usar FILE_FLAG_RANDOM_ACCESS. Una solución alternativa para el proveedor de la aplicación podría ser usar prioridad de memoria baja al acceder a los archivos. Esto se puede lograr mediante la API SetThreadInformation. Las páginas a las que se accede con prioridad de memoria baja se quitan del espacio de trabajo de forma más agresiva.

El Administrador de caché, a partir de Windows Server 2016 mitiga aún más esto omitiendo FILE_FLAG_RANDOM_ACCESS al tomar decisiones de recorte, por lo que se trata igual que cualquier otro archivo abierto sin la marca FILE_FLAG_RANDOM_ACCESS (el Administrador de caché sigue respetando esta marca para deshabilitar la captura previa de datos de archivo). Todavía puede provocar un exceso de caché del sistema si tiene un gran número de archivos abiertos con esta marca y a los que se accede de forma realmente aleatoria. Se recomienda encarecidamente que las FILE_FLAG_RANDOM_ACCESS no las utilicen.

Se supera sistemáticamente el umbral de páginas desaseadas de archivos remotos.

Este problema se indica si un sistema experimenta ralentizaciones ocasionales durante las escrituras desde un cliente remoto. Este problema puede producirse cuando se escribe una gran cantidad de datos desde un cliente remoto rápido a un destino de servidor lento.

Antes de Windows Server 2016, en este escenario, si se alcanza el umbral de página desaprobación en la memoria caché, las escrituras tendrán un comportamiento mayor como si hubiera escritura a través. Esto puede provocar un vaciado de una gran cantidad de datos en el disco, lo que puede provocar retrasos largos si el almacenamiento es lento, lo que genera tiempos de espera para la conexión remota.

En Windows Server 2016 y en adelante, se ha puesto en marcha una mitigación para reducir la probabilidad de tiempos de espera. Se implementa un umbral de página desalineado independiente para escrituras remotas y se realizará un vaciado en línea cuando se supere. Esto puede dar lugar a ralentizaciones ocasionales durante una actividad de escritura intensa, pero elimina el riesgo de que se agote el tiempo de espera en la mayoría de los casos. De forma predeterminada, este umbral de página desvía remota es de 5 GB por archivo. Para algunas configuraciones y cargas de trabajo, un número diferente funciona mejor.

Este umbral se puede controlar con la siguiente clave de registro: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\RemoteFileDirtyPageThreshold. Si el tamaño predeterminado de 5 GB no funciona bien para la configuración, se recomienda intentar aumentar el límite en incrementos de 256 MB hasta que el rendimiento sea satisfactorio. Tenga en cuenta lo siguiente:

  • Se requiere un reinicio para que los cambios en esta regkey sumen efecto.

  • Las unidades de RemoteFileDirtyPageThreshold son el número de páginas (con el tamaño de página administrado por el Administrador de caché). Esto significa que debe establecerse en el tamaño deseado en bytes, dividido entre 4096.

  • Los valores recomendados son 128 MB < = N < = 50 % de memoria disponible.

  • Este umbral se puede deshabilitar completamente si se establece en -1. Esto no se recomienda, ya que puede dar lugar a tiempos de espera para las conexiones remotas.