Tomcat 啓動速度慢

Tomcat 啓動比較慢,查看內存、CPU、IO是否正常,如果啓動還是很慢,有的時候長達幾分鐘。
1、tomcat 獲取隨機值阻塞
Linux內核採用熵來描述數據的隨機性。熵(entropy)是描述系統混亂無序程度的物理量,一個系統的熵越大則說明該系統的有序性越差,即不確定性越大。在信息學中,熵被用來表徵一個符號或系統的不確定性,熵越大,表明系統所含有用信息量越少,不確定度越大。計算機本身是可預測的系統,因此,用計算機算法不可能產生真正的隨機數。但是機器的環境中充滿了各種各樣的噪聲,如硬件設備發生中斷的時間,用戶點擊鼠標的時間間隔等是完全隨機的,事先無法預測。Linux內核實現的隨機數產生器正是利用系統中的這些隨機噪聲來產生高質量隨機數序列。內核維護了一個熵池用來收集來自設備驅動程序和其它來源的環境噪音。理論上,熵池中的數據是完全隨機的,可以實現產生真隨機數序列。爲跟蹤熵池中數據的隨機性,內核在將數據加入池的時候將估算數據的隨機性,這個過程稱作熵估算。熵估算值描述池中包含的隨機數位數,其值越大表示池中數據的隨機性越好。
​ tomcat的啓動需要產生session id,這個產生需要通過java.security.SecureRandom生成隨機數來實現,隨機數算法使用的是”SHA1PRNG”,但這個算法依賴於操作系統的提供的隨機數據,在linux系統中,這個值又依賴於/dev/random 和/dev/urandom。
/dev/random:阻塞型,讀取它就會產生隨機數據,但該數據取決於熵池噪聲,當熵池空了,對/dev/random 的讀操作也將會被阻塞。
/dev/urandom:非阻塞的隨機數產生器,它會重複使用熵池中的數據以產生僞隨機數據,這表示對/dev/urandom的讀取操作不會產生阻塞,但其輸出的熵可能小於/dev/random的。它可以作爲生成較低強度密碼的僞隨機數生成器,不建議用於生成高強度長期密碼。查看熵池的大小 /proc/sys/kernel/random/entropy_avail 。/proc/sys/kernel/random/poolsize 保存着熵池的最大容量,單位都是bit。
總結 tomcat 啓動慢的原因是隨機數產生遭到阻塞,遭到阻塞的原因是 熵池大小 。
解決方法:(1)更換產生隨機數的源:因爲/dev/urandom 是非阻塞的隨機數產生器,所以我們可以從這邊獲取,但是生產的隨機數的隨機性比較低。可以在tomcat啓動腳本(catalina.sh)裏面添加JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
或者是更改java的java.security 文件,將securerandom.source=file:/dev/random 改爲 securerandom.source=file:/dev/./urandom
(2)增大熵池的值:要增大熵池 的值首先得你的cpu支持DRNG 特性, 如何查看我們的服務器的是否支持DRNG特性?
cat /proc/cpuinfo | grep rdrand
如果不支持的話,那麼就只能通過上面的第一種方法來解決了
安裝rngd服務(關於rngd服務的介紹)
yum -y install rng-tools
systemctl enable rngd
systemctl start rngd
然後進行查看我們的熵池 的值,會發現變大了
cat /proc/sys/kernel/random/entropy_avail
然後我們啓動tomcat 會發現啓動速度快很多。
2、 tomcat 需要部署的web應用程序太多:比如在webapps下的 doc 、example、ROOT 、其他web項目包等,可以將不需要的刪除。
3、 tomcat啓動內存不足:在啓動腳本catalina.sh加上JAVA_OPTS=’-server -Xms1024m -Xmx1024m’ 具體的內存大小,根據業務調整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章