阿里雲下的服務器安裝jdk1.8和tomcat之后出現了一個問題,初次運行tomcat沒有問題,可以正常訪問tomcat首頁,但是關閉之后再重啟就發現tomcat首頁刷不出來。而且再次關閉之后還報錯了。
報錯信息上顯示Tomcat may not be running,說明tomcat還沒有啟動,說明之前開啟tomcat就出現問題了。
方案一:
官方的文檔里有這個問題的解釋:修改$JAVA_HOME/jre/lib/security/java.security文件,替換securerandom.source=file:/dev/random為: file:/dev/urandom。對所有使用JVM的應用生效。(實際修改為:securerandom.source=file:/dev/./urandom)。修改之后重啟tomcat就很快了。
關於這個random和urandom,這個是linux的提供的隨機偽設備,提供永不為空的隨機字節數據流,許多加密解密程序需要用到它們提供的隨機數。它們的區別在於:random 依賴於系統中斷,因此在系統的中斷數不足時,/dev/random設備會一直封鎖,嘗試讀取的進程就會進入等待狀態,直到系統的中斷數充分夠用。這也就是tomcat啟動變慢的原因;而urandom不依賴系統的中斷,也就不會造成進程忙等待,但是數據的隨機性也不高。
可以通過od轉化為16進制后查看生成的隨機數據:
但是使用random生成隨機數的時候一直刷不出來:
方案二:
random是依賴於系統中斷產生的隨機數,因此可以使用外部進程產生中斷,增加產生隨機數的速度,安裝rng-tools這個軟件可以增加產生隨機數的速度。
yum install rng-tools
systemctl start rngd // 開啟服務
然后再使用random生成隨機數:
這次生成隨機數就很快了,安裝了rng-tools之后就直接可以使用random生成隨機數,而不需要去修改$JAVA_HOME/jre/lib/security/java.security中的生成隨機數的方式了。