Recentemente mi sono trovato davanti ad un problema durante un ripristino di una macchina virtuale con Veeam Versione 7.
Il ripristino falliva inspiegabilmente una volta raggiunto la percentuale di completamento del 10-15%.
L’errore mostrato nei log era :
Error: Client error: Cannot allocate memory for an array. Array size: [4198400].
Dopo alcuni controlli, che mi hanno portato fuori strada ho notato che la somma della memoria utilizzata da tutti i processi presenti in task manager era ben al di sotto della RAM disponibile (4 Gb in questo caso), ma nonostante ciò il Task Manager indicava il completo utilizzo di tutta la RAM disponibile.
Attraverso un ottima utility di Sysinternal ( RAMMap ) ho potuto verificare con attenzione che cosa stesse consumando memoria, molti processi erano legati a veeam me nessuno tale da utilizzare tutta la ram.
Analizzando il primo Tab subito si capiva cosa stava accadendo: 1.5 Gb consumati da Mapped Files. Aprendo il Tab “File Summary” il problema si è evidenziato da solo:
Il singolo job di ripristino ( restore entire VM ) stava consumando più di 1Gb di memoria RAM. IL problema nasce dal sistema operativo Windows 2008 che allora troppa memoria al servizio disk Cache. Per limitare e configurare tale servizio Sysinternals ci viene in aiuto con il software CacheSet.
Con questo software settiamo dei limiti e risuciamo a pulire la stessa cache.
Una volta dimensionato opportamente il limite ho rilanciato il Job che ha superato la soglia del 10% e si è concluso correttamente.
Se vi trovate dunque davanti agli occhi l’errore : Cannot allocate memory for an array
tenete in considerazione quando detto sopra e sappiate che Veeam consuma I/O ma anche parecchia RAM sia durante i Job di backup che di ripristino. Maggiore sarà la dimensione dei backup maggiore sarà la disk cache necessaria.