Oracle WebLogic Server a volte ha tempi di avvio dei servizi elevati.
In questa paginetta forniamo alcune indicazioni per ridurre i tempi di avvio dei servizi WebLogic.
La ragione tecnica e' la mancanza di entropia... ovvero c'e' poco disordine.
Non c'e' problema: siamo degli esperti, se non c'e' abbastanza disordine ci pensiamo noi!
Oracle WebLogic Server (WLS) e' il componente fondamentale della piattaforma Oracle Fusion Middleware e fornisce la base per le applicazioni sviluppate su diverse tecnologie Oracle. Per citare un solo esempio le versioni piu' recenti di Oracle Applications o eBusiness Suite (eBS) utilizzano appunto WebLogic come Application Server.
In questo documento facciamo riferimento alla versione 12.2.1 di Oracle WebLogic Server contenuta in Oracle Fusion Middleware, ma quanto riportatato vale, mutatis mutandis, anche per le altre versioni [NdA in realta' alcune indicazioni sono valide per tutte le applicazioni Java].
Per abbreviare i tempi di startup di WebLogic l'indicazione e' di utilizzare il device /dev/./urandom nei file HOME/oracle/product/12.2.1/oracle_common/jdk/jre/lib/security/java.security e HOME/java_1_8_77/jdk1.8.0_77/jre/lib/security/java.security sostituendo la riga:
securerandom.source=file:/dev/randomcon la riga:
securerandom.source=file:/dev/./urandom
Usate: /dev/./urandom tutto il resto e' tldr; [NdA cit.]
Lo scambio di informazioni tra i processi di WebLogic server avviene
utilizzando protocolli crittografati. Questi utilizzano tecniche
diverse alcune delle quali richiedono la generazione di chiavi
casuali per lo scambio di informazioni.
Su Linux/Unix viene tipicamente utilizzato il device driver /dev/random
che raccoglie valori casuali in un Entropy Pool e li restituisce
all'occorrenza. Nel caso in cui si esauriscano le lettura su /dev/random
si blocca fino a che non vengono raccolti nuovi numeri casuali.
Quando si esauriscono
la raccolta di nuovi numeri casuali nel pool del device driver e' particolarmente lenta...
Un alternativa e' il device file /dev/urandom che opera nello stesso
modo ma con l'opzione unblocking. Quando i numeri casuali
raccolti dall'esterno non sono piu' disponibili viene utilizzato
un algoritmo per generarli (in questo caso i numeri generati sono pseudo-random
basati su un seed di /dev/random).
Poiche' l'avvio dei servizi di WebLogic richiede un numero elevato di numeri casuali per generare le chiavi di crittografia dei vari servizi, utilizzare il device /dev/urandom anziche' /dev/random puo' rendere molto piu' veloce l'avvio (anche se un po' meno sicura la generazione delle chiavi) su sistemi poco disordinati.
A parte le mogli che verrano descritte in un paper a parte... chi soffre per la mancanza di disordine? I sistemi embedded, i LiveCD, i sistemi che hanno avuto un reboot di recente in primo luogo. Ma in seconda istanza anche le VM ed i Container... quindi potenzialmente tutti!
E' probabile quindi che anche il tuo WebLogic sia lento all'avvio: continua a leggere!
La configurazione e' molto semplice e richiede la sola modifica di un parametro nel file java.security. Basta sostituire la riga:
securerandom.source=file:/dev/randomcon la riga:
securerandom.source=file:/dev/./urandom
Deve essere utilizzato il "./" per evitare l'applicazione di un alias.
A seconda delle versioni utilizzate il path del file puo' cambiare... Sulla versione 12.2 il path e': HOME/oracle/product/12.2.1/oracle_common/jdk/jre/lib/security/java.security
In alternativa e' possibile utilizzare il parametro -Djava.security.egd=file:///dev/urandom nello script di start di Java.
Di quanto si migliorano i tempi? Dipende... se l'avvio di un managed server e' particolarmente lungo (eg. sopra il minuto) tipicamente il problema e' proprio l'attesa su /dev/random ed i tempi si riducono di un ordine di grandezza: molto, molto meglio!
Di quanto si peggiora le sicurezza? Dipende... nella maggior parte dei casi pochissimo perche' da urandom vengono restituiti sia numeri casuali veri che numeri pseudo-casuali basati su un seed vero. Pero' vanno valutate le diverse situazioni: il traffico potrebbe essere su una rete aziendale interna gia' adeguatamente protetta oppure provenire direttamente da Internet... ovviamente c'e' differenza!
Il kernel Linux raccoglie su un pool i valori casuali (entropia)
ricevuti da alcuni devices
e li rende disponibili al device driver /dev/random.
Come si controlla l'entropia? Facile:
Di default il valore del poolsize (/proc/sys/kernel/random/poolsize) e' di 4096. Se il valore si abbassa sotto 1000 probabilmente e va controllato, se si abbassa sotto 100 ci sono problemi... [NdA ovviamente va controllato durante l'avvio dei WebLogic se il problema e' il tempo di avvio di WLS].
Installando gli rng-utils [NdE da RH6 il nome del pacchetto e' rng-tools] ed attivando il demone rngd si caricano piu' numeri nel pool raccogliendoli da eventuali altre sorgenti di entropia piu' veloci (eg. TRNG). In questo modo e' possibile utilizzare il device file /dev/random senza ridurre la sicurezza del sistema. Inoltre migliora anche la qualita' di /dev/urandom: questa e' la modalita' piu' consigliabile per un sistema di produzione.
Altri suggerimenti possono essere applicati su eventuali custom script di avvio:
I dettagli sulle versioni di WebLogic sono raccolti in questo documento.
Bibliografia:
Titolo: Ridurre lo startup time di WebLogic Server
Livello: Avanzato
Data: 15 Agosto 2017
Versione: 1.0.0 -
15 Agosto 2017
Autore:
mail [AT] meo.bogliolo.name