2.3 Ottimizzazione delle prestazioni

L'ottimizzazione delle prestazioni è un argomento complesso. L'applicazione utente Identity Manager si basa su diverse tecnologie con numerose interazioni. Anche se non è possibile prevedere ogni singolo scenario di configurazione o di interazione utente che potrebbe causare una riduzione delle prestazioni, per alcuni sottosistemi esistono degli accorgimenti in grado di aumentare le prestazioni, come indicato di seguito.

2.3.1 Registrazione

L'applicazione utente consente la registrazione tramite Novell Audit nonché tramite il framework Apache log4j open source. Per default, la registrazione tramite Novell Audit è disattivata. È invece abilitata per default la registrazione di file e console tramite log4j.

NOTA:i tipi di eventi che è possibile registrare e le modalità di abilitazione o disabilitazione della registrazione sono descritti in Sezione 5.0, Configurazione della registrazione e in Sezione 12.0, Configurazione di registrazione, più avanti in questa guida.

Le impostazioni di configurazione di log4j sono contenute in un file denominato log4j.xml che si trova in $IDMINSTALL/jboss/server/IDMProv/conf/. Verso la parte inferiore di questo file, è presente il codice seguente:


<root>     <priority value="INFO" />     <appender-ref ref="CONSOLE" />     <appender-ref ref="FILE" /> </root>

L'assegnazione di un valore a root garantisce che ogni appender di log a cui non è stato esplicitamente assegnato un livello erediterà il livello di root (in questo caso, INFO). Ad esempio, poiché per default all'appender FILE non viene assegnato un livello soglia, esso assumerà quello della radice (root).

I livelli di log utilizzati da log4j sono DEBUG, INFO, WARN, ERROR e FATAL, come definito nella classe org.apache.log4j.Level. Una disattenzione nell'utilizzo di queste impostazioni può risultare dispendioso in termini di prestazioni.

È buona norma utilizzare INFO o DEBUG solo quando si effettua il debug di un determinato problema.

Per qualsiasi appender incluso nella radice a cui non è stato assegnato una soglia di livello, la soglia dovrebbe essere impostata su ERROR, WARN o FATAL a meno che, come appena spiegato, non si stia effettuando un debug.

Più che con il livello di dettaglio dei messaggi, la riduzione delle prestazioni con livelli di log elevati ha a che fare con il semplice fatto che la registrazione di file e console implica, in log4j, scritture sincrone. È disponibile una classe AsyncAppender, ma il suo utilizzo non garantisce prestazioni migliori. Questi problemi ben noti, che sono di Apache log4j e non di Identity Manager, sono descritti all'indirizzo http://logging.apache.org/log4j/docs/api-1.2.8/org/apache/log4j/performance/Logging.html.

L'impostazione di default di INFO nel file di configurazione log dell'applicazione utente (descritto precedentemente) è idonea per molti ambienti; ma, quando le prestazioni sono critiche, occorre considerare la possibilità di modificare il codice precedente di log4j.xml nel modo seguente:

<root> <priority value="ERROR"/> <appender-ref ref="FILE"/> </root>

In altre parole, rimuovere CONSOLE e impostare il livello di log su ERROR. Per una configurazione di produzione sottoposta a test e debug completi, non sono necessarie registrazioni a livello INFO, né è necessario lasciare abilitata la registrazione CONSOLE. La loro disattivazione può migliorare sensibilmente il risultato in termini di prestazioni.

Per ulteriori informazioni su log4j, consultare la documentazione disponibile all'indirizzo http://logging.apache.org/log4j/docs.

Per ulteriori informazioni sull'utilizzo di Novell Audit con Identity Manager, consultare la Guida all'amministrazione di Novell Nsure Identity Manager.

2.3.2 Identity Vault

