Apache Tomcat会话ID生成器的性能优化。
org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [168,588] milliseconds.
这句日志来自org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom,指出了创建SecureRandom实例用于会话ID生成使用了大量的时间。
这个问题通常与系统熵源(entropy source)有关,特别是在某些Linux系统中,SecureRandom标准实现使用 /dev/random 作为熵源。然而,在某些情况下,/dev/random 可能无法快速地提供足够的随机数据,导致生成随机数慢。
一个常见的解决方案是修改JVM参数,使其使用非阻塞熵源 /dev/urandom 来生成安全随机数。你可以通过添加以下JVM参数来实现:
-Djava.security.egd=file:/dev/./urandom
在Tomcat启动脚本中(如setenv.sh或catalina.sh)添加以上参数即可。
注意:虽然/dev/urandom不会阻塞,并且在大多数情况下都足够安全,但它可能提供比/dev/random稍低的随机性。对于大多数应用程序来说,这种差异并不重要;
注:如果你正在开发需要极高安全等级的应用(例如加密应用),则可能需要考虑其他策略。