1. 程式人生 > >tomcat在linux啟動應用慢解決方式,通過rng-tools自動補充熵池

tomcat在linux啟動應用慢解決方式,通過rng-tools自動補充熵池

詳解熵池 熵池本質上是若干位元組。/proc/sys/kernel/random/entropy_avail中儲存了熵池現在的大小,/proc/sys/kernel/random/poolsize是熵池的最大容量,單位都是bit。如果entropy_avail的值小於要產生的隨機數bit數,那麼/dev/random就會堵塞。 那麼,為什麼熵池不夠用呢? google了一下資料,熵池實際上是從各種noice source中獲取資料,noice source可能是鍵盤事件、滑鼠事件、裝置時鐘中等。linux核心從2.4升級到2.6時,處於安全性的考慮,廢棄了一些source。source減少了,熵池補給的速度當然也變慢,進而不夠用。 其實,通過消耗熵池,可以構造DOS攻擊。原理很簡單,熵池空了,依賴隨機數的業務(SSL,加密等)就不能正常進行。

補充熵池 Linux伺服器在執行時,既沒有鍵盤事件,也沒有滑鼠事件,如何快速積累熵池呢? google了一下資料,發現有一些程式可以自動補充熵池,例如rngd或rng-tools。 我在Linode VPS上嘗試了一下rngd,效果非常明顯。 先觀察rngd啟動前的熵池大小: watch cat /proc/sys/kernel/random/entropy_avail ,在100~200之間。 然後啟動rngd:sudo rngd -r /dev/urandom -o /dev/random -f -t 1 熵池立刻飆升到3712,接近4096的上限。

檢視當前系統的隨機數生成速率 watch -n 1 cat /proc/sys/kernel/random/entropy_avail

可以通過安裝rng-tools解決 yum -y install rng-tools

在這裡插入圖片描述 echo ‘EXTRAOPTIONS="–rng-device /dev/urandom"’ >/etc/sysconfig/rngd service rngd restart chkconfig rngd on

另外的解決方法是在JAVA中的配置發生器 有兩種解決辦法: 1)在Tomcat環境中解決 可以通過配置JRE使用非阻塞的Entropy Source。 在catalina.sh中加入這麼一行:-Djava.security.egd=file:/dev/./urandom 即可。 加入後再啟動Tomcat,整個啟動耗時下降到Server startup in 2912 ms。 2)在JVM環境中解決(*實測,真實好使) 開啟$JAVA_PATH/jre/lib/security/java.security這個檔案,找到下面的內容: securerandom.source=file:/dev/urandom 替換成 securerandom.source=file:/dev/./urandom