Thursday, April 14, 2011

Optimize: Liferay Performance


Goal: Once you have your portal up and running, you may find a need to tune it for performance, especially if your site winds up generating more traffic than you'd anticipated. There are some definite steps you can take with regard to improving Liferay's performance. The aim is to bring together all the tuning tips and configuration at a single location for reference.
  1. Liferay Configuration
    1. ##Lucene Search
      #Set the following to true if you want to index your entire library 
      of files on startup.
       
      index.on.startup=false
    2. system.properties
       # The layout cache filter will cache pages to speed up page rendering for# guest users. See  ehcache.xml to modify the cache expiration time to live.
      com.liferay.portal.servlet.filters.layoutcache.LayoutCacheFilter=true
    3. Disable unneeded filters
      Liferay comes by default with 15 servlet filters enabled and running. It is likely that for your installation, you don't need them all. Two filters that you can disable without any impact are the Compression Filter and the Strip Filter. These filters are responsible for shrinking the size of the response (to save bandwidth). The Strip Filter removes whitespace from the response object, and the Compression Filter compresses it. This obviously requires some processing, and so disabling these two filters can enhance performance.
      To disable a servlet filter, simply comment it out of your web.xml file.
      If there is a feature supported by a servlet filter that you know you are not using, you can comment it out as well to achieve some performance gains. For example, if you are not using CAS for single sign-on, comment out the CAS Filter. If you are not using NTLM for single sign-ons, comment out the Ntlm Filter. If you are not using the Virtual Hosting for Communities feature, comment out the Virtual Host Filter. The fewer servlet filters you are running, the less processing power is needed for each request.

      There is a known optimilisation for LR 5.0+ Compression Filter
      <filter>
              <filter-name>Cache Filter - Resource CSS JSP</filter-name>
              <filter-class>com.liferay.portal.servlet.filters.cache.CacheFilter</filter-class>
              <init-param>
                  <param-name>url-regex-pattern</param-name>
                  <param-value>.+/(barebone|css|everything)\.jsp</param-value>
              </init-param>
              <init-param>
                  <param-name>pattern</param-name>
                  <param-value>2</param-value>
              </init-param>
          </filter>   
    4. HTML : Saves some 50Kb on every page but portlet look-feel modification is not possible for all (including (Omni)Admin)
      ## Portlet CSS Portlet
       # Set this to true to enable the ability to modify portlet CSS at runtime
       # via the Look and Feel icon. Disabling it can speed up performance.
      portlet.css.enabled=false

      #
      # Set this to false if the system does not use allow users to modify the
      # look and feel.
      #
      look.and.feel.modifiable=true
    5. Javascript: Not needed scripts could be expunged here. But the fattest of them all jQuery is needed almost always
      ## JavaScript
       # Set a list of JavaScript files that will be loaded programmatically in
       # /html/common/themes/top_js.jsp.
       #
       # The ordering of the JavaScript files is important. Specifically, all
       # JQuery scripts should go first.
       #
       # The Liferay scripts are grouped in such a way, that the first grouping
       # denotes utility scripts that are used by the second and third groups. The
       # second grouping denotes utility classes that rely on the first group, but
       # does not rely on the second or third group. The third grouping denotes
       # modules that rely on the first and second group.
       #
       javascript.files= .....
      Setting this will improve download time, but tweaks above are probably unused
       ## JavaScript
       # Set this property to true to load the combined JavaScript files from the
       # property "javascript.files" into one compacted file for faster loading for
       # production. Set this property to false for easier debugging for
       # development. You can also disable fast loading by setting the URL
       # parameter "js_fast_load" to "0".
       javascript.fast.load=true
    6. CSS: Set this property to true to load the theme's merged CSS files for faster loading for production.
      theme.css.fast.load=true
    7. Resources: Get your images and other resources from your personalised theme or even an HTTP server alias like www.liferay.org/resources/ Resources uploaded in Liferay are being served-up from database and will always be slower than using this strategy. especialy for recurring enterprise logo's and all.
    8. Themes: If you need a high performing landing-page and other pages you could consider creating a special theme for these pages.
    9. Velocity Caching: Set this to true in production so that VM templates are cached
      velocity.engine.resource.manager.cache.enabled=true
    10. CSS: Hack removing ALL CSS
      edit templates\portal_normal.vm;
       <head>
           #if ( $is_signed_in )
                #css ($css_main_file) 
           #end
       </head>
  2. Tomcat Configuration
  3. OS settings
  4. MySQL: Links to useful references:
        * A good sample my.cnf: http://www.theadminzone.com/forums/showthread.php?t=8150
        * Optmization, understanding mysql: http://www.mysqlperformanceblog.com/files/presentations/UC2005-Advanced-MySQL-Performance-Optimization.pdf
        * MySQL Performance Tuning Primer Script: http://day32.com/MySQL/
  5.  Memory:
    Memory is one of the first things to look at when you want to optimize performance. If you have any disk swapping, that will have a serious impact on performance. Make sure that your server has an optimal amount of memory and that your JVM is tuned to use it.
    There are three JVM command switches that control the amount of memory it will use.
    -Xms
    -Xmx
    -XX:MaxPermSize
    These three settings control the amount of memory available to the JVM initially, the maximum amount of memory into which the JVM can grow, and the separate area of the heap called Permanent Generation space. 
    Issues with PermGen space can also affect performance. PermGen space contains long-lived classes, anonymous classes and interned Strings. Hibernate, in particular—which Liferay uses extensively—has been known to make use of PermGen space. If you increase the amount of memory available to the JVM, you may want to increase the amount of PermGen space accordingly. 
  6. Portlets: Liferay comes pre-bundled with many portlets which contain a lot of functionality, but not every web site that is running on Liferay needs to use them all. In portlet.xml and liferay-portlet.xml, comment out the ones you are not using. While having a loan calculator, analog clock, or game of hangman available for your users to add to pages is nice, those portlets may be taking up resources that are needed by custom portlets you have written for your site. If you are having performance problems, commenting out some of the unused portlets may give you the performance boost you need.
  7. References/Source
    1. http://www.liferay.com/community/wiki/-/wiki/Main/Performance
    2. http://www.liferay.com/documentation/liferay-portal/5.1/administration/-/ai/performance-tuning;jsessionid=F9EDDE895FF685955600AF21B25C5D43.node-1

      But be careful, these settings need a powerful Application Server.
      Improvement: Approximately 50% faster
      Probably this works also with other Application Servers like Tomcat..
       