Le interrogazioni LDAP possono causare colli di bottiglia in un ambiente di server di directory ad alto traffico. Per mantenere un elevato livello di prestazioni in presenza di numerosi oggetti, Novell eDirectory (che rappresenta la base dell'Identity Vault di Identity Manager) registra le informazioni richieste frequentemente e le memorizza in indici. Quando un'interrogazione complessa viene eseguita su oggetti con attributi indicizzati, la risposta viene restituita molto più velocemente.

eDirectory viene fornito con gli attributi seguenti già indicizzati:

Aliased Object Name cn dc Equivalent to Me extensionInfo Given Name GUID ldapAttributeList ldapClassList Member NLS: Common Certificate Obituary Reference Revision Surname uniqueID uniqueID_SS 

Quando si installa Identity Manager, lo schema della directory di default viene esteso con i nuovi tipi di classe di oggetti e i nuovi attributi relativi all'applicazione utente. Gli attributi specifici dell'applicazione utente, per default, non sono indicizzati. Per ottenere migliori prestazioni, può essere utile indicizzare alcuni di essi e probabilmente anche alcuni attributi LDAP tradizionali, specialmente se nel container utenti saranno presenti più di 5.000 oggetti.

Il principio generale è di indicizzare solo gli attributi che saranno sottoposti a interrogazione su base regolare (che potrebbero benissimo essere attributi diversi per ambienti di produzione diversi). L'unico modo per sapere con certezza quali attributi saranno maggiormente utilizzati consiste nel raccogliere statistiche del predicato in fase di runtime, un processo che comunque genera una riduzione delle prestazioni.

Le procedure per la raccolta delle statistiche del predicato sono descritte dettagliatamente nella eDirectory Administration Guide (Guida all'amministrazione di eDirectory), in cui viene illustrata anche l'indicizzazione. In generale, sarà necessario eseguire le operazioni seguenti:

  • Utilizzare Console One per attivare la raccolta delle statistiche del predicato per gli attributi desiderati.
  • Mettere il sistema sotto carico.
  • Disabilitare la raccolta delle statistiche e analizzare i risultati.
  • Creare un indice per ogni tipo di attributo la cui indicizzazione potrebbe essere utile.

Se già si conoscono gli attributi da indicizzare, non è necessario utilizzare Console One. Gli indici possono essere creati e gestiti in iManager tramite Manutenzione di eDirectory > Indici. Ad esempio, se si sa che gli utenti dell'organigramma eseguiranno molto probabilmente ricerche basate sull'attributo isManager, si può provare a indicizzare tale attributo per vedere se le prestazioni subiscono un miglioramento.

NOTA:è consigliabile indicizzare almeno gli attributi manager e isManager.

Per un approfondimento sull'indicizzazione degli attributi e sulle prestazioni, vedere il capitolo “Tuning eDirectory” in Novell’s Guide to Troubleshooting eDirectory di Peter Kuo e Jim Henderson (QUE Books, ISBN 0-7897-3146-0).

Vedere anche il capitolo “Maintaining Novell eDirectory” (Manutenzione di Novell eDirectory), in cui sono inoltre contenute indicazioni per l'ottimizzazione delle prestazioni, nella eDirectory Administration Guide (Guida all'amministrazione di eDirectory).

2.3.3 JVM

La quantità di memoria heap allocata a Java Virtual Machine può influire sulle prestazioni. Se si specificano valori di memoria minimi o massimi che sono o troppo bassi o troppo alti (ovvero maggiori della memoria fisica del computer), potrebbe verificarsi uno scambio di file di pagina eccessivo.

È possibile impostare la dimensione massima di JVM per il server JBoss modificando il file run.conf o run.bat (il primo per Linux, il secondo per Windows) in [IDM]/jboss/bin/ , utilizzando un editor di testo. Aumentare “-Xmx” da 128m a 512m o anche più. È possibile che sia necessario fare delle prove per determinare l'impostazione ottimale per il determinato ambiente.

NOTA:suggerimenti sull'ottimizzazione delle prestazioni di JBoss e Tomcat sono disponibili all'indirizzo http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossASTuningSliming

2.3.4 Valore del timeout della sessione

Il timeout della sessione, ovvero la quantità di tempo per cui un utente può lasciare inattiva una pagina nel browser Web prima che venga visualizzato dal server un messaggio di avviso di timeout, può essere modificato nel file web.xml che si trova nell'archivio IDM.war. È necessario ottimizzare questo valore in base all'ambiente server e di utilizzo in cui verrà eseguita l'applicazione. In generale, è consigliabile che il timeout della sessione sia quanto più ridotto possibile. Se le esigenze aziendali consentono un timeout di 5 minuti, il server potrà rilasciare le risorse inutilizzate due volte prima di quanto farebbe con un valore di timeout di 10 minuti, migliorando così le prestazioni e la scalabilità dell'applicazione Web.

Per la regolazione del timeout della sessione, tenere presenti le considerazioni seguenti:

  • Timeout di sessione prolungati potrebbero causare l'esaurimento della memoria del server JBoss nel caso in cui molti utenti eseguano il login in un breve arco di tempo. Questo vale per qualsiasi server per applicazioni con troppe sessioni aperte.
  • Quando un utente esegue il login a un'applicazione utente, per il determinato utente viene creata una connessione LDAP associata alla sessione. Di conseguenza, quante più sessioni sono aperte, tanto maggiore sarà il numero di connessioni LDAP occupate. Quanto più è esteso il timeout della sessione, tanto più a lungo queste connessioni resteranno aperte. Troppe connessioni aperte sul server LDAP (anche se inattive) possono causare una riduzione delle prestazioni del sistema.
  • Se nel server iniziano a verificarsi errori di memoria esaurita e i parametri di ottimizzazione dell'heap JVM e di recupero spazio sono stati già regolati in modo ottimale gli ambienti server e di utilizzo, sarà necessario considerare una riduzione del timeout di sessione.

Per regolare il valore del timeout della sessione, occorrerà accedere all'archivio IDM.war , individuare il file web.xml al suo interno e modificare la parte seguente di tale file (in particolare, il valore numerico indicato qui come 20, ovvero 20 minuti, che rappresenta l'impostazione di default):

<session-config>     <session-timeout>20</session-timeout> </session-config>

Sarà quindi necessario salvare il file e l'archivio e riavviare il server.

NOTA:è consigliabile che la modifica manuale dei file di archivio Web sia eseguita da una persona esperta nello sviluppo e nella distribuzione di applicazioni Web basate su Java.