springboot~加快tomcat啟動securerandom.source
- 使用方法:
1.將$JAVA_HOME/jre/lib/security/Java.security內,將securerandom.source的內容改為file:/dev/./urandom即可
2.java -jar -Djava.security.egd=file:/dev/./urandom
- 作用:
tomcat部署項(xiang)目發現卡(ka)在(zai)Root WebApplicationContext : initialization completed in xxxms
-
整個過程沒有報錯,但是(shi)啟(qi)動時間很(hen)長(chang)。
-
查閱資(zi)料發現由于(yu)tomcat啟(qi)動時產生(sheng)隨機數導(dao)致(zhi)jvm阻塞(sai),可能是多次啟(qi)動tomcat導(dao)致(zhi)熵(shang)池被用空造成(cheng)阻塞(sai)。
在apache-tomcat官方(fang)文檔:如(ru)何讓tomcat啟(qi)動更快(kuai)里(li)面提(ti)到了一些啟(qi)動時(shi)的(de)優(you)化項(xiang),其中一項(xiang)是關于隨(sui)機(ji)數生(sheng)成時(shi),采用(yong)“熵源”(entropy source)的(de)策略(lve)。他提(ti)到tomcat7的(de)session id的(de)生(sheng)成主要是通(tong)過java.security.SecureRandom生(sheng)成隨(sui)機(ji)數來實現的(de),隨(sui)機(ji)數算法(fa)使用(yong)的(de)是“SHA1PRANG”。
- 在sun/oracle的jdk里,這個算法的提供者在底層依賴到操作系統提供的隨機數,在linux上,與之相關的是/dev/random和dev/urandom/
當熵池(chi)為空時,來自(zi)/dev/random的(de)(de)(de)(de)(de)讀(du)取操作將被阻塞,直到(dao)熵池(chi)收集到(dao)足夠的(de)(de)(de)(de)(de)環境噪聲數(shu)據。這么(me)做的(de)(de)(de)(de)(de)目(mu)的(de)(de)(de)(de)(de)是(shi)成為一(yi)個密碼安全的(de)(de)(de)(de)(de)偽隨機(ji)數(shu)發(fa)生器,熵池(chi)要(yao)有(you)盡可能(neng)大的(de)(de)(de)(de)(de)輸出。對于生成高質量的(de)(de)(de)(de)(de)加密密鑰或者是(shi)需要(yao)長期保護的(de)(de)(de)(de)(de)場景(jing),一(yi)定要(yao)這么(me)做
- Dockerfile中實現
FROM moxm/java:1.8-full
RUN mkdir -p /deployment
WORKDIR /deployment
ARG JAR_FILE=target/gateway.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
CMD sleep 60; java -jar app.jar $JAVA_OPTS
原文鏈接: