Gestione della memoria in Windows

mercoledì 3 agosto 2011 alle 03:51 | Pubblicato su Linux, Varie | 1 commento
Tag: ,

Se c’è una cosa che per me (e sono certo anche per la stragrande maggioranza degli utenti) rimane un mistero è come gestisce la memoria Windows. Ora, non sono in grado di fare grandi confronti con sistemi linux, perché mentre ormai da anni sono consolidati sistemi Linux a 64 bis, MS ha scoperto l’abbondanza dei bit in tempi più recenti. Avendo avuto recentemente problemi con applicazioni Java che su windows 2003 standard edition non riuscivano ad allocare 1024MB di memoria ho deciso di approfondire un po’ il tema e raccogliere un po’ di informazioni in un post che rimarrà più come storia che di effettiva utilità.

Il caso concreto che mi sono trovato ad affrontare è stato fare funzionare Oracle BI versione 10g per dei test. Questa versione di Oracle BI è certificata al massimo su Windows 2003, peccato al primo tentativo di accesso alla console di amministrazione, gestita dall’application server OC4J installato su una macchina win2003 io abbia avuto un errore per l’impossibilità da parte di Java di allocare memoria. Gli script di avvio di OC4J per default contengono le opzioni


-XX:MaxPermSize=128m -Xmx512m

Ho provato allora a modificare tali impostazioni impostando


-XX:MaxPermSize=128m -Xmx1024m

Ma questo è risultato provocare un errore gia in avvio di OC4J.

Una veloce ricerca sul Web mi ha portato a questo interessante post che da un metodo per verificare quanta memoria al massimo è in grado di allocare Java. Ho potuto fare così test interessanti su varie macchine, verificando che effettivamente su altre macchine win2003 il comando di test fallisce:

C:\Documents and Settings\utente>java -mx768m -XX:MaxPermSize=128m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
C:\Documents and Settings\utente>java -mx768m -XX:MaxPermSize=64m -version
java version "1.4.2_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)

In questo caso specifico la macchina ha 2GB di RAM fisica, ma dal task manager risulta usato circa 1,6 GB su 4GB di memoria virtuale.

Nei miei studi giovanili la gestione della memoria virtuale nei sistemi operativi è stata presente, fra l’altro a quei tempi simili dimensioni per la RAM erano fantascienza, però io non ho trovato la spiegazione del fatto per cui in tali condizioni il sistema operativo non è in grado di allocare meno di 1 GB di memoria.

Vincendo la mia pigrizia e la mia repulsione ho fatto ulteriori ricerche ed ho trovato questi riferimenti nella documentazione di MS, “virtual address space” e “Confronto tra le architetture della memoria a 32 a 64 bit“.

Pare che con il flag /3GB nel boot.ini di una macchina con 2,5 GB di RAM le cose migliorino, infatti sono arrivato ad allocare quasi 1,5 GB di heap per la JVM.

L’unica macchina Linux a 32 bit che sono riuscito a trovare è una macchina virtuale su cui ho ottenuto questi risultati:

[oracle@vboxm1 ~]$ java -mx2650m -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)
[oracle@vboxm1 ~]$ java -mx2750m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
[oracle@vboxm1 ~]$ uname -a
Linux vboxm1 2.6.18-194.0.0.0.4.el5 #1 SMP Thu Apr 8 18:20:19 EDT 2010 i686 i686 i386 GNU/Linux
[oracle@vboxm1 ~]$ free
             total       used       free     shared    buffers     cached
Mem:        909120     820564      88556          0      27572     656228
-/+ buffers/cache:     136764     772356
Swap:      1735012          0    1735012


Chiaramente le macchine a 64 bit (anche se non reali come  gli Xeon) simili problemi non si presentano, neanche su win2008 a 64 bit.

A completamento del discorso devo dire che in passato ho avuto anche problemi con oracle database server 10gR2 su windows che in sistemi particolarmente carichi avevo frequenti errori ORA-04030

1 commento »

RSS feed for comments on this post. TrackBack URI

  1. Ciao Cristian,
    potrebbe anche essere, ed il condizionale è piu che mai obbligato, un problema introdotto dalla patch Microsoft KB956572; potresti verificare se è installata in un Windows 2003 e magari effettuarne (se è possibile) la disinstallazione e riprovare (dopo reboot vari🙂 ) l’installazione e l’esecuzione del software interessato


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: