1. 程式人生 > >centos 6.5 安裝 tomcat8 及效能優化_虛擬主機

centos 6.5 安裝 tomcat8 及效能優化_虛擬主機

Tomcat伺服器是一個免費的開放原始碼的Web應用伺服器,屬於輕量級應用伺服器,在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,是開發和除錯JSP程式的首選。

Tomcat和Nginx、Apache(httpd)、lighttpd等Web伺服器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的預設模式。不過,Tomcat處理靜態HTML的能力不如Nginx/Apache伺服器。
-------------------------------------------------------------------- 
作者:rightlzc   來源:CSDN 
原文:https://blog.csdn.net/rightlzc/article/details/82720553 

 

Tomcat 當然是需要JDK的了,直接用了我之前的筆記中JDK的部分

複製程式碼
#-----------------------首先需要安裝好Java------------------------------
rpm -qa | grep java #先檢視自帶java 如果有就解除安裝
rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 #解除安裝
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5  #解除安裝
#或者yum -y remove 解除安裝
yum -y remove java-1.4.2-gcj-compat #

# 使用掛載方式或sftp上傳java到主機,或者winscp工具
# secureCRT中alt+p可開啟sftp. 或者安裝lrzsz
yum -y install lrzsz #安裝後,rz上傳,sz下載

# 如果是tar包, 就tar zxvf jdk-8u161-linux-x64.tar.gz
cd /usr/local/src/jdk1.8.0_161

# 修改使用者下面的 .bash_profile檔案,也可以用root使用者修改/etc/profile檔案
vim /etc/profile
...
export JAVA_HOME=/usr/local/src/jdk1.8.0_161
export PATH=$PATH:$JAVA_HOME/bin
:wq

source /etc/profile #重新載入這個配置檔案
which java
java -version
複製程式碼

 

1 2 # 如果要查詢是否有過tomcat find  / -name tomcat

 

安裝Tomcat:

複製程式碼
#-------------------------- tomcat -------------------------------------
# 下載
wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz
tar zxvf apache-tomcat-8.0.53.tar.gz
mv apache-tomcat-8.0.53 tomcat8053
cd tomcat8053/bin
./startup.sh  # 啟動
./shutdown.sh # 停止

./catalina.sh version   # 檢視版本
複製程式碼

開啟 web 管理介面,不是必須的。通常僅用於開發測試。

# 修改 conf/tomcat-users.xml 檔案,可以使用web進入manager-gui 管理介面
  <role rolename="manager"/>
  <role rolename="manager-gui"/>
  <role rolename="admin"/>
  <role rolename="admin-gui"/>
  <user username="admin" password="123456" roles="admin-gui,admin,manager-gui,manager"/>

 

-------------------------------- server.xml元件類別
頂級元件       :位於整個配置的頂層,如server。
容器類元件   :可以包含其它元件的元件,如service、engine、host、context。
聯結器元件   :連線使用者請求至tomcat,如connector。
被巢狀類元件:位於一個容器當中,不能包含其他元件,如Valve、logger。
-------------------------------- server.xml元件詳解
engine     :核心容器元件,catalina引擎,負責通過connector接收使用者請求,並處理請求,將請求轉至對應的虛擬主機host。
host         :類似於httpd中的虛擬主機,一般而言支援基於FQDN的虛擬主機。
context    :定義一個應用程式,是一個最內層的容器類元件(不能再巢狀)。配置context的主要目的指定對應對的webapp的根目錄,類似於httpd的alias,其還能為webapp指定額外的屬性,如部署方式等。
connector:接收使用者請求,類似於httpd的listen配置監聽埠的。
service(服務):將connector關聯至engine,因此一個service內部可以有多個connector,但只能有一個引擎engine。service內部有兩個connector,一個engine。因此,一般情況下一個server內部只有一個service,一個service內部只有一個engine,但一個service內部可以有多個connector。
server     :表示一個運行於JVM中的tomcat例項。
Valve      :閥門,攔截請求並在將其轉至對應的webapp前進行某種處理操作,可以用於任何容器中,比如記錄日誌(access log valve)、基於IP做訪問控制(remote address filter valve)。
logger     :日誌記錄器,用於記錄元件內部的狀態資訊,可以用於除context外的任何容器中。
realm      :可以用於任意容器類的元件中,關聯一個使用者認證庫,實現認證和授權。可以關聯的認證庫有兩種:UserDatabaseRealm、MemoryRealm和JDBCRealm。
UserDatabaseRealm:使用JNDI自定義的使用者認證庫。
MemoryRealm:認證資訊定義在tomcat-users.xml中。
JDBCRealm    :認證資訊定義在資料庫中,並通過JDBC連線至資料庫中查詢認證使用者。
--------------------------------------------------------------------- 
作者:rightlzc  來源:CSDN 
原文:https://blog.csdn.net/rightlzc/article/details/82720553 

 

