Tomcat 8.5.9 restart is really slow on my CentOS 7.2 droplet

December 20, 2016 358 views
Getting Started CentOS

I've got tomcat 8.5.9 installed on a CentOS 7.2 droplet. When I restart tomcat, with only the tomcat manager in the webapps directory, restarts take anywhere from 3 to 15 minutes, and sometimes even longer. Has anyone seen such behavior? Top doesn't show much CPU or memory being consumed by Java. We're running OpenJDK 1.8.0_111. Normal restart times with no webapps is a couple of seconds on other systems.

1 Answer
asb MOD December 20, 2016
Accepted Answer

Slow start up times for Tomcat are often related to Java's SecureRandom implementation. By default, it uses /dev/random as an entropy source. This can be slow as it uses system events to gather entropy (e.g. disk reads, key presses, etc). As the urandom manpage states:

When the entropy pool is empty, reads from /dev/random will block until additional environmental noise is gathered.

One work around is to use /dev/urandom instead as it does not block. This is defined in your JAVA_OPTS That can be set in a number of places depending on how you set up Tomcat in the first place. It will usually be the init script or systemd service file used to start Tomcat.

-Djava.security.egd=file:/dev/./urandom

See this tutorial for more information.

Another option is to use haveged to generate more entropy. On CentOS, you can do so with:

  • yum install haveged
  • systemctl start haveged
  • systemctl enable haveged

For more information on how haveged works, check out this tutorial:

by Salvatore LaMendola
Entropy is important, and haveged is an application that can provide your system with more of it.
  • Thanks for the blazingly fast response. Right after I posted my question I started googling and saw various references to entropy.

    I'll try one of the two suggestions.

    Thanks again.

Have another answer? Share your knowledge.