Liferay JVM Tuning

Shuyang Zhou
Shuyang Zhou
4 Minute Read
An unexpected error occurred.
Page Comments
Hi, nice guide. Thank you. I have a question. I have read many guides to optimize tomcat. Usually they suggest to add option -server in catalina.sh but you didn't metion. Why?
Thanks for help
Bye
This supposed to be general, not tie to any app-server. But since you are asking about tomcat, here are some tomcat only tricks you can do to improve GC.

1)In conf/web.xml, set Jasper property genStrAsCharArray = false. This may seem a little odd, most people will tell you set it to true. But if you take a look at our StringBundler and JspFactorySwapper, you will see why.

2)In conf/server.xml, add socketBuffer="-1" to your connector setting. This will trun off that connector's out going socket buffer. The upper logic has done all buffer, no need to buffer again.

3)If you are using a newer version of tomcat which support Servlet Sepc2.5, in webapps/ROOT/WEB-INF/web.xml change the root element define to <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5" metadata-complete="true">. This tells tomcat to skip JavaEE standard annotations dependency lookup, since liferay is not using them.

With these 3 settings, you can see a significant GC difference. Try it yourselfemoticon
Thank you, I set parameter as you suggested. Despite the fact my server has only 4 GB RAM now it works better. Thank you very much for your help!
Hi all. Can this option be used for Liferay 6.0.5 ?? I have just tried but I get this error:

INFO: Server startup in 22550 ms
11:35:45,699 ERROR [IncludeTag:231] Current URL / generates exception: java.lang.OutOfMemoryError: PermGen space
11:35:45,703 ERROR [IncludeTag:154] java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass(ClassLoader.java:632)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
at org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:628)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:144)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:175)

11:35:49,196 ERROR [IncludeTag:231] Current URL / generates exception: java.lang.OutOfMemoryError: PermGen space
11:35:49,197 ERROR [IncludeTag:154] java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass(ClassLoader.java:632)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
at org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:628)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:144)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:175)

11:35:53,370 ERROR [IncludeTag:231] Current URL / generates exception: java.lang.OutOfMemoryError: PermGen space
11:35:53,372 ERROR [IncludeTag:154] java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass(ClassLoader.java:632)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
at org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:628)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:144)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:175)

11:35:57,071 ERROR [IncludeTag:231] Current URL / generates exception: java.lang.OutOfMemoryError: PermGen space
11:35:57,072 ERROR [IncludeTag:154] java.lang.OutOfMemoryError: PermGen space

11:35:59,656 ERROR [IncludeTag:231] Current URL / generates exception: java.lang.OutOfMemoryError: PermGen space
11:35:59,657 ERROR [IncludeTag:154] java.lang.OutOfMemoryError: PermGen space
Hi
I have poblem, i run liferay 6.0.6, when i run about 3 days, PS old gen memory to full 100%, i run GC anytime but not reduced
I run: -XX:UseParallelOldGC.
Good article.
I need to increase my PermGen parameter to 256m.
Now, sometimes i have this error: "Attempt to allocate stack guard pages failed newsize"

Could you please help me? thanks
Thanks for the very informative article. I have tried the settings with -Xmx 2048m, but apache does not startup. I have 8 gb ram and corei7 machine. Server starts up with 1048 memory settings.
[...] 5 tips for proper Java Heap size. Young Generation. Liferay JVM Tuning. How to Monitor Java Garbage Collection. Liferay Tips: Liferay Performance Tuning. Tuning Tomcat Performance For Optimum Speed... [...] Read More

The Technicalities of Static Sites

David Oliveira Montenegro
View Blog >

Customization is Dead! Long Live Customization!

David H Nebinger
View Blog >
customization banner image.png

Public Bug Bounty Program

David H Nebinger
View Blog >
bugbounty.png
Showing 1 to 3 of 3 entries.