SpringBoot 啓動慢(坑)

 今天生產環境出現一個詭異的現象,受權服務奇慢無比,其餘接口確都正常,此現象只出如今生產環境,而咱們開發,測試,預發,環境基本一致;,而後就開始了漫無邊際的日誌海洋裏尋找緣由, java

017-05-10 14:00:57.951 DEBUG 20674 --- [ionManagerTimer] h.i.c.PoolingHttpClientConnectionManager : Closing expired connections
2017-05-10 14:01:01.604  INFO 20674 --- [nio-8211-exec-6] o.a.c.util.SessionIdGeneratorBase        : Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [31,896] milliseconds.
2017-05-10 14:01:01.618 DEBUG 20674 --- [nio-8211-exec-6] o.s.b.f.s.DefaultListableBeanFactory     : Creating instance of bean 'scopedTarget.oauth2ClientContext'
2017-05-10 14:01:01.618 DEBUG 20674 --- [nio-8211-exec-6] o.s.b.f.s.DefaultListableBeanFactory     : Returning cached instance of singleton bean 'org.springframework.cache.config.internalCacheAdvisor'
2017-05-10 14:01:01.618 DEBUG 20674 --- [nio-8211-exec-6] o.s.b.f.s.DefaultListableBeanFactory     : Returning cached instance of singleton bean 'org.springframework.retry.annotation.RetryConfiguration'


org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom類產生安全隨機類SecureRandom的實例做爲會話ID算法

SHA1PRNG算法是基於SHA-1算法實現且保密性較強的僞隨機數生成器。spring

在SHA1PRNG中,有一個種子產生器,它根據配置執行各類操做。apache

Linux中的隨機數能夠從兩個特殊的文件中產生,一個是/dev/urandom.另一個是/dev/random。他們產生隨機數的原理是利用當前系統的熵池來計算出固定必定數量的隨機比特,而後將這些比特做爲字節流返回。熵池就是當前系統的環境噪音,熵指的是一個系統的混亂程度,系統噪音能夠經過不少參數來評估,如內存的使用,文件的使用量,不一樣類型的進程數量等等。若是當前環境噪音變化的不是很劇烈或者當前環境噪音很小,好比剛開機的時候,而當前須要大量的隨機比特,這時產生的隨機數的隨機效果就不是很好了。安全

這就是爲何會有/dev/urandom和/dev/random這兩種不一樣的文件,後者在不能產生新的隨機數時會阻塞程序,而前者不會(ublock),固然產生的隨機數效果就不太好了,這對加密解密這樣的應用來講就不是一種很好的選擇。/dev/random會阻塞當前的程序,直到根據熵池產生新的隨機字節以後才返回,因此使用/dev/random比使用/dev/urandom產生大量隨機數的速度要慢。session

 

 

解決辦法:app

java -jar app.jar -Djava.security.egd=file:/dev/./urandom
相關文章
相關標籤/搜索