A proposito dell'autore

Technology Enthusiast. I’m a System Engineer and sometimes an independent Security Researcher. IEEE member.

Nel campo dell’IT molte volte si verificano dei comportamenti non attesi e di non immediata comprensione, soprattutto avendo a che fare con numerosi sistemi, dove le casistiche crescono esponenzialmente in funzione del numero di server.

L’inizio anno mi ha lasciato un pò di tempo in più per scrivere, speriamo non sia solo il botto iniziale, così torno ad analizzare uno caso reale di troubleshooting.

Lo scenario in analisi è quello di un fileserver Windows 2008 R2 con l’FTP server Filezilla, utilizzato per la condivisione in rete di alcune cartelle, principalmente caricate a mezzo di trasferimenti FTP. Il server aveva sempre una quantità di RAM occupata pari a circa il 100%, come si può vedere nell’immagine sottostante:

Server Task Manager con il problema in atto

Server Task Manager con il problema in atto

Il task manager non era di molto aiuto nell’identificazione della root cause del problema, un’ordinamento dei processi per occupazione di memoria non mostrava nulla di anomalo e nemmeno nessun processo con consumo eccessivo di memoria.

Occorreva perciò sapere come era occupata la memoria per poi cercare di capire se era un processo a consumarla, quindi anche per stabilire se era un comportamento lecito o se eravamo incappati in qualche bug, o altro. Cosa fare allora? Ho indagato un po’ con il tool RAMMap di Sysinternals:

RAMMAp e il problema in atto

RAMMAp e il problema in atto

e come si vede dall’immagine salta subito all’occhio che la gran parte della ram occupata, corrisponde alla voce Metafile:

Metafile: Metafile is part of the system cache and consists of NTFS metadata. NTFS metadata includes the MFT as well as the other various NTFS metadata files (see How NTFS Works for more details, and of course Windows Internals is a great reference). In the MFT each file attribute record takes 1k and each file has at least one attribute record. Add to this the other NTFS metadata files and you can see why the Metafile category can grow quite large on servers with lots of files.

Ok, è un fileserver utilizzato per condivisione di file con circa 10TB di spazio condiviso, i file da gestire saranno ovviamente molti. Nello specifico però la crescita era dovuta anche alla scrittura dei tanti file trasferiti via ftp.

Apparentemente sembra un comportamento corretto, ma quali contromisure si possono adottare?

Ho fatto prima un controllo su Technet e ho trovato questo kb dove si menziona l’uso di RAMMap e si fa riferimento alla problematica della System File Cache:

If the top use count is “Metafile” and a large portion of memory is being used, then you are experiencing the System File Cache issue described above. This can also be confirmed using Performance Monitor and monitoring the Memory\System Cache Resident Bytes counter and seeing the cache grow continuously over time.

oltre a mostrare un metodo alternativo per l’individuazione del problema usando il Performance Monitor di Windows.
Nell’articolo sopracitato si fa riferimento anche ad un possibile workaround:

To work around this issue, use the GetSystemFileCacheSize API function and the SetSystemFileCacheSize API function to set the maximum or minimum size value for the working sets of the system file cache. The use of these functions is the only supported method to restrict the consumption of physical memory by the system file cache.

oltre che ad un servizio Microsoft Dynamic Cache Service scaricabile da qui, ma solo per i Windows fino al 2008, R2 escluso. E per R2 ? Stando al KB , il gestore di momoria di Windows 7 e Windows 2008 R2 è stato modificato per escludere questo problema:

The memory management algorithms in Windows 7 and Windows Server 2008 R2 operating systems were updated to address many file caching problems found in previous versions of Windows. There are only certain unique situations when you need to implement this service on computers that are running Windows 7 or Windows Server 2008 R2.

ma ci possono essere casi in cui il problema si può ancora manifestare. E quindi cosa si può fare ? O si contatta il supporto Microsoft – Microsoft Technical Support – ma serve la Software Assurance, oppure si ricorre alle API segnalate in precedenza. Scrivere codice ? Noo, usiamo qualcosa di già pronto NT Cache Setter:

C:\Users\gianluca\Desktop>SetSystemFileCacheSize off 2048

impostando nessun limite minimo e un massimo a 2GB e vediamo se abbiamo risolto.

Il Task Manager mostra un utilizzo RAM più che dimezzato:

Il Task Manager con il problema risolto

Il Task Manager con il problema risolto

RAMMap mostra sempre un’allocazione molto alta ma la Attiva è scesa ai 2GB di limite e il resto è passato in Standby:

Articolo originale: http://www.gianlucalini.it/2013/01/02/windows-memory-consumption/

Post correlati

  • Metafile is part of the system cache and consists of NTFS metadata. NTFS metadata includes the MFT as well as the other various NTFS metadata files (see How NTFS Works for more details, and of course Windows Internals is a great reference). In the MFT each file attribute record takes 1k and each file has at least one attribute record. Add to this the other NTFS metadata files and you can see why the Metafile category can grow quite large on servers with lots of files.

Close
Entra in contatto con altri professionisti ICT, seguici su Facebook e Twitter: