thinkuncle / thinkuncle.github.io

thinkuncle
4 stars 0 forks source link

运维遇到问题整理-TODO #125

Open thinkuncle opened 7 years ago

thinkuncle commented 7 years ago

linux平台tomcat启动太慢

最近部署生产环境启动tomcat时发现tomcat启动太慢,启动监控catalina.log卡在一个地方6-7分钟,

问题

org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [365,879] milliseconds.

核查原因

发现是JVM上的随机数与熵池策略导致的 linux系统JVM默认使用 /dev/random, /dev/random 在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节。/dev/random可生成高随机性的公钥或一次性密码本。若熵池空了,对/dev/random的读操作将会被阻塞,直到收集到了足够的环境噪声为止 /dev/urandom 则是一个非阻塞的发生器: dev/random的一个副本是/dev/urandom (”unlocked”,非阻塞的随机数发生器),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。 另外wiki里也提到了为什么linux内核里的随机数生成器采用SHA1散列算法而非加密算法,是为了避开法律风险(密码出口限制)。

回到tomcat文档里的建议,采用非阻塞的熵源(entropy source),通过java系统属性来设置:

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

解决方式

  1. 在tomcat catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。
  2. 修改$JAVA_PATH/jre/lib/security/java.security​文件 替换securerandom.source=file:/dev/urandom为securerandom.source=file:/dev/./urandom 参考
thinkuncle commented 6 years ago

linux 日志查询的一些命令

linux 截取日志

sed -n '/2017-09-04 10:00:00/,/2017-09-04 10:05:55/p' catalina.out > 0914.log