【发布时间】:2010-08-18 10:42:57
【问题描述】:
我正在开发 Tomcat webapp,需要能够重新启动 Tomcat 以加载代码更改。但是,有时 Tomcat 需要很长时间才能启动,因为主线程停滞在以下位置:
java.lang.Thread.State: RUNNABLE
at org.apache.tomcat.jni.SSL.initialize(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.core.AprLifecycleListener.initializeSSL(AprLifecycleListener.java:214)
- locked <119e583> (a java.lang.Class)
at org.apache.catalina.core.AprLifecycleListener.lifecycleEvent(AprLifecycleListener.java:83)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:770)
at org.apache.catalina.startup.Catalina.load(Catalina.java:530)
at org.apache.catalina.startup.Catalina.load(Catalina.java:550)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:260)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)
此停顿是由于可用熵(如运行 cat /proc/sys/kernel/random/entropy_avail 所示)过低造成的。
当我开发代码时,我并不关心 SSL 引擎是否使用好的随机数进行初始化。
我有什么办法可以将一些假熵转储到 /dev/rnd 或强制 Tomcat 使用一些假熵?
我可以通过运行“find /”更快地推高熵,但这需要一段时间才能产生足够的熵。
【问题讨论】: