Issue
- I recently updated to Liferay 7.4 and I'm seeing performance issues.
- I have custom JSP files with EL Expressions (expressions like ${expressionName}) deployed.
- In thread dumps taken during the performance issues, and I see a large number of threads that are in the BLOCKED state with stack traces that:
- Mention custom JSP files
- Contain the following calls:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java)
-
- Along with lines that appear to be related to EL resolution like:
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java)
Environment
- DXP 7.4
- Quarterly Releases
Resolution
- Request a hotfix that includes LPD-21945
Additional Information
-
This performance issue happens due to logic changes that were made in the third-party expression parser code here.
- Because of this change, if the EL Expression evaluates to
null
, the expression parser will interpret it as a Java class name. - The parser will then begin looking inside every .jar file that it has access to for a class that has that name, but the name doesn’t exist.
- Because this is a synchronized process, only one thread can perform it at a time, so if a large number of users are visiting the page where this .jsp file needs to be rendered, the threads will all block each other and it will be very slow.
- Because of this change, if the EL Expression evaluates to
- See this third-party JSP Tutorial page for an overview of EL Expressions
Conteúdo Excluesivo para Assinantes
Uma Subscrição do Liferay Enterprise fornece acesso a mais de 1.500 artigos que incluem práticas recomendadas, solução de problemas e outras soluções valiosas. Faça login para obter acesso completo.
Entrar