Performance Tuning
Lo scopo di questa pagina è quello di ilustrare alcune possibilità di ottimizzazione dei settaggi di logicaldoc al fine di milgiorare le performance ed i tempi di risposta della applicazione.
Nello specifico questa pagina contiene informazioni utili alla configurazione delle opzioni Java che condizionano l'impiego, l'allocazione della memoria ed il garbage collector della virtual machine che esegue l'application server Tomcat.
LogicalDOC per la sua architettura basata su Spring, Hibernate e JSF e poichè può trovarsi ad operare con tabelle contenenti centinaia di migliaia di record ha la necessità di creare in memoria centinaia di oggetti che possono saturare la memoria.
Quando la memoria resa disponibile alla applicazione si satura la virtual machine può andare in Out-of-memory e l'applicazione non risponde più oppure risponde ma non funziona correttamente.
Il file di configurazione per le impostazioni di cui stiamo parlando si trova in <LOGICALDOC_HOME>\tomcat\bin\catalina.bat
e le impostazioni sono quelle relative alla variabile di ambiente JAVA_OPTS set JAVA_OPTS=-Xmx900m -Dorg.apache.el.parser.COERCE_TO_ZERO=false (windows)
normalmente queste impostazioni dicono di assegnare al massimo 900 megabyte di memoria a tomcat (l'application server che esegue logicaldoc) ed al parser delle espressioni regolari di non trasformare gli interi nulli in 0
A seconda dell'utilizzo che si fa della applicazione, dello scheduling delle attività e degli utenti che utilizzano logicaldoc contemporaneamente queste impostazioni potrebbero non essere adeguate è quindi necessario provvedere ad adeguarle (ove possibile) in base alla proprie necessità.
Questo sono le impostazioni che ci ha proposto un nostro cliente e che funzionano bene su una virtual machine Linux con 2 processori assegnati e 4GB di memoria fisica assegnata.
JAVA_OPTS=" -Xmx900m -XX:MaxPermSize=384M -Xms512m -XX:MaxNewSize=24m -XX:NewSize=24m -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseConcMarkSweepGC -Dorg.apache.el.parser.COERCE_TO_ZERO=false" (Linux)
Per un approfondimento su queste particolari impostazioni si faccia riferimento alla pagina Java Options su questo stesso wiki
Con queste impostazioni la virtual machine java (JVM) utilizza un processo concorrente UseConcMarkSweepGC come garbage collector per ridurre al minimo le interruzioni, i tempi di latenza ed i ritardi causati dal processo di garbage collector necessario per liberare la memoria dagli oggetti non referenziati.
A partire dalla versione java 1.5 (J2SE 5) la virtual machine integra già il controllo di riconoscimento della tipologia si funzionamento in base alla configurazione hardware se lo si desidera è possibile comunque esplicitare il funzionamento con l'opzione -server tra le opzioni di avvio.
JAVA_OPTS=-Xmx900m -Dorg.apache.el.parser.COERCE_TO_ZERO=false -server
Se avete un server con 4GB di memoria fisica relativamente inutilizzata potete tranquillamente aumentare la memoria assegnata alla JVM fino a 2GB di spazio ed al contempo aumentare lo spazio riservato alla generazione degli oggetti in memoria in questo modo:
JAVA_OPTS="$JAVA_OPTS -Xmx2048m -XX:MaxPermSize=512m" (windows)
Se lo desiderate potete definire aanche la memoria allocata allo startup dalla JVM con l'opzione -Xms
JAVA_OPTS="$JAVA_OPTS -Xmx1024m -Xms1024m -XX:MaxPermSize=384m"