#-------------------------- 啟用 tomcat 的 APR 模式 -------------------------------------
# Tomcat可以使用APR來提供超強的可伸縮性和效能,更好地整合本地伺服器技術。
# APR(Apache Portable Runtime)
# 是一個高可移植庫,它是Apache HTTP Server2.x的核心。
# APR有很多用途,包括訪問高階IO功能(例如sendfile,epoll和OpenSSL),
# OS級別功能(隨機數生成,系統狀態等等),本地程序管理(共享記憶體,NT管道和UNIXsockets)
# 這些功能可以使Tomcat作為一個通常的前臺WEB伺服器,能更好地和其它本地web技術整合,
# 總體上讓Java更有效率作為一個高效能web伺服器平臺而不是簡單作為後臺容器。
#---------------------------------------------------------------------------

複製程式碼
# 先下載以下的三個元件: http://apr.apache.org/download.cgi 
# 依次安裝:
cd /opt/tomcat8053/apr-1.6.3
./configure --prefix=/usr/local/apr  
make && make install 

cd /opt/tomcat8053/apr-iconv-1.2.2  
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make && make install 

cd /opt/tomcat8053/apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv 
make && make install 

cd /opt/tomcat8053/bin/
tar zxvf tomcat-native.tar.gz
cd tomcat-native-1.2.17-src/native
./configure --with-apr=/usr/local/apr --with-java-home=/opt/java
    # 如果出現openssl版本錯誤,則需要更新 wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
    tar zxf openssl-1.0.2-latest.tar.gz 
    cd openssl-1.0.2p
    ./config --prefix=/usr/local/openssl -fPIC   # 必須帶這些引數
    make
    make install
    mv /usr/bin/openssl ~
    ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
    openssl version         # 檢視版本是否更新
    
# cd tomcat8053/bin/tomcat-native-1.2.17-src/native/ 重新執行下面的 
./configure --with-apr=/opt/apr --with-java-home=/usr/local/src/jdk1.8.0_161 --with-ssl=/usr/local/openssl
make && make install 

# 將APR 新增到環境配置 設定程式共享庫位置也就是 使用 export LD_LIBRARY_PATH 
vim /etc/profile  # 或者 ~/.bash_profile 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

# 重新載入 生效
source /etc/profile

# 修改 server.xml  大約70行 的 protocol="HTTP/1.1"
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />
               
# 大約28行 改為 off <Listener ... SSLEngine="on" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
  
# 重新啟動 tomcat
複製程式碼

更詳細的優化方案是:

複製程式碼
#------------------------ tomcat 優化 修改2個檔案: -----------------------------------
java -Xmx4096m -version   # 測試一下能否順利執行 

# catalina.sh 在頂部加入以下: 8G 或 16G 的方案設定一個即可。引數實在太多,解釋可以網上搜到。
JAVA_HOME=/usr/local/src/jdk1.8.0_161
CATALINA_HOME=/opt/tomcat8053
CATALINA_OPTS="-server -Xms528m -Xmx528m -XX:PermSize=256m -XX:MaxPermSize=358m"
CATALINA_PID=$CATALINA_HOME/catalina.pid

# 8G mem
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"

# 16G mem
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"


