Improve hybris Startup time up to 50%
I’ve done some findings that helped me get the hybris startup time down to 40-50%. This article provides several recommendations on how to make hybris/Tomcat to start up faster.
All pieces of advice below are only for the development environments because most of them have side effects important for the production system.
in
You can also update triggers’ maxAcceptableDelay:
Heavy project (2790 custom java classes on top of Hybris accelerator, db:mysql local)
load time before changes: 857 sec
load time after changes: 679 sec (-20%)
See the configuration of my laptop below.
, because websockets seem not used in hybris:
(by default it is empty in hybris)
Cronjobs: turn them off
In order to disable cronjobs to start automatically on the server startup you need to addcronjob.timertask.loadonstartup=false
local.properties.
UPDATE Trigger[batchmode=true];itemtype(code)[unique=true];maxAcceptableDelay ;Trigger;1800
Tenants: Remove unused
Remove unused tenants in the local.properties (like the one for junit) if not needed#default: installed.tenants=junit,foo,t1,t2
installed.tenants=
Tomcat: load Host and Engine containers in parallel
…The number of threads this Engine will use to start child Host elements in parallel. The special value of «0» will result in the value of Runtime.getRuntime().availableProcessors() being used. Negative values will result in Runtime.getRuntime().availableProcessors() + value being used unless this is less than 1 in which case 1 thread will be used. If not specified, the default value of 1 will be used. // http://tomcat.apache.org/tomcat-7.0-doc/config/engine.htmlHowever, take into account that hybris is not thread safe during start-up and many parallel processes may lead to unexpected behavior. Even if it works on local machine (e.g. QuadCore) it might not work on a production environment (e.g 12 or 24 cores). So delete this configuration if you face any problems. Also take into account that hybris will eat more cpu with this configuration. config/tomcat/conf/server.xml: Heavy project (2790 custom java classes on top of Hybris accelerator, db:mysql local) load time before changes: 857 sec load time after changes: 644 sec (-24%) See the configuration of my laptop below.
Excluding Some Jars From Scanning
First, you can remove the following jars frombin/platform/tomcat/lib
- tomcat7-websocket.jar
- websocket-api.jar
catalina.properties
org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jarThe last change in this section is turning off the TLD scanning for all but a few JARs where we definetely know there exists TLDs. In the listed jars there are no *.tld so they can be skipped by tomcat’s TLDConfig:
org.apache.catalina.startup.TldConfig.jarsToSkip=re11-1.22.jar,\ acceleratorcmshmchmc.jar,\ acceleratorserviceshmchmc.jar,\ admincockpitserver.jar,\ advancedsavedqueryserver.jar,\ amwaycontentsolrsearchaddonhmc.jar,\ annotations-2.0.0.jar,\ annotations-api.jar,\ ant-commons-net-1.6.5.jar,\ aopalliance-1.0.jar,\ asm-1.0.2.jar,\ asm-3.3.1.jar,\ aspectjweaver-1.8.5.jar,\ assertj-core-3.5.2.jar,\ atlantic-1.1.2.jar,\ avalon-framework-4.2.0.jar,\ backoffice-core-1.0.2.1.jar,\ backoffice-core-6.2.0.0-RC7-sources.jar,\ backoffice-core-6.2.0.0-RC7.jar,\ backoffice-module-6.2.0.0-RC9-sources.jar,\ backoffice-widgets-1.0.2.1.jar,\ backoffice-widgets-6.2.0.0-RC7-sources.jar,\ backoffice-widgets-6.2.0.0-RC7.jar,\ backofficeserver.jar,\ barcode4j-light-2.0.jar,\ basecommercehmchmc.jar,\ batik-all-1.7.jar,\ bcprov-jdk15-1.46.jar,\ bmecathmchmc.jar,\ bmecathmcserver.jar,\ bmecatserver.jar,\ bsh-2.0b5.jar,\ btc-ascii-table-1.0.jar,\ canvas-1.0-hybris-patched.jar,\ catalina-ant.jar,\ catalina-ha.jar,\ catalina-jmx-remote.jar,\ catalina-tribes.jar,\ catalina.jar,\ catalogserver.jar,\ cglib-nodep-2.2.2.jar,\ ckez-4.4.6.1.jar,\ classificationsystemshmchmc.jar,\ classificationsystemsserver.jar,\ cloning-1.9.0.jar,\ cms2hmchmc.jar,\ cms2hmcserver.jar,\ cms2libserver.jar,\ cms2server.jar,\ cmscockpitserver.jar,\ cmswebservicesserver.jar,\ cockpit-data-integration-6.2.0.0-RC7-sources.jar,\ cockpit-data-integration-6.2.0.0-RC7.jar,\ cockpit-demo-widgets-1.0.2.1.jar,\ cockpit-demo-widgets-6.2.0.0-RC7-sources.jar,\ cockpit-demo-widgets-6.2.0.0-RC7.jar,\ cockpit-module-aggregator-1.0.2.1.jar,\ cockpit-module-aggregator-6.2.0.0-RC7-sources.jar,\ cockpit-module-aggregator-6.2.0.0-RC7.jar,\ cockpit-standard-editors-6.2.0.0-RC7-sources.jar,\ cockpit-standard-editors-6.2.0.0-RC7.jar,\ cockpitadmin-1.0.2.1.jar,\ cockpitadmin-6.2.0.0-RC7-sources.jar,\ cockpitadmin-6.2.0.0-RC7.jar,\ cockpitcore-1.0.2.1.jar,\ cockpitcore-6.2.0.0-RC7-sources.jar,\ cockpitcore-6.2.0.0-RC7.jar,\ cockpitframework-1.0.2.1.jar,\ cockpitframework-6.2.0.0-RC7-sources.jar,\ cockpitframework-6.2.0.0-RC7.jar,\ cockpitserver.jar,\ cockpittesting-1.0.2.1.jar,\ cockpittesting-6.2.0.0-RC7-sources.jar,\ cockpittesting-6.2.0.0-RC7.jar,\ cockpitwidgets-1.0.2.1.jar,\ cockpitwidgets-6.2.0.0-RC7-sources.jar,\ cockpitwidgets-6.2.0.0-RC7.jar,\ com.sap.security.core.server.csi-1.00.8.jar,\ commentsserver.jar,\ commercesearchhmchmc.jar,\ commerceserviceshmchmc.jar,\ commons-beanutils-1.9.2.jar,\ commons-codec-1.10.jar,\ commons-collections-3.2.2.jar,\ commons-collections4-4.1.jar,\ commons-configuration-1.10.jar,\ commons-dbcp-1.4.jar,\ commons-digester-2.1.jar,\ commons-discovery-0.5.jar,\ commons-el-1.0.jar,\ commons-email-1.2.jar,\ commons-fileupload-1.3.1.jar,\ commons-httpclient-3.1.jar,\ commons-io-2.4.jar,\ commons-jexl-1.1.jar,\ commons-lang-2.6.jar,\ commons-lang3-3.1.jar,\ commons-lang3-3.4.jar,\ commons-logging-1.2.jar,\ commons-pool-1.6.jar,\ commons-pool2-2.4.2.jar,\ commons-validator-1.4.1.jar,\ commonsserver.jar,\ concurrentlinkedhashmap-lru-1.4.jar,\ coreserver.jar,\ cscockpitserver.jar,\ customerreviewhmchmc.jar,\ ddlutils-1.0.jar,\ deliveryzoneserver.jar,\ easymock-3.1.jar,\ easymockclassextension-3.1.jar,\ ecj-4.4.jar,\ ehcache-2.9.0.jar,\ el-api.jar,\ europe1server.jar,\ fastutil-6.5.6.jar,\ fckez-2.6.1_2-hybris-patched.jar,\ fest-assert-1.4.jar,\ fest-util-1.1.6.jar,\ fop-1.0.jar,\ gmapsz-3.0.0.jar,\ google-guava-libphonenumber-svn-rev10.jar,\ groovy-all-2.4.5.jar,\ guava-18.0.jar,\ hacserver.jar,\ hamcrest-all-1.3.jar,\ hibernate-validator-4.3.2.Final.jar,\ hk2-2.4.0-b31.jar,\ hk2-api-2.4.0-b31.jar,\ hk2-locator-2.4.0-b31.jar,\ hk2-utils-2.4.0-b31.jar,\ hmcserver.jar,\ httpunit-1.7.jar,\ hybris-encryption-1.1.jar,\ hybris-simple-statistics-1.0.1.jar,\ hybriskey-1.0.jar,\ impexserver.jar,\ importcockpithmchmc.jar,\ importcockpithmcserver.jar,\ importcockpitserver.jar,\ instoreserver.jar,\ itext-2.1.7.jar,\ jackson-annotations-2.6.4.jar,\ jackson-core-2.6.4.jar,\ jackson-core-asl-1.9.13.jar,\ jackson-databind-2.6.4.jar,\ jackson-mapper-asl-1.9.13.jar,\ jai-codec-1.1.3.jar,\ jai_core-1.1.3.jar,\ jasper-el.jar,\ jasper.jar,\ jasperreports-4.0.2.jar,\ jasperreports-fonts-4.0.2.jar,\ javassist-3.19.0-GA.jar,\ javax.inject-2.4.0-b31.jar,\ javax.ws.rs-api-2.0.1.jar,\ javolution-5.5.1.jar,\ jaxb-impl-2.2.4-1.jar,\ jaxen-1.1.3.jar,\ jboss-logging-3.2.1.Final.jar,\ jcip-annotations-1.0.jar,\ jcl-over-slf4j-1.7.13.jar,\ jcommon-1.0.16.jar,\ jersey-apache-connector-2.22.1.jar,\ jersey-client-2.22.1.jar,\ jersey-common-2.22.1.jar,\ jersey-entity-filtering-2.22.1.jar,\ jersey-guava-2.22.1.jar,\ jersey-media-json-jackson-2.22.1.jar,\ jersey-media-multipart-2.22.2.jar,\ jersey-server-2.22.1.jar,\ jersey-spring3-2.22.1.jar,\ jersey-test-framework-core-2.22.1.jar,\ jfreechart-1.0.13.jar,\ jgraph-5.8.3.1-hybris-patched.jar,\ jgrapht-jdk1.6-0.8.2.jar,\ jgraphx-1.10.2.1.jar,\ jgroups-3.4.1.Final.jar,\ joda-time-2.9.1.jar,\ json-path-2.0.0.jar,\ json-smart-2.1.0.jar,\ jsp-api.jar,\ jsr305-2.0.0.jar,\ jstl-1.1.0.jar,\ jstl-api-1.2.jar,\ junit-4.12.jar,\ libphonenumber-2.3.jar,\ likey-no-iaik-1.0.3.jar,\ log4j-1.2.17.jar,\ log4j-api-2.4.1.jar,\ log4j-core-2.4.1.jar,\ log4j-slf4j-impl-2.4.1.jar,\ lucenesearchhmchmc.jar,\ mail-1.4.4.jar,\ mccserver.jar,\ mediawebserver.jar,\ metrics-core-3.1.2.jar,\ mime-util-2.1.3.jar,\ mimepull-1.6.jar,\ mobileoptionalshmchmc.jar,\ mobileoptionalshmcserver.jar,\ mobileoptionalsserver.jar,\ mobileserviceshmchmc.jar,\ mobileserviceshmcserver.jar,\ mobileservicesserver.jar,\ mockito-core-1.9.5.jar,\ models.jar,\ oauth2server.jar,\ objenesis-1.4.jar,\ ondemandcommonhmchmc.jar,\ oro-2.0.8.jar,\ paymentstandardserver.jar,\ platformhmchmc.jar,\ pmd-5.0.5.jar,\ poi-3.7.jar,\ previewwebservicesserver.jar,\ processingserver.jar,\ productcockpitserver.jar,\ promotionshmchmc.jar,\ protobuf-lite-libphonenumber-rev10.jar,\ quartz-2.1.2.jar,\ reflections-0.9.9-RC2.jar,\ reportcockpitserver.jar,\ rxjava-1.1.0.jar,\ sac-1.3.jar,\ scimark-2.0.jar,\ scriptingserver.jar,\ serializer-2.7.2.jar,\ servlet-api.jar,\ silvertail-6.5.1.1.jar,\ sitemesh-3.0-alpha-2.jar,\ slf4j-api-1.7.13.jar,\ smppapi-0.3.9.jar,\ snakeyaml-1.4.jar,\ solrfacetsearchhmchmc.jar,\ spring-aop-4.2.7.RELEASE.jar,\ spring-aspects-4.2.7.RELEASE.jar,\ spring-beans-4.2.7.RELEASE.jar,\ spring-context-4.2.7.RELEASE.jar,\ spring-context-support-4.2.7.RELEASE.jar,\ spring-core-4.2.7.RELEASE.jar,\ spring-expression-4.2.7.RELEASE.jar,\ spring-hateoas-0.19.0.RELEASE.jar,\ spring-instrument-4.2.7.RELEASE.jar,\ spring-instrument-tomcat-4.2.7.RELEASE.jar,\ spring-integration-core-4.2.8.RELEASE.jar,\ spring-jdbc-4.2.7.RELEASE.jar,\ spring-jms-4.2.7.RELEASE.jar,\ spring-messaging-4.2.7.RELEASE.jar,\ spring-mobile-device-1.0.1.RELEASE.jar,\ spring-orm-4.2.7.RELEASE.jar,\ spring-oxm-4.2.7.RELEASE.jar,\ spring-security-config-4.0.4.RELEASE.jar,\ spring-security-core-4.0.4.RELEASE.jar,\ spring-security-oauth2-2.0.9.RELEASE.jar,\ spring-security-web-4.0.4.RELEASE.jar,\ spring-test-4.2.7.RELEASE.jar,\ spring-tx-4.2.7.RELEASE.jar,\ spring-web-4.2.7.RELEASE.jar,\ spring-xml-2.2.0.RELEASE.jar,\ standard-editors-1.0.2.jar,\ ticketsystemhmchmc.jar,\ tomcat-api.jar,\ tomcat-coyote.jar,\ tomcat-dbcp.jar,\ tomcat-i18n-es.jar,\ tomcat-i18n-fr.jar,\ tomcat-i18n-ja.jar,\ tomcat-jdbc.jar,\ tomcat-juli-adapters.jar,\ tomcat-util.jar,\ tomcat7-websocket.jar,\ validation-api-1.0.0.GA.jar,\ validationserver.jar,\ velocity-1.7.jar,\ voucherhmchmc.jar,\ webfragmentCore_XSSFilter.jar,\ webfragmentCore_backofficeContextClassloaderFilter.jar,\ webfragmentCore_backofficeMobileFilter.jar,\ webfragmentCore_backofficefilterchain.jar,\ webfragmentCore_requestContextFilter.jar,\ webfragmentCore_springSecurityFilterChain.jar,\ websocket-api.jar,\ workflowserver.jar,\ wrapper.jar,\ wss4j-1.6.19.jar,\ xalan-2.7.2.jar,\ xml-apis-1.3.04.jar,\ xml-apis-ext-1.3.04.jar,\ xmlenc-0.52.jar,\ xmlgraphics-commons-1.4.jar,\ xmlsec-1.4.6.jar,\ xstream-1.4.9.jar,\ ybootstrap.jar,\ ytomcat.jar,\ zcommon-3.6.4.jar,\ zcommon-6.5.1.1.jar,\ zcommon-8.0.2.1.jar,\ zcommons-el-1.0.2.jar,\ zcommons-el-1.1.0.jar,\ zel-6.5.1.1.jar,\ zel-8.0.2.1.jar,\ zhtml-3.6.4.jar,\ zhtml-6.5.1.1.jar,\ zhtml-8.0.2.1.jar,\ zkbind-6.5.1.1.jar,\ zkbind-8.0.2.1.jar,\ zkcharts-2.1.0.jar,\ zkex-3.6.4.jar,\ zkex-6.5.1.1.jar,\ zkex-8.0.2.1.jar,\ zkmax-3.6.4.jar,\ zkmax-6.5.1.1.jar,\ zkmax-8.0.2.1.jar,\ zkplus-3.6.4.jar,\ zkplus-6.5.1.1.jar,\ zkplus-8.0.2.1.jar,\ zkspring-1.1.0.jar,\ zkspring-core-3.0.jar,\ zkspring-core-3.2.0.jar,\ zml-3.6.4.jar,\ zml-6.5.1.1.jar,\ zul-6.5.1.1.jar,\ zul-8.0.2.1.jar,\ zuti-8.0.2.1.jar,\ zxing-core-1.3.jar,\ zxing-javase-1.3.jarSmall project (~300 custom java classes on top of Hybris accelerator, db:hsqldb) All changes explained before have already been applied to this installation. load time before changes: 507 sec load time after changes: 428 sec (-15%) See the configuration of my laptop below.
If you apply all these changes..
With all these tweaks in place except the last one, skipJars-related, I got the following results: Heavy project (2790 custom java classes on top of Hybris accelerator, db:mysql local) load time before changes: 857 sec load time after changes: 505 sec (-41%) See the configuration of my laptop below. I guess that skipJars-related changes should speed up the server a bit more, but the “heavy project” configuration I played around before is no longer available for the tests. Anyway, another configuration shows that these changes work well.Configuration
Laptop: Dell Latitude E5470 Processor: Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz, 2701 Mhz, 4 Core(s), 8 Logical Processor(s) Memory: 16 Gb HDD: SSD SK hynix SC308 256 Gb 2.5″. MLC. – Read : 530 Mb/s. Up to 95000 IOPS. – Write: 380 Mb/s. 85000 IOPS. NTFS; Operating system: Windows 10 Enterprise.
I recommend this article on the Tomcat Wiki as well as the Tomcat system properties reference to understand these changes deeper.
Shinu Suresh
31 December 2016 at 00:31
Hi Rauf,
Nice article. On quick thing.
Is backoffice working for you after adding the following config? I had an issue with hybris 5.7 in my dev profile with backoffice after this change.
org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar
Thanks
Shinu
Feng
13 February 2017 at 19:37
Agree with Shinu, after first initialization, “org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar” setting will make backoffice having errors.
Federico
5 December 2017 at 12:40
Great post!
Btw, like Shinu and Feng, trying to enter to the Backoffice I get the following error:
“java.lang.IllegalStateException: no tenant active. if you do not want to use tenants, call Registry.activateMasterTenant() to assure the Master tenant is active.”
Storefront and hAC work fine.
Any workaround or suggestion? I’m using hybris commerce v6.5.0.3
Thanks!
Mindi
20 June 2020 at 17:22
Greate article. Keep posting such kind of info on your blog. Im really impressed by your blog.