java - Tomcat7 启动时间过长

标签 java tomcat servlets

当我重新启动 tomcat 时,我使用 tomcat7 作为应用程序服务器来运行我的 java web 应用程序 (.war),部署 may war 文件需要 20-25 分钟。 当我重新启动 tomcat 时,我得到了这个日志:

    Sep 24, 2016 9:45:29 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 24, 2016 9:45:29 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.68 (Ubuntu)
Sep 24, 2016 9:45:29 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/tnu.war
Sep 24, 2016 9:45:30 AM org.apache.catalina.loader.WebappClassLoaderBase validateJarFile
INFO: validateJarFile(/var/lib/tomcat7/webapps/tnu/WEB-INF/lib/javax.servlet-api-3.0.1.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
Sep 24, 2016 9:45:33 AM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Sep 24, 2016 9:46:51 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false], isDirectory: [false], canRead: [false]
Sep 24, 2016 9:46:51 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory: [false], canRead: [false]
Sep 24, 2016 9:46:51 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false], isDirectory: [false], canRead: [false]
Sep 24, 2016 9:46:51 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory: [false], canRead: [false]
Sep 24, 2016 9:46:51 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false], isDirectory: [false], canRead: [false]
Sep 24, 2016 9:46:51 AM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory: [false], canRead: [false]
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat/7.0.68 (Ubuntu)
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Jun 27 2016 18:13:17 UTC
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         7.0.68.0
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Linux
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            4.4.0-36-generic
INFO: Server version:        Apache Tomcat/7.0.68 (Ubuntu)
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Jun 27 2016 18:13:17 UTC
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         7.0.68.0
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Linux
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            4.4.0-36-generic
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             /usr/lib/jvm/java-8-openjdk-amd64/jre
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         /var/lib/tomcat7
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         /usr/share/tomcat7
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.awt.headless=true
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Xmx128m
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -XX:+UseConcMarkSweepGC
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=/usr/share/tomcat7/endorsed
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=/var/lib/tomcat7
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=/usr/share/tomcat7
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp
INFO: Command line argument: -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp
Sep 24, 2016 9:46:52 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 744 ms
Sep 24, 2016 9:46:52 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 24, 2016 9:46:52 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.68 (Ubuntu)
Sep 24, 2016 9:46:52 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/tnu.war
Sep 24, 2016 9:46:53 AM org.apache.catalina.loader.WebappClassLoaderBase validateJarFile
INFO: validateJarFile(/var/lib/tomcat7/webapps/tnu/WEB-INF/lib/javax.servlet-api-3.0.1.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
Sep 24, 2016 9:46:56 AM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Sep 24, 2016 10:03:01 AM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [965,010] milliseconds.
log4j:WARN No such property [maxBackupIndex] in org.apache.log4j.DailyRollingFileAppender.
log4j:WARN No such property [maxFileSize] in org.apache.log4j.DailyRollingFileAppender.
24 Sep 2016 10:03:01,669 - [localhost-startStop-1] DEBUG [org.jboss.logging] [] - Logging Provider: org.jboss.logging.Log4jLoggerProvider
24 Sep 2016 10:03:01,694 - [localhost-startStop-1] DEBUG [logging.loggers.YWLogger] [] - Sat Sep 24 10:03:01 UTC 2016 - [ ConstantReader ] File Found
File Found
24 Sep 2016 10:03:01,697 - [localhost-startStop-1] DEBUG [reqfilter.interceptor.MobReqFilter] [] - MobRequestFilter : init + webapp path  : /var/lib/tomcat7/webapps/tnu/
24 Sep 2016 10:03:01,698 - [localhost-startStop-1] DEBUG [reqfilter.interceptor.MobReqFilter] [] - init params : WEB-INF/classes/log4j.properties
Sep 24, 2016 10:03:05 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive /var/lib/tomcat7/webapps/tnu.war has finished in 973,344 ms
Sep 24, 2016 10:03:05 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT
Sep 24, 2016 10:03:05 AM org.apache.catalina.core.StandardContext setPath
WARNING: A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to []
Sep 24, 2016 10:03:06 AM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Sep 24, 2016 10:03:06 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /var/lib/tomcat7/webapps/ROOT has finished in 331 ms
Sep 24, 2016 10:03:06 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Sep 24, 2016 10:03:06 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 973768 ms

重启tomcat7后需要等待20-25分钟,有解决办法吗?

注意:操作系统 - digitalocean 云上的 ubuntu 14.04。

最佳答案

INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [965,010] milliseconds.

这是一个占用大量服务器时间的过程。 SecureRandom 本身的创建需要 16.0835 Minutes .

幸运的是,Apache wiki有一个解决方法:

Tomcat 7+ heavily relies on SecureRandom class to provide random values for its session ids and in other places. Depending on your JRE it can cause delays during startup if entropy source that is used to initialize SecureRandom is short of entropy. You will see warning in the logs when this happens, e.g.:

<DATE> org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [5172] milliseconds.

There is a way to configure JRE to use a non-blocking entropy source by setting the following system property: -Djava.security.egd=file:/dev/./urandom

关于java - Tomcat7 启动时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675080/

相关文章:

java - 必须有 JRE 或 JDK 才能运行 Eclipse。搜索以下位置后没有找到JVM

java - Swing鼠标拖动识别问题?

tomcat - 如何使用gradle检查应用程序是否部署在Tomcat上?

java - 如何使用 spring 以编程方式调用 GET/POST 方法

java - 在 'handled' 相同表单的文本字段后,文件未上传

java - 使用 SerialBlob 与 byte[]

java - 输入字符串的 NumberFormatException

java - 如何获取 Tomcat 的管理员用户和密码以访问 Servlets 列表

java - 从 spring 3.1.2 到 spring 4 的迁移问题

小型 VPS 上的 Java Servlet 容器