11 comments:

  1. Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.

    angularjs Training in chennai

    angularjs-Training in tambaram

    angularjs-Training in sholinganallur

    angularjs-Training in velachery

    angularjs Training in bangalore

    ReplyDelete
  2. Excellent post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.
    online Python certification course | python training in OMR | python training course in chennai

    ReplyDelete
  3. Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.

    Java training in Chennai | Java training in Bangalore

    Java interview questions and answers | Core Java interview questions and answers

    ReplyDelete
  4. Thanks for the informative article. This is one of the best resources I have found in quite some time. Nicely written and great info. I really cannot thank you enough for sharing.

    Data Science course in rajaji nagar | Data Science with Python course in chenni

    Data Science course in electronic city | Data Science course in USA

    Data science course in pune | Data science course in kalyan nagar

    ReplyDelete
  5. Awesome! Education is the extreme motivation that open the new doors of data and material. So we always need to study around the things and the new part of educations with that we are not mindful.

    devops online training

    aws online training

    data science with python online training

    data science online training

    rpa online training

    ReplyDelete
  6. Hi,
    Good job & thank you very much for the new information, i learned something new. Very well written. It was sooo good to read and usefull to improve knowledge. Who want to learn this information most helpful. One who wanted to learn this technology IT employees will always suggest you take big data hadoop training in pune. Because big data course in pune is one of the best that one can do while choosing the course.

    ReplyDelete
  7. Very well and informative post..
    Thanks for sharing with us,
    We are again come on your website,
    Thanks and good day,
    Please visit our site,
    buylogo

    ReplyDelete