¿Reducir el uso de memoria "metarchivo"?

8

La computadora de mi trabajo (Windows 7 de 64 bits) pasa mucho tiempo intercambiando memoria cuando cambio de programa. Esto me sorprende ya que tengo 4 GB de RAM, y los programas que uso no son particularmente hambrientos de RAM (Outlook, Emacs, p4win, Firefox, varias herramientas de compilación). Descargué RAMMap y muestra más de un gigabyte de memoria utilizada por "Metafile".

Del blog de Sysinternals :

El metarchivo es parte de la memoria caché del sistema y consta de metadatos NTFS. Los metadatos de NTFS incluyen la MFT, así como otros archivos de metadatos de NTFS. ... En la MFT, cada registro de atributo de archivo toma 1k y cada archivo tiene al menos un registro de atributo. Agregue a esto los otros archivos de metadatos NTFS y podrá ver por qué la categoría de Metarchivo puede crecer bastante en servidores con muchos archivos.

Así que entiendo cuáles son los datos del "Metarchivo" ... Trabajo en compilaciones grandes que comprenden cientos de miles de archivos (ninguno es tan grande, pero suman varios gigabytes). Mi pregunta es ¿cómo puedo reducir la cantidad de memoria utilizada por "Metafile"? No estoy usando activamente todos esos archivos a la vez, entonces, ¿por qué Windows necesita mantener la información en la RAM? Reiniciar mi máquina cada vez que sincronizo una nueva compilación es realmente molesto.

Jay Conrod
fuente
44
Las compilaciones son intensivas en E / S y, por lo tanto, Windows mantiene un gran caché del sistema de archivos para mejorar el rendimiento. Desafortunadamente, las herramientas de construcción también usan mucha memoria y generalmente en picos grandes, lo que probablemente esté causando el pantano. Como esto está compitiendo contra el caché del sistema. La mejor solución podría ser agregar más memoria.
tgiphil
@tgiphil, es comprensible que se use mucha memoria al momento de pagar o hacer la compilación. Sin embargo, todavía se está utilizando y todavía causa una paliza mucho más tarde cuando estoy trabajando en un área pequeña. Lamentablemente, no me dará más memoria.
Jay Conrod
Creo que Windows 7 ya está optimizando su rendimiento con el almacenamiento en caché. Entonces, para aumentar la memoria disponible y reducir el intercambio, cierre todas las aplicaciones innecesarias. Puede recuperar una buena porción de memoria cerrando Outlook y Firefox, por ejemplo. Si usa Visual Studio y solo necesita compilar, intente crear una línea de comando. Espero que esto ayude. Por cierto. Con una memoria tan baja (6 Gb por debajo de $ 100), es una excelente inversión en productividad.
tgiphil

Respuestas:

4

Creo que el caché del sistema libera su memoria cuando es necesario, pero pueden ocurrir fallas. A continuación se enumeran algunas posibilidades.

Su sistema de 64 bits asigna la memoria de video en los primeros 4 GB de memoria. Entonces, si su tarjeta de video tiene mucha memoria, esa memoria se pierde, como se describe en:
La memoria utilizable puede ser menor que la memoria instalada en las computadoras con Windows 7

Puede examinar el uso de la memoria en la computadora abriendo el Administrador de dispositivos y, en el menú Ver, seleccione "Recursos por conexión". Expanda el nodo Memoria y vea si puede descubrir qué ocupa la memoria, si es que hay algo. En algunos casos, la memoria se puede aumentar deshabilitando dispositivos no utilizados como FireWire.

También puede intentar hacer exactamente lo contrario de lo que se describe en este artículo:
Aumente el tamaño de la memoria caché del sistema de archivos en Windows 7

También puede intentar deshabilitar Windows 7 SuperFetch .

Si nada ayuda, sería útil publicar una captura de pantalla de la pestaña Administrador de tareas llamada Rendimiento.

harrymc
fuente
El +1 es para "Desactivar Superfetch".
Sin rebajas, pero es muy probable que Superfetch aumente su rendimiento, no lo disminuya, ya que los ejecutables de compilación generalmente se ejecutan con frecuencia y se beneficiarán de su almacenamiento en caché. En cuanto a la tarjeta de video que afecta la memoria disponible, no es aplicable en Windows 7 de 64 bits con solo 4 Gb. La tarjeta de video se mapearía por encima de 4Gb, en este caso.
tgiphil
@tgiphil: Del artículo de Microsoft citado anteriormente: "una tarjeta de video que tiene 256 MB de memoria integrada, esa memoria debe asignarse dentro de los primeros 4 GB de espacio de direcciones".
harrymc
En mi organización, también tenemos toneladas de archivos pequeños y un enorme metarchivo NTFS en RAM. Por lo que puedo decir, Windows no almacena en caché el metarchivo como todo lo demás y nunca lo libera de la RAM. La computadora usará hasta el 100% de memoria y luego todas sus aplicaciones comenzarán a fallar debido a la falta de memoria. Por supuesto, esto no es Windows 7, es Windows Server 2008 R2.
Phil
Además, el enlace "Aumentar la memoria caché del sistema de archivos" informa cosas que realmente no funcionan. Ver tweakhound.com/blog/?p=1164
Phil
0

Windows Server 2008 R2 experimenta exactamente el mismo problema de "caché" de metarchivo, que demasiada información de metarchivo se mantiene en la memoria activa, por lo que las funciones de caché no tienen permiso para permitir que esta memoria se libere cuando hay presión de memoria.

Escribí un script de powershell en la página serverfault.com Uso de RAM de metarchivo de Windows Server 2008 R2 que establece la memoria activa de metarchivo máxima en algo razonable. El resto se traslada a la memoria en espera, y las funciones de caché normales pueden priorizar las cosas de manera adecuada. Windows 7 x64 y Server 2008 R2 x64 tienen límites de memoria activa máxima predeterminados para datos de metarchivo de 1 TB. Sí TB, no GB.

El trabajo ahora ejecuta ese script en todos nuestros sitios en nuestros servidores que organizan las copias de seguridad del sitio, que manejan millones de archivos durante su ciclo de copia de seguridad todos los días. Estos servidores de respaldo también ejecutan un programa Java con mucha memoria (VMware vSphere), 2 servidores SQL y WSUS con su propio servidor SQL. Con el software de copia de seguridad leyendo primero los metadatos (nombre, tamaño, fecha de modificación, permisos, atributos, etc.) para determinar la lista de archivos de los que realizará una copia de seguridad que pasará MUY rápidamente llena la caché del metarchivo. Incluso haciendo todo lo que hacen, navegan muy bien con solo 4 GB de RAM.

BeowulfNode42
fuente