springboot啓動慢解決方法

jdk的配置文件中,使用securerandom.source設置了熵源:java

cat /usr/java/jdk1.8.0_121/jre/lib/security/java.security

securerandom.source=file:/dev/random

能夠看到默認值是:/dev/random
因此程序啓動後SecureRandom類會讀取/dev/random以獲取隨機序列,這是一個同步操做。當熵池(entropy pool) 中沒有足夠的熵時,讀取/dev/random就會形成阻塞,直到收集到了足夠的熵,程序纔會繼續往下進行。
(關於什麼是/dev/random,能夠查看 wiki的介紹app


解決方法是修改爲非阻塞的熵源/dev/urandom
能夠修改java.security文件中的securerandom.source值,也能夠使用參數java.security.egddom

java -jar app.jar -Djava.security.egd=file:/dev/./urandom

至於爲何是/dev/./urandom,而不是/dev/urandom,這源於java的一個bug。大意是/dev/urandom在某些狀況下可能仍是最終會轉換成調用/dev/random。因此爲了保險起見,仍是使用/dev/./urandom吧!code

相關文章
相關標籤/搜索