linux下tomcat 8的安裝以及tomcat啟動慢問題


今天在 linux 下安裝了 tomcat,中間也是一路波折,最終安裝好了。感覺應該有不少伙伴跟我一樣都會踩到這些坑,打算記錄下來。使用的是通用(ubantu,debian, centos 均可)的安裝方式,安裝也可以靈活一點。

下載

打開鏈接

https://tomcat.apache.org/download-80.cgi

選擇如下的方式進行下載

我下載的是這個版本:apache-tomcat-8.5.28.tar.gz

安裝

step1 解壓

tar -zvxf apache-tomcat-8.5.28.tar.gz

解壓完之后,得到【apache-tomcat-8.5.28/】這個文件夾。

step2 移動文件夾

mv apache-tomcat-8.5.28/ /opt/apache-tomcat-8.5.28

step3 創建連接

ln -s apache-tomcat-8.5.28/ tomcat8

此時已經安裝完畢了,現在可以啟動測試一下。

測試

step1 啟動

/opt/tomcat8/bin/startup.sh

step2 測試

http://ip:8080/

將以上的ip換成你自己機器的ip,如:本地訪問則是 127.0.0.1 或 localhost。

注意:如果久未反應,則等待一段時間在試。(此處是我遇到的問題,待會說明)

OK, 如果不出意外的話此時應該可以出現以下的頁面了。如果沒成功就要檢查自己的安裝步驟,JDK/JRE 的安裝路徑等問題了。
啟動成功

開機自啟動

  1. 打開 /etc/rc.local 文件

vim /etc/rc.local

該文件是給用戶自定義啟動時需要執行的文件。

  1. 添加 tomcat 路徑

/opt/tomcat8/bin/startup.sh

在 exit 0 之前添加。

至此,安裝基本已經結束了,但有一個啟動慢的問題需要解決。

tomcat啟動慢問題

問題

這個問題是我在啟動時訪問 http://ip:8080/ 沒反應,於是我就想着去關閉,但發現關閉不了,甚是奇怪。當時的報錯情況是這樣子的:
報錯細節

但是,我在訪問啟動頁面時,過了很久再次訪問,差不多有兩分鍾吧,頁面還是訪問成功了。所以,以上的問題應該就是 tomcat 沒有完全啟動就去關閉,當然就關閉不了了。

解決方法

解決的方法也簡單,去網上搜了一下:

  1. 打開 java 配置文件 java.security

文件路徑: $JAVA_HOME/lib/security/java.security

如果不知道你的 JDK/JRE 安裝路徑,就使用一下的命令進行查詢。

echo $JAVA_HOME

  1. 搜索 securerandom,找到一下信息,並將其修改
securerandom.source=file:/dev/urandom或securerandom.source=file:/dev/random
改為
securerandom.source=file:/dev/./random
  1. 保存,退出

  2. 啟動 tomcat,速度就上來了。

原因(抄的)

Tomcat 7/8 都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 類產生安全隨機類SecureRandom的實例作為會話ID,這里花去了62秒,也即接近1分鍾,當然有時花費時間更長,達到5-10分鍾。

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

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

1)如果Java.security.egd屬性或securerandom.source屬性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM會使用本地種子產生器NativeSeedGenerator,它會調用super()方法,即調用SeedGenerator.URLSeedGenerator(/dev/random)方法進行初始化。

2)如果java.security.egd屬性或securerandom.source屬性指定的是其它已存在的URL,那么會調用SeedGenerator.URLSeedGenerator(url)方法進行初始化。

這就是為什么我們設置值為”file:///dev/urandom”或者值為”file:/./dev/random”都會起作用的原因。

在這個實現中,產生器會評估熵池(entropy pool)中的噪聲數量。隨機數是從熵池中進行創建的。當讀操作時,/dev/random設備會只返回熵池中噪聲的隨機字節。/dev/random非 常適合那些需要非常高質量隨機性的場景,比如一次性的支付或生成密鑰的場景。

當熵池為空時,來自/dev/random的讀操作將被阻塞,直到熵池收集到足夠的環境噪聲數據。這么做的目的是成為一個密碼安全的偽隨機數發生器,熵池要有盡可能大的輸出。對於生成高質量的加密密鑰或者是需要長期保護的場景,一定要這么做。

那么什么是環境噪聲?

隨機數產生器會手機來自設備驅動器和其它源的環境噪聲數據,並放入熵池中。產生器會評估熵池中的噪聲數據的數量。當熵池為空時,這個噪聲數據的收集是比較花時間的。這就意味着,Tomcat在生產環境中使用熵池時,會被阻塞較長的時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM