Problema
Se as permissões/ACLs no CQ ou no CRX estão sendo usadas de forma extensiva, isso pode afetar o desempenho da pesquisa do CRX, pois quando os resultados da pesquisa estão sendo recuperados, eles devem ser filtrados em relação às permissões no repositório do CRX.
Nos casos em que isso é um problema, se os dumps de encadeamento são usados, é possível ver que há muita contenção de bloqueio relacionada aos rastreamentos de pilha que contêm a classe CacheEntryCollector.
Para conferir se há permissões suficientes (rep: nós ACE) definidas no repositório que afetam muito o desempenho, faça o seguinte:
- Acesse o aplicativo da web CRX/crxde e faça logon como admin
- Clique em Ferramentas => Consulta
- Selecione "XPath" como o Type
- Na caixa Query digite a seguinte consulta:
//element(*,rep:ACL) order by @jcr:score - Clique em Execute
Se isso resultar em mais de 5000 nós, veja abaixo os detalhes sobre como melhorar o desempenho do sistema.
Solução
1. Primeiro de tudo, pesquise se é possível ou não reduzir o número total de ACLs. Aqui estão algumas dicas que podem ajudar:
- Faz sentido revisar suas ACLs definidas e ver se alguma delas é supérflua ou desnecessária. Muitas vezes, é possível reduzir o número de ACLs ao adicionar um grupo que contém permissões compartilhadas e, em seguida, atribuir outros grupos como membros dele.
- Se as permissões/ACEs estão sendo definidas diretamente contra os usuários, é possível diminuir bastante o número de ACEs que está em uso, removendo essas permissões. Em seguida, é necessário substituí-los por permissões definidas em grupos compartilhados.
Nota: Para saber como visualizar as ACLs no CRX, consulte este artigo. Também é possível pesquisar por ACLs através do uso da pesquisa mencionada acima //element(*,rep:ACL) order by @jcr:score.
2. Depois de reduzir o número total de ACEs, se ainda houver um problema de desempenho, verifique se é possível implementar uma camada de armazenamento em cache no código do aplicativo para obter resultados de pesquisa comumente recuperados.
3. Finalmente, para aumentar o tamanho do cache do ACL.
- Instale o pacote de hotfix CRX mais recente 2.2.0.56 ou superior (verifique o compartilhamento do pacote, se disponível ao público, caso contrário, solicite-o por meio do ticket no Daycare)
- Adicione o seguinte parâmetro da JVM para alterar o tamanho do cache:
-Dorg.apache.jackrabbit.core.security.authorization.acl.CachingEntryCollector.maxsize=10000
10000 por exemplo, se o seu número atual de rep: nó ACE é um pouco menor que 10000.
Aplica-se a
CRX 2.2
Fazer logon em sua conta