# server.xml  修改大約57行和70行:啟用執行緒池和使用APR
    <Executor 
        name="tomcatThreadPool" 
        namePrefix="catalina-exec-"
        maxThreads="500" 
        minSpareThreads="100" 
        prestartminSpareThreads = "true"
        maxQueueSize = "100"
    />
    
    ... 
    
    <Connector 
       executor="tomcatThreadPool"
       port="8080" 
       protocol="org.apache.coyote.http11.Http11AprProtocol" 
       connectionTimeout="20000" 
       maxConnections="10000" 
       redirectPort="8443" 
       enableLookups="false" 
       acceptCount="100" 
       maxPostSize="10485760" 
       compression="on" 
       disableUploadTimeout="true" 
       compressionMinSize="2048" 
       acceptorThreadCount="2" 
       compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" 
       URIEncoding="utf-8"
    />
複製程式碼

 

 

修改記憶體配置

這篇部落格 http://my.oschina.net/xianggao/blog/83823 比較詳細的介紹了Tomcat的一下記憶體。 
JVM記憶體分配設定的引數有四個

-Xmx    Java Heap最大值,預設值為實體記憶體的1/4;
-Xms    Java Heap初始值,Server端JVM最好將-Xms和-Xmx設為相同值,開發測試機JVM可以保留預設值;
-Xmn    Java Heap Young區大小,不熟悉最好保留預設值;
-Xss      每個執行緒的Stack大小,不熟悉最好保留預設值;

-XX:PermSize:設定記憶體的永久儲存區域; 
-XX:MaxPermSize:設定最大記憶體的永久儲存區域;
-XX:PermSize:設定記憶體的永久儲存區域;
-XX:NewSize:設定JVM堆的‘新生代’的預設大小;
-XX:MaxNewSize:設定JVM堆的‘新生代’的最大大小;

其實我們配置的基本上自由前面兩個!貼出我的配置 
要新增在tomcat 的bin 下catalina.sh 裡,位置cygwin=false前 。

 

今天改了我的 catalina.sh的設定,運行了一會暫時沒有發現問題。 這臺機器是16G記憶體,但是還運行了rabbitMQ 所以不能佔太多記憶體。

複製程式碼
CATALINA_OPTS="-server 
            -Xms6000M 
            -Xmx6000M 
            -Xss512k 
            -XX:NewSize=1024M 
            -XX:MaxNewSize=2048M 
            -XX:PermSize=512M
            -XX:MaxPermSize=512M  
            -XX:+AggressiveOpts 
            -XX:+UseBiasedLocking 
            -XX:MaxTenuringThreshold=10 
            -XX:NewRatio=2
            -Xdebug 
            -Xnoagent 
            -Djava.compiler=NONE 
            -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899"
            
複製程式碼

tomcat這種東西真是不好用,設定引數都搞這麼複雜。或許下面這個值得參考:

https://blog.csdn.net/qq_18279477/article/details/79171894 

 

 

 下面是 tomcat8的虛擬主機,一般常用的就是基於不同域名的或不同埠的虛擬主機。據說tomcat不支援基於IP的虛擬主機,原因是浪費IP資源。

複製程式碼
#------------------------------ 不同域名的虛擬主機----------------------------
# server.xml中 複製<Host>...</Host>這一段,增加一段。
# 然後修改<Host name="你的域名" appBase="對應站點的目錄"  其它可以不變
# 再增加一行:<Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/>
# <Value ... />可以不用修改
# 最後重啟 tomcat 即可。

<Host name="node-666" appBase="/opt/tomcat8053/webapp2" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host>
複製程式碼

 

複製程式碼
#------------------------------ 不同埠的虛擬主機----------------------------
# server.xml中 複製<Service>...</Service>這一段,增加一段。
# <Service name="不同的名稱"
#   <Connector port="不同的埠" 
#   <Engine name="不同的名稱"
#       <Host name="localhost"  appBase="不同的目錄"
# 以上4個引數修改一下即可,其它不用修改。 在 <Host ... > 下面再增加一行:
# <Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/>
# 最後重啟 tomcat 即可。

<Service name="Catalina2"> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="100" prestartminSpareThreads = "true" maxQueueSize = "100" /> <Connector executor="tomcatThreadPool" port="8001" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" maxConnections="10000" redirectPort="8443" enableLookups="false" acceptCount="100" maxPostSize="10485760" compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" URIEncoding="utf-8" /> <Engine name="Catalina2" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="/opt/tomcat8053/webapp2" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> </Service>
複製程式碼