Problema
Se hai fatto un uso estensivo dei permessi / ACL in CQ o CRX, questo può influenzare le prestazioni di ricerca CRX perché quando i risultati della ricerca vengono recuperati devono essere filtrati rispetto ai permessi nel repository CRX.
Nei casi in cui questo è un problema, se si considerano i thread dump si vedrà che è presente un ingente lock contention relativo alle tracce di stack contenenti la classe CacheEntryCollector.
Per vedere se hai abbastanza permessi (nodi rep:ACE) impostati nel tuo repository per influenzare notevolmente le prestazioni, fai quanto segue:
- Vai alla Web app CRX /crxde e accedi come amministratore
- Fai clic su Strumenti => Query
- Seleziona "XPath" come Tipo
- Nella casella Query inserisci la seguente domanda:
//element(*,rep:ACL) order by @jcr:score - Fai clic su Esegui
Se il risultato sono più di 5000 nodi, vedi sotto per i dettagli su come migliorare le prestazioni del sistema.
Risoluzione
1. Prima di tutto, ricerca se puoi o meno ridurre il numero totale di ACL. Qui ci sono alcuni suggerimenti che possono essere utili:
- Ha senso rivedere le ACL definite e vedere se alcune di esse sono superflue o inutili. Molte volte è possibile ridurre il numero di ACL aggiungendo un gruppo che contiene permessi condivisi e assegnando altri gruppi come membri dello stesso.
- Se stai definendo i permessi / ACE direttamente contro gli utenti, puoi ridurre notevolmente il numero di ACE utilizzati rimuovendo tali permessi. Poi dovresti sostituirli con permessi che sono impostati contro i gruppi condivisi.
Nota: Se non sai come visualizzare le ACL in CRX allora vedi questo articolo. Puoi anche cercare gli ACL usando la ricerca di cui sopra //element(*,rep:ACL) order by @jcr:score.
2. Una volta ridotto il numero totale di ACE, se si verificano ancora problemi di prestazioni, guarda se è possibile implementare un livello di cache nel codice dell'applicazione per i risultati di ricerca più comuni.
3. Infine, per aumentare la dimensione della cache ACL.
- Installa l'ultimo CRX hotfixpack 2.2.0.56 o superiore (controlla la condivisione del pacchetto, se disponibile in pubblico, altrimenti richiedilo tramite ticket in Daycare)
- Aggiungi il seguente parametro JVM per cambiare la dimensione della cache:
-Dorg.apache.jackrabbit.core.security.authorization.acl.CachingEntryCollector.maxsize=10000
10000 per esempio se il numero attuale del nodo rep:ACE è inferiore a 10000.
Si applica a
CRX 2.2