整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Nginx+Tomcat的配合使用

          Nginx+Tomcat的配合使用

          期嘗試使用tomcat和Nginx進行配合做負載均衡和靜態與動態資源分配的Demo,期間遇到很多有意思的地方和知識短板,特此記錄

          一:什么是Nginx?

           Nginx也是一款服務器,我們常用它做如:反向代理、負載均衡、動態與靜態資源的分離的工作
           反向代理:相對應的是正向代理,如果你使用過代理服務器的話就明白,我們訪問某一個網站并非直接訪問目標網站,而是告訴代理服務器我需要訪問什么目標網站,由代理服務器發出請求給目標網站,將目標網站訪問結果再轉發給你,此時,你是請求代理方。而反向代理是此時代理服務器做服務器的代理,我們的訪問請求并非直接訪問到目標服務器上,而是訪問代理服務器,由代理服務器決定什么樣的請求以什么樣的方式訪問正式服務器
           負載均衡:目前大多數的網站都會采用負載均衡手段來針對目前用戶的指數級增長來減少對單點服務器的負載壓力,比如目前我們擁有3臺真實服務器,我們需要根據相應策略決定什么樣的用戶請求分配到哪個真實服務器,比如按照輪詢的方式,用戶請求挨個到達代理服務器,此時代理服務器按照第一個請求轉發至第一臺真實服務器,第二個請求轉發到第二個服務器上,依次類推,這樣可以防止大量的用戶請求全部訪問到同一臺物理機上,單點物理機的性能始終有限的,當然這可能對服務器數據訪問時候造成事務性的失效,在Web方面可能造成Session訪問的問題,這不在本文討論方面內
           動態靜態資源分離:最方便列舉就是Java的JSP和靜態資源如:.js/.css/.html/.png方面的資源分離,之前開發web方面的程序時候我們習慣將html、css等資源文件也放置于Tomcat之中,用戶訪問后tomcat需要將請求的這些靜態資源文件一并返回給用戶,再者如果有多臺同業務邏輯的tomcat服務器的話,同樣的資源還需要在每個服務器上放一份,同時也增加了tomcat服務器的網絡IO,十分不合算的,如果我們只講JSP之類的請求交給tomcat,而代理服務器上存放靜態資源,當用戶的請求非動態資源的時候,我們完全可以將代理服務器的靜態資源直接返回給用戶,而不去增大Tomcat的壓力,tomcat只需要負責邏輯處理和動態資源的加載就可以了
           基于上述的Nginx優勢,決定搭建一下Nginx+Tomcat的組合來進行測試,包括參數傳遞,post、get傳遞參數是否有影響,還有Nginx的工作模式master和worker的工作方式進行一些淺薄的總結
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          
          一、Nginx的安裝
           安裝部分這里就不在細說了,網上的教程很多,我們直接從配置文件開始吧
          1
          2
          
          二、配置文件
          #user nobody;
          #這里是核心worker數,一般設置為與cpu核心數相同的數目,避免進程切換造成的上下文切換耗費資源,cpu信息可以從/proc/cpuinfo中查看
          worker_processes 1;
          #error_log logs/error.log;
          #error_log logs/error.log notice;
          #error_log logs/error.log info; 
          #pid logs/nginx.pid;
          events {
          #use epoll model使用epoll模型,采用異步非阻塞模型加快處理速度
           use epoll;
           worker_connections 1024;
          }
          http { 
           include mime.types;
           default_type application/octet-stream;
           #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           # '$status $body_bytes_sent "$http_referer" '
           # '"$http_user_agent" "$http_x_forwarded_for"';
           #access_log logs/access.log main;
           #設定通過nginx上傳文件的大小
           client_max_body_size 300m;
          #使用sendfile函數在兩個文件描述符之間直接傳遞數據(完全在內核中操作,傳送),從而避免了內核緩沖區數據和用戶緩沖區數據之間的拷貝,操作效率很高,被稱之為零拷貝。
           sendfile on;
           #tcp_nopush on;
           #keepalive_timeout 0;
           #連接活躍時間
           keepalive_timeout 65;
          #使用壓縮數據減少IO量,但是在不支持數據解壓瀏覽器可能產生亂碼
           #gzip on;
           #靜態服務器組
           #設定靜態資源服務器訪問接口
           upstream static.zh-jieli.com {
           server localhost:808 weight=1;
           }
           #動態服務器組
           upstream zh-jieli.com {
           #設置Hash輪詢規則
          #ip_hash;
          #weight: server ip:port weight=10
          #默認 輪詢
          #fair:按照后端服務器的響應時間來分配
          #url_hash:按照url規則進行分配,使得固定的請求分配到固定的服務器上 
           server localhost:8080;
           server localhost:8081;
           }
           server{
           listen 808;
           server_name static;
           location / {
           }
           location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
           #所有靜態文件直接讀取硬盤內容:讀取的靜態資源存放位置
           root /apache-tomcat-8.5.24/webapps/ROOT ;
           #資源是否進行緩存與緩存時間
           expires 30d; #緩存30天
           }
           }
           server {
           listen 80;
           server_name localhost;
           #charset koi8-r;
           #access_log logs/host.access.log main;
           location / {
           root html;
           index index1.html index.htm;
           }
           location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
           #proxy_cache cache_one;
           proxy_cache_valid 200 304 302 5d;
           proxy_cache_valid any 5d;
           proxy_cache_key '$host:$server_port$request_uri';
           add_header X-Cache '$upstream_cache_status from $host';
           proxy_pass http://static.zh-jieli.com;
           # 所有靜態文件直接讀取硬盤
           root /apache-tomcat-8.5.24/webapps/ROOT;
           expires 30d; #緩存30天
           }
           #其他頁面反向代理到tomcat容器
           location ^~ /tomcat {
           index index; 
           # proxy_pass http://localhost:8080/;
           #設定代理服務器組
           proxy_pass http://zh-jieli.com/;
           }
           error_page 500 502 503 504 /50x.html;
           location=/50x.html {
           root html;
           }
           }
          }
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          56
          57
          58
          59
          60
          61
          62
          63
          64
          65
          66
          67
          68
          69
          70
          71
          72
          73
          74
          75
          76
          77
          78
          79
          80
          81
          82
          83
          84
          85
          86
          87
          88
          89
          90
          91
          92
          93
          94
          95
          96
          97
          98
          99
          100
          101
          102
          103
          104
          105
          106
          107
          108
          109
           整個nginx工作時當http請求到來時,由nginx針對nginx.conf配置好的規則,對location進行正則匹配,匹配到相應的正則,進行location內部的處理
           關于Nginx的location配置附上一篇博客,很nice
           http://seanlook.com/2015/05/17/nginx-location-rewrite/
           里面很詳細列出了各種要求的location匹配規則,值得注意的一點是:
           location匹配遵循最長原則,即滿足了之前的匹配規則后,除了遇見^會終止向下繼續匹配,其他情況會依次向下搜索,知道找到合適的location匹配規則然后進行處理
           Nginx在模塊功能上分三個模塊:
           Handlers(處理器模塊)。此類模塊直接處理請求,并進行輸出內容和修改headers信息等操作。Handlers處理器模塊一般只能有一個。
           Filters (過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最后由Nginx輸出。
           Proxies (代理類模塊)。此類模塊是Nginx的HTTP Upstream之類的模塊,這些模塊主要與后端一些服務比如FastCGI等進行交互,實現服務代理和負載均衡等功能。
          因為是測試,所以我的兩個tomcat都安裝到了同一臺本地機器上
          生產環境中根據需要進行配置相應的IP就好了
          本地寫好相應的測試代碼+log4j將信息日志打到相應的位置用來觀察參數是否傳遞過來
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          

          TestOne.java

          package com.nginx.controllers;
          import com.nginx.utils.Log4jUtils;
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RequestParam;
          @Controller
          @RequestMapping("/test")
          public class TestOne {
           @RequestMapping("/getname")
           public void test(@RequestParam(value="name") String name) {
           //用來記錄獲取的參數name,可以通過查看日志進行確認
           Log4jUtils.getLogger().info("my name is" + name);
           }
          }
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          

          Log4jUtils.java

          package com.nginx.utils;
          import org.apache.log4j.Logger;
          public class Log4jUtils {
           private static final Logger logger=Logger.getLogger(Logger.class);
           public static Logger getLogger() {
           return logger;
           }
          }
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
           這里簡單做了兩個的demo程序,做相應的測試,將項目打成war包后上傳至Linux服務器,移動到tomcat/webapps中,tomcat進行熱部署
           先測試當前的tomcat是否能正常運行,由于沒有做區別頁面,就直接看日志來判斷了
          1
          2
          3
          



           如圖:以輪詢方式進行訪問8080和8081監聽的tomcat
           上述方式是get請求進行的測試,我們來試試post
          1
          2
          3
          4
          <!DOCTYPE html>
          <html>
          <body>
          <form action="http://123.207.85.242/tomcat/nginx/test/getname" method="post">
           <input type="text" name="name">
           <input type="submit" value="提交">
          </form>
          </body>
          </html>
          1
          2
          3
          4
          5
          6
          7
          8
          9
          測試結果依舊可以正常接收參數,這里就不貼圖了
          1
          2
          
          二、靜態動態資源分離
          現在試試直接訪問
          1
          2
          http://ip/tomcat
          1
          我們會直接跳轉到tomcat的主頁面,如果檢索tomcat.png的話
          1
          2
          http://ip/tomcat/tomcat.png
          1
          可以直接檢索到tomcat.png,它是來自tomcat服務器的資源,如果需要檢索nginx的靜態資源,可以使用
          1
          2
          http://ip/tomcat.png
          1
           這樣我們的資源就來自于nginx.conf文件中配置的關于靜態資源的訪問路徑了,為了證明此事資源來自于nginx,我嘗試將8080端口的tomcat/webapps/ROOT/tomcat.png更名為tomcat1.png,然后嘗試訪問http://ip/tomcat1.png訪問成功,這時候如果刷新http://ip/tomcat/訪問tomcat主頁的時候會發現圖標會在出現和不出現之間輪轉,原因就是這里請求了tomcat服務器本身去拿資源,tomcat:8080的圖片名被更改,如果代理訪問的服務器正好是tomcat:8080的話,它是找不到tomcat.png的,當然輪轉到tomcat:8081時候,圖片還是會出現滴
          1
          2
          
          三、Nginx工作模式



           如圖nginx啟動后會有兩個進程
           如果你將nginx.conf的
          1
          2
          3
          worker_processes 1;更改為worker_processes 2; 
          1
          那么出現的就是
          1
          2
          



           那我們來說說master和worker進程分別的是干什么的,從pid來看,matser的父進程是init進程,而worker的父進程都是master,這里就很有意思了,那nginx這兩個進程都到底是干嘛的嘞???
           感謝baidu與google的強大,對于疑問的解釋很清楚
           原地址:http://blog.csdn.net/hguisu/article/details/8930668
          感興趣的同學可以看一看,這里只簡單總結一下
          1
          2
          3
          4
          5
          6
          7
          

          master進程

           主要用來管理worker進程,包含:接收來自外界的信號,向各worker進程發送信號,監控worker進程的運行狀態,當worker進程退出后(異常情況下),會自動重新啟動新的worker進程。
           master的平滑重啟很有意思,master只負責接收外界信號,那么當我們更改了nginx.conf文件需要重新啟動nginx時候怎么辦????只需要通過kill向master進程發送信號就行了。比如kill -HUP pid,這時候master并不會干掉自己所有的worker然后自殺,而是重新加載nginx.conf后,重新啟動一批worker,在這之后的請求全部由新的worker進行處理,而老的worker也并不是立即終止,而是在運行完當前的請求后,被終止掉,接下來的請求就全部交給新的worker了,當然這個方式后來被改成了
          1
          2
          3
          nginx -s reload
          1
          這個命令重新加載配置和上面的略有不一樣,其會新啟動一個nginx然后向Master發送信號,當然接下來就和上面的過程一致了
          1
          2
          

          worker進程

          ntroduction

          部署是指將Web應用程序(第三方WAR或您自己的自定義Web應用程序)安裝到Tomcat服務器的過程。

          Web應用程序部署可以在Tomcat服務器中以多種方式完成。

          • 靜態;在Tomcat啟動之前設置Web應用程序
          • 動態;通過直接操作已部署的Web應用程序(依賴于auto-deployment功能)或使用Tomcat Manager Web應用程序遠程訪問

          Tomcat Manager是一個Web應用程序,可以通過HTML GUI交互使用,或以編程方式(通過基于URL的API)來部署和管理Web應用程序。

          有許多方法可以執行依賴Manager Web應用程序的部署。 Apache Tomcat為Apache Ant構建工具提供任務。Apache Tomcat Maven Plugin project提供與Apache Maven的集成。還有一個名為Client Deployer的工具,可以從命令行使用它,并提供其他功能,例如編譯和驗證Web應用程序以及將Web應用程序打包到Web應用程序資源(WAR)文件中。

          Installation

          靜態部署Web應用程序不需要安裝,因為Tomcat提供了開箱即用的功能。使用Tomcat Manager的部署功能也不需要任何安裝,盡管需要進行一些配置,詳細說明在下一節。但是,如果您希望使用Tomcat客戶端部署程序(TCD),則需要安裝。

          TCD未與Tomcat核心發行版一起打包,因此必須從“下載”區域單獨下載。下載通常是標記的apache-tomcat-9.0.x-deployer.


          TCD需要先安裝Apache Ant 1.6.2+和Java。您需要設置指向Ant安裝根目錄的ANT_HOME環境值,以及指向Java安裝根目錄的JAVA_HOME值。此外,您應該確保Ant的ant命令,以及Java javac編譯器命令可以在shell中運行。

          1. 下載TCD發行版
          2. 不需要將TCD包提取到任何現有的Tomcat安裝中,它可以被提取到任何位置。
          3. Read Using the Tomcat Client Deployer

          A word on Contexts

          在談論Web應用程序的部署時,Context這個概念需要被理解。 Context在Tomcat中被稱為Web應用程序。

          為了在Tomcat中配置一個Context ,一個Context Descriptor(Context描述)是必須的。Context Descriptor只是一個XML文件,它包含上下文的Tomcat相關配置,例如命名資源或會話管理器配置。在早期版本的Tomcat中,Context Descriptor配置的內容通常存儲在Tomcat的主配置文件中server.xml。但現在不鼓勵這種做法(盡管目前仍然有效)。


          Context Descriptor不僅幫助Tomcat知道如何配置上下文,而且其他工具(如Tomcat Manager和TCD)通常使用這些上下文描述符來正確執行其角色。

          Context Descriptor的位置是:

          1. $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
          2. $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

          (1)中的文件名為[webappname] .xml,但(2)中的文件名為context.xml。如果沒有為Context提供Context Descriptor,Tomcat將使用默認值配置Context。

          在Tomcat啟動時部署

          如果您對使用Tomcat Manager或TCD不感興趣,那么您需要將Web應用程序靜態部署到Tomcat,然后啟動Tomcat,此類部署的位置稱為appBase,它對于每個主機是指定的。你要么復制一個所謂的exploded web application到此位置,或壓縮的Web應用程序資源.WAR文件。

          還有當Host的deployOnStartup屬性為“true”時,在Tomcat啟動時應用才會部署到appBase指定的位置。

          在這種情況下,Tomcat啟動時將發生以下部署順序:

          1. 將首先部署任何上下文描述符。
          2. 然后將部署未被任何上下文描述符引用的exploded web application。如果他們在appBase中有一個關聯的.WAR文件,并且它比exploded web application更新,則會刪除exploded web application,并從.WAR重新部署webapp。
          3. 將部署.WAR文件

          在正在運行的Tomcat服務器上部署

          可以將Web應用程序部署到正在運行的Tomcat服務器。

          如果 Host的 autoDeploy屬性為“true”,主機將嘗試根據需要動態部署和更新Web應用程序,例如,如果將新的.WAR放入appBase。為此,主機需要啟用后臺處理,這是默認配置。

          autoDeploy設置為“true”,運行Tomcat允許:

          • 部署.WAR文件復制到主機中appBase.
          • 部署已復制到主機中的exploded web application.
          • 重新部署已在提供新.WAR時從.WAR部署的Web應用程序。在這種情況下,將刪除exploded web application,并再次展開.WAR。請注意,如果配置主機以便.WAR不會使用展開,unpackWARs屬性設置為“false”,在這種情況下,Web應用程序將簡單地重新部署為壓縮存檔。
          • 如果更新了/WEB-INF/web.xml文件(或定義為WatchedResource的任何其他資源),則重新加載Web應用程序。
          • 如果更新了部署Web應用程序的Context Descriptor文件,則重新部署Web應用程序。
          • 如果更新Web應用程序使用的全局或每主機上下文描述符文件,則重新部署從屬Web應用程序。
          • 如果將上下文描述符文件(具有與先前部署的Web應用程序的上下文路徑對應的文件名)添加到Web應用程序,則重新部署Web應用程序$CATALINA_BASE/conf/[enginename]/[hostname]/ directory.
          • 如果刪除了其文檔庫(docBase),則取消部署Web應用程序。請注意,在Windows上,這假定啟用了反鎖定功能(請參閱上下文配置),否則無法刪除正在運行的Web應用程序的資源。

          請注意,也可以在加載程序中配置Web應用程序重新加載,在這種情況下,將跟蹤已加載的類以進行更改。

          使用客戶端部署程序包進行部署

          最后,可以使用Tomcat Client Deployer實現Web應用程序的部署。這是一個包,可用于驗證,編譯,壓縮到.WAR,以及將Web應用程序部署到生產或開發Tomcat服務器。應該注意,此功能使用Tomcat Manager,因此目標Tomcat服務器應該運行。

          假設用戶熟悉Apache Ant以使用TCD。 Apache Ant是一個腳本化的構建工具。 TCD預先打包了要使用的構建腳本。只需要對Apache Ant有一定的了解(本頁前面列出的安裝,熟悉使用操作系統命令shell和配置環境變量)。

          TCD包括Ant任務,部署前用于JSP編譯的Jasper頁面編譯器,以及驗證Web應用程序上下文描述符的任務。驗證器任務(類org.apache.catalina.ant.ValidatorTask)僅允許一個參數:解壓的Web應用程序的基本路徑。

          TCD使用解壓的Web應用程序作為輸入(請參閱下面使用的屬性列表)。以部署程序編程部署的Web應用程序可以包括上下文描述符/META-INF/context.xml.

          TCD包含一個即用型Ant腳本,具有以下目標:

          • compile(默認):編譯并驗證Web應用程序。這可以單獨使用,也不需要運行Tomcat服務器。已編譯的應用程序僅在關聯的應用程序上運行Tomcat X.Y.Z服務器版本,并不保證在另一個Tomcat版本上工作,因為Jasper生成的代碼取決于其運行時組件。還應該注意的是,該目標還將自動編譯位于其中的任何Java源文件/WEB-INF/classesWeb應用程序的文件夾。
          • deploy:將Web應用程序(已編譯或未編譯)部署到Tomcat服務器。
          • undeploy:取消部署Web應用程序
          • start:啟動Web應用程序
          • reload:重新加載Web應用程序
          • stop:停止Web應用程序

          為了配置部署,請創建一個名為的文件deployer.properties在TCD安裝目錄root中。在此文件中,每行添加以下name=value對:

          此外,您需要確保已為目標Tomcat Manager(TCD使用)設置了用戶,否則TCD將不會使用Tomcat Manager進行身份驗證,部署將失敗。要執行此操作,請參閱Tomcat Manager頁面。

          • build:默認情況下,使用的構建文件夾將是${build}/webapp/${path} (${build},默認情況下,指向${basedir}/build)。執行結束后compile目標,Web應用程序.WAR將位于${build}/webapp/${path}.war.
          • webapp:包含將被編譯和驗證的解壓的Web應用程序的目錄。默認情況下,該文件夾是myapp.
          • path:默認情況下,部署Web應用程序的上下文路徑/myapp.
          • url:正在運行的Tomcat服務器的Tomcat Manager Web應用程序的絕對URL,將用于部署和取消部署Web應用程序。默認情況下,部署者將嘗試訪問在localhost上運行的Tomcat實例http://localhost:8080/manager/text.
          • username:Tomcat Manager用戶名(用戶應該具有manager-script的角色)
          • password:Tomcat Manager密碼。

          .1 Tomcat簡介

          Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發而成。

          Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。

          Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Nginx/Apache服務器。

          1.1.1 Tomcat好幫手---JDK

          JDK是 Java 語言的軟件開發工具包,主要用于移動設備、嵌入式設備上的java應用程序。JDK是整個java開發的核心,它包含了JAVA的運行環境(JVM+Java系統類庫)和JAVA工具。

          JDK包含了一批用于Java開發的組件,其中包括:

          javac:編譯器,將后綴名為.java的源代碼編譯成后綴名為“.class”的字節碼

          java:運行工具,運行.class的字節碼

          jar:打包工具,將相關的類文件打包成一個文件

          javadoc:文檔生成器,從源碼注釋中提取文檔,注釋需匹配規范

          jdb debugger:調試工具

          jps:顯示當前java程序運行的進程狀態

          javap:反編譯程序

          appletviewer:運行和調試applet程序的工具,不需要使用瀏覽器

          javah:從Java類生成C頭文件和C源文件。這些文件提供了連接膠合,使Java和C代碼可進行交互。

          javaws:運行JNLP程序

          extcheck:一個檢測jar包沖突的工具

          apt:注釋處理工具

          jhat:java堆分析工具

          jstack:棧跟蹤程序

          jstat:JVM檢測統計工具

          jstatd:jstat守護進程

          jinfo:獲取正在運行或崩潰的java程序配置信息

          jmap:獲取java進程內存映射信息

          idlj:IDL-to-Java編譯器。將IDL語言轉化為java文件

          policytool:一個GUI的策略文件創建和管理工具

          jrunscript:命令行腳本運行

          JDK中還包括完整的JRE(Java Runtime Environment),Java運行環境,也被稱為private runtime。包括了用于產品環境的各種庫類,如基礎類庫rt.jar,以及給開發人員使用的補充庫,如國際化與本地化的類庫、IDL庫等等。

          JDK中還包括各種樣例程序,用以展示Java API中的各部分。

          1.2 安裝Tomcat & JDK

          安裝時候選擇tomcat軟件版本要與程序開發使用的版本一致。jdk版本要進行與tomcat保持一致。

          1.2.1 系統環境說明

          [root@web03 ~]# cat /etc/redhat-release

          CentOS Linux release 7.4.1708 (Core)

          [root@web03 ~]# uname -a

          Linux web03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

          [root@web03 ~]# getenforce

          Disabled

          [root@web03 ~]# systemctl status firewalld.service

          ● firewalld.service - firewalld - dynamic firewall daemon

          Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

          Active: inactive (dead)

          Docs: man:firewalld(1)

          1.2.2 安裝JDK

          命令集:

          tar xf jdk-8u60-linux-x64.tar.gz -C /application/

          ln -s /application/jdk1.8.0_60 /application/jdk

          # 設置環境變量

          sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

          source /etc/profile

          測試jdk是否安裝成功↓

          [root@web03 ~]# java -version

          java version "1.8.0_60"

          Java(TM) SE Runtime Environment (build 1.8.0_60-b27)

          Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

          1.2.3 安裝Tomcat

          命令集:

          tar xf apache-tomcat-8.0.27.tar.gz -C /application/

          ln -s /application/apache-tomcat-8.0.27 /application/tomcat

          # 設置環境變量

          echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile

          source /etc/profile

          # 注意授權,統一權限

          chown -R root.root /application/jdk/ /application/tomcat/

          檢查tomcat是否安裝成功

          [root@web03 ~]# /application/tomcat/bin/version.sh

          Using CATALINA_BASE: /application/tomcat

          Using CATALINA_HOME: /application/tomcat

          Using CATALINA_TMPDIR: /application/tomcat/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

          Server version: Apache Tomcat/8.0.27

          Server built: Sep 28 2015 08:17:25 UTC

          Server number: 8.0.27.0

          OS Name: Linux

          OS Version: 3.10.0-693.el7.x86_64

          Architecture: amd64

          JVM Version: 1.8.0_60-b27

          JVM Vendor: Oracle Corporation

          1.3 Tomcat目錄介紹

          1.3.1 tomcat主目錄介紹

          [root@web03 ~]# cd /application/tomcat/

          [root@web03 tomcat]# tree -L 1

          .

          ├── bin #存放tomcat管理腳本

          ├── conf # tomcat 配置文件存放目錄

          ├── lib # web應用調用的jar包存放路徑

          ├── LICENSE

          ├── logs # tomcat 日志存放目錄,catalina.out 為主要輸出日志

          ├── NOTICE

          ├── RELEASE-NOTES

          ├── RUNNING.txt

          ├── temp # 存放臨時文件

          ├── webapps # web程序存放目錄

          └── work # 存放編譯產生的.java 與 .class文件

          7 directories, 4 files

          1.3.2 webapps目錄介紹

          [root@web03 tomcat]# cd webapps/

          [root@web03 webapps]# tree -L 1

          .

          ├── docs # tomcat 幫助文檔

          ├── examples # web應用實例

          ├── host-manager # 主機管理

          ├── manager # 管理

          └── ROOT # 默認站點根目錄

          5 directories, 0 files

          1.3.3 Tomcat配置文件目錄介紹(conf)

          [root@web03 conf]# tree -L 1

          .

          ├── Catalina

          ├── catalina.policy

          ├── catalina.properties

          ├── context.xml

          ├── logging.properties

          ├── logs

          ├── server.xml # tomcat 主配置文件

          ├── server.xml.bak

          ├── server.xml.bak2

          ├── tomcat-users.xml # tomcat 管理用戶配置文件

          ├── tomcat-users.xsd

          └── web.xml

          2 directories, 10 files

          1.4 Tomcat的管理

          # 啟動程序/application/tomcat/bin/startup.sh

          # 關閉程序/application/tomcat/bin/shutdown.sh

          啟動停止

          [root@web03 ~]# /application/tomcat/bin/shutdown.sh

          Using CATALINA_BASE: /application/tomcat

          Using CATALINA_HOME: /application/tomcat

          Using CATALINA_TMPDIR: /application/tomcat/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

          [root@web03 ~]# /application/tomcat/bin/startup.sh

          Using CATALINA_BASE: /application/tomcat

          Using CATALINA_HOME: /application/tomcat

          Using CATALINA_TMPDIR: /application/tomcat/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

          Tomcat started.

          注意:tomcat未啟動的情況下使用shutdown腳本,會有大量的輸出信息。

          檢查tomcat是否啟動正常

          [root@web03 ~]# netstat -lntup |grep java

          tcp6 0 0 :::8080 :::* LISTEN 30560/java

          tcp6 0 0 127.0.0.1:8005 :::* LISTEN 30560/java

          tcp6 0 0 :::8009 :::* LISTEN 30560/java

          說明:所有與java相關的,服務啟動都是java命名的進程

          1.4.1 啟動完成瀏覽器進行訪問

          http://10.0.0.17:8080/

          1.5 Tomcat日志說明

          1.5.1 查看日志

          [root@web03 ~]# tailf /application/tomcat/logs/catalina.out

          24-Nov-2017 15:09:51.654 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]

          24-Nov-2017 15:09:51.665 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]

          24-Nov-2017 15:09:51.670 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 60037 ms

          發現啟動時間較長,其中有一項的啟動時間占據了絕大多數

          24-Nov-2017 15:09:50.629 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /application/apache-tomcat-8.0.27/webapps/memtest.war has finished in 58,892 ms

          發現耗時在這里:是session引起的隨機數問題導致的。Tocmat的Session ID是通過SHA1算法計算得到的,計算Session ID的時候必須有一個密鑰。為了提高安全性Tomcat在啟動的時候會通過隨機生成一個密鑰。

          1.5.2 解決Tomcat啟動慢的方法

          Tomcat啟動慢主要原因是生成隨機數的時候卡住了,導致tomcat啟動不了。

          是否有足夠的熵來用于產生隨機數,可以通過如下命令來查看

          [root@web03 ~]# cat /proc/sys/kernel/random/entropy_avail

          6

          為了加速/dev/random提供隨機數的速度,你可以通過操作設備的外設,讓其產生大量的中斷,網絡傳輸數據,按鍵,移動鼠標,在命令行敲幾個不同的命令,俗稱聚氣。

          cat /dev/random 會消耗能量

          方法1:

          vim $JAVA_HOME/jre/lib/security/java.security

          securerandom.source=file:/dev/random

          改為

          securerandom.source=file:/dev/urandom

          方法2:

          vim $TOMCAT_HOME/bin/catalina.sh

          if [[ "$JAVA_OPTS" !=*-Djava.security.egd=* ]]; then

          JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"

          fi

          這個系統屬性egd表示熵收集守護進程(entropy gathering daemon)

          方法3:(推薦)

          yum install rng-tools # 安裝rngd服務(熵服務,增大熵池)

          systemctl start rngd # 啟動服務

          1.6 Tomcat管理功能使用

          注意:測試功能,生產環境不要用

          Tomcat管理功能用于對Tomcat自身以及部署在Tomcat上的應用進行管理的web應用。在默認情況下是處于禁用狀態的。如果需要開啟這個功能,就需要配置管理用戶,即配置tomcat-users.xml 文件。

          [root@web03 ~]# vim /application/tomcat/conf/tomcat-users.xml

          ……

          39 <role rolename="manager-gui"/>

          40 <role rolename="admin-gui"/>

          41 <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

          42 </tomcat-users> # 在此行前加入上面三行

          未修改文件前進行訪問

          <role rolename="manager-gui"/>

          <user username="tomcat" password="s3cret" roles="manager-gui"/>

          <role rolename="admin-gui"/>

          <user username="tomcat" password="s3cret" roles="admin-gui"/>

          從而得出上面的配置文件信息。

          1.6.1 在web界面訪問管理界面

          輸入之前配置的賬戶與密碼即可

          1.7 Tomcat主配置文件詳解

          1.7.1 server.xml組件類別

          頂級組件:位于整個配置的頂層,如server。

          容器類組件:可以包含其它組件的組件,如service、engine、host、context。

          連接器組件:連接用戶請求至tomcat,如connector。

          被嵌套類組件:位于一個容器當中,不能包含其他組件,如Valve、logger。

          <server>

          <service>

          <connector />

          <engine>

          <host>

          <context></context>

          </host>

          <host>

          <context></context>

          </host>

          </engine>

          </service>

          </server>

          1.7.2 組件介紹

          1.7.3 server.xml配置文件注釋

          <?xml version='1.0' encoding='utf-8'?>

          <!--

          <Server>元素代表整個容器,是Tomcat實例的頂層元素.由org.apache.catalina.Server接口來定義.它包含一個<Service>元素.并且它不能做為任何元素的子元素.

          port指定Tomcat監聽shutdown命令端口.終止服務器運行時,必須在Tomcat服務器所在的機器上發出shutdown命令.該屬性是必須的.

          shutdown指定終止Tomcat服務器運行時,發給Tomcat服務器的shutdown監聽端口的字符串.該屬性必須設置

          -->

          <Server port="8005" shutdown="SHUTDOWN">

          <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

          <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

          <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

          <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

          <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

          <GlobalNamingResources>

          <Resource name="UserDatabase" auth="Container"

          type="org.apache.catalina.UserDatabase"

          description="User database that can be updated and saved"

          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

          pathname="conf/tomcat-users.xml" />

          </GlobalNamingResources>

          <!--service服務組件-->

          <Service name="Catalina">

          <!-- Connector主要參數說明(見下表) -->

          <Connector port="8080" protocol="HTTP/1.1"

          connectionTimeout="20000"

          redirectPort="8443" />

          <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

          <!--engine,核心容器組件,catalina引擎,負責通過connector接收用戶請求,并處理請求,將請求轉至對應的虛擬主機host

          defaultHost指定缺省的處理請求的主機名,它至少與其中的一個host元素的name屬性值是一樣的

          -->

          <Engine name="Catalina" defaultHost="localhost">

          <!--Realm表示存放用戶名,密碼及role的數據庫-->

          <Realm className="org.apache.catalina.realm.LockOutRealm">

          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

          resourceName="UserDatabase"/>

          </Realm>

          <!-- 詳情常見下表(host參數詳解)-->

          <Host name="localhost" appBase="webapps"

          unpackWARs="true" autoDeploy="true">

          <!-- 詳情常見下表(Context參數說明 )-->

          <Context path="" docBase="" debug=""/>

          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

          prefix="localhost_access_log" suffix=".txt"

          pattern="%h %l %u %t "%r" %s %b" />

          </Host>

          </Engine>

          </Service>

          </Server>

          1.7.4 Connector主要參數說明

          1.7.5 host參數詳解

          1.7.6 Context參數說明

          1.8 WEB站點部署

          上線的代碼有兩種方式:

          第一種方式是直接將程序目錄放在webapps目錄下面,這種方式大家已經明白了,就不多說了。

          第二種方式是使用開發工具將程序打包成war包,然后上傳到webapps目錄下面。

          1.8.1 使用war包部署web站點

          [root@web03 webapps]# pwd

          /application/tomcat/webapps

          [root@web03 webapps]# wget http://10.0.0.1/apache/tomcat/memtest.war

          站點主動解壓部署

          [root@web03 webapps]# ls

          docs examples host-manager logs manager memtest memtest.war ROOT

          瀏覽器訪問:

          http://10.0.0.17:8080//memtest/meminfo.jsp

          1.8.2 自定義默認網站目錄

          上面訪問的網址為 http://10.0.0.3:8080/memtest/meminfo.jsp

          現在想訪問格式為http://10.0.0.3:8080/meminfo.jsp

          方法一

          將meminfo.jsp或其他程序放在tomcat/webapps/ROOT目錄下即可。因為默認網站根目錄為tomcat/webapps/ROOT

          方法二

          [root@web03 ~]# vim /application/tomcat/conf/server.xml +125

          …… #添加上這兩行

          <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

          <Context path="/40team" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

          ……

          修改配置文件后,要重啟服務

          [root@web03 ~]# /application/tomcat/bin/shutdown.sh

          [root@web03 ~]# /application/tomcat/bin/startup.sh

          1.8.3 部署開源站點(jpress)

          jpress官網:http://jpress.io

          下載地址:https://github.com/JpressProjects/jpress

          第一個里程碑:安裝配置數據庫

          yum -y install mariadb-server

          systemctl start mariadb.service

          #配置數據庫

          mysql

          create database jpress DEFAULT CHARACTER SET utf8;

          grant all on jpress.* to jpress@'localhost' identified by '123456';

          exit

          第二個里程碑:jpress站點上線

          [root@web03 webapps]# pwd

          /application/tomcat/webapps

          [root@web03 webapps]# wget http://10.0.0.1/apache/tomcat/jpress-web-newest.war

          第三個里程碑:瀏覽器訪問

          瀏覽器訪問: http://10.0.0.17:8080/jpress-web-newest/install

          填寫數據庫信息

          設置站點名稱等

          安裝完成

          重啟tomcat服務

          [root@web03 ~]# /application/tomcat/bin/shutdown.sh

          [root@web03 ~]# /application/tomcat/bin/startup.sh

          1.9 Tomcat多實例配置

          多虛擬主機:nginx 多個Server標簽(域名,ip,端口) 進程數量固定 master+worker

          多實例(多進程):同一個程序啟動多次,分為兩種情況:

          第一種:一臺機器跑多個站點;

          第二種:一個機器跑一個站點多個實例,配合負載均衡

          1.9.1 復制程序文件

          cd /application/tools/

          tar xf apache-tomcat-8.0.27.tar.gz

          cp -a apache-tomcat-8.0.27 tomcat8_1

          cp -a apache-tomcat-8.0.27 tomcat8_2

          修改端口,以啟動多實例。多實例之間端口不能一致

          sed -i 's#8005#8011#;s#8080#8081#' tomcat8_1/conf/server.xml

          sed -i 's#8005#8012#;s#8080#8082#' tomcat8_2/conf/server.xml

          [root@web03 application]# diff tomcat8_1/conf/server.xml tomcat8_2/conf/server.xml

          22c22

          < <Server port="8011" shutdown="SHUTDOWN">

          ---

          > <Server port="8012" shutdown="SHUTDOWN">

          67c67

          < Define a non-SSL/TLS HTTP/1.1 Connector on port 8081

          ---

          > Define a non-SSL/TLS HTTP/1.1 Connector on port 8082

          69c69

          < <Connector port="8081" protocol="HTTP/1.1"

          ---

          > <Connector port="8082" protocol="HTTP/1.1"

          75c75

          < port="8081" protocol="HTTP/1.1"

          ---

          > port="8082" protocol="HTTP/1.1"

          將配置好的tomcat程序打包,以備之后使用

          tar zcf muti_tomcat8.tar.gz ./tomcat8_1 ./tomcat8_2

          啟動tomcat多實例

          /application/tomcat8_1/bin/startup.sh

          /application/tomcat8_2/bin/startup.sh

          檢查端口是否啟動

          [root@web03 tomcat8_1]# netstat -lntup |grep java

          tcp6 0 0 127.0.0.1:8011 :::* LISTEN 31906/java

          tcp6 0 0 127.0.0.1:8012 :::* LISTEN 31932/java

          tcp6 0 0 :::8080 :::* LISTEN 31812/java

          tcp6 0 0 :::8081 :::* LISTEN 31906/java

          tcp6 0 0 :::8082 :::* LISTEN 31932/java

          tcp6 0 0 127.0.0.1:8005 :::* LISTEN 31812/java

          tcp6 0 0 :::8009 :::* LISTEN 31812/java

          將每個實例的網頁進行區分

          echo 8081 >>/application/tomcat8_1/webapps/ROOT/index.jsp

          echo 8082 >>/application/tomcat8_2/webapps/ROOT/index.jsp

          1.9.2 在瀏覽器訪問,進行測試

          檢查多實例的啟動

          http://10.0.0.17:8082

          http://10.0.0.17:8081

          1.10 tomcat反向代理集群

          1.10.1 負載均衡器說明

          [root@lb01 ~]# cat /etc/redhat-release

          CentOS release 6.9 (Final)

          [root@lb01 ~]# uname -a

          Linux lb01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

          [root@lb01 ~]# getenforce

          Disabled

          [root@lb01 ~]# /etc/init.d/iptables status

          iptables: Firewall is not running.

          負載均衡軟件使用nginx,詳情參照

          http://www.cnblogs.com/clsn/p/7750615.html

          1.10.2 配置負載均衡器

          備份原配置文件

          mv /application/nginx/conf/nginx.conf{,.20171127}

          egrep -v '#|^$' /application/nginx/conf/nginx.conf.default > /application/nginx/conf/nginx.conf

          配置文件內容

          [root@lb01 ~]# cat /application/nginx/conf/nginx.conf

          worker_processes 1;

          events {

          worker_connections 1024;

          }

          http {

          include mime.types;

          default_type application/octet-stream;

          sendfile on;

          keepalive_timeout 65;

          upstream web_pools {

          server 10.0.0.17:8081;

          server 10.0.0.17:8082;

          }

          server {

          listen 80;

          server_name localhost;

          location / {

          root html;

          index index.jsp index.htm;

          proxy_pass http://web_pools;

          }

          error_page 500 502 503 504 /50x.html;

          location=/50x.html {

          root html;

          }

          }

          }

          配置完成后重啟nginx服務

          /application/nginx/sbin/nginx -s stop

          /application/nginx/sbin/nginx

          1.10.3 使用命令進行訪問測試

          使用curl 命令進行測試,tail進行關鍵字提取

          [root@lb01 ~]# curl -s 10.0.0.5|tail -1

          8081

          [root@lb01 ~]# curl -s 10.0.0.5|tail -1

          8082

          使用curl 命令進行測試,awk進行關鍵字提取

          [root@lb01 ~]# curl -s 10.0.0.5|awk 'END{print}'

          8082

          [root@lb01 ~]# curl -s 10.0.0.5|awk 'END{print}'

          8081

          使用curl 命令進行測試,sed進行關鍵字提取

          [root@lb01 ~]# curl -s 10.0.0.5|sed -n '$p'

          8082

          [root@lb01 ~]# curl -s 10.0.0.5|sed -n '$p'

          8081

          1.10.4 在瀏覽器上進行訪問測試

          建議使用google瀏覽器chrome 的隱身模式進行訪問,使用ctrl+f5 進行強制刷新

          1.11 監控tomcat集群狀態

          1.11.1 方法一:開發java監控頁面

          [root@web03 tomcat8_1]# cat /application/tomcat/webapps/memtest/meminfo.jsp

          <%

          Runtime rtm=Runtime.getRuntime();

          long mm=rtm.maxMemory()/1024/1024;

          long tm=rtm.totalMemory()/1024/1024;

          long fm=rtm.freeMemory()/1024/1024;

          out.println("JVM memory detail info :<br>");

          out.println("Max memory:"+mm+"MB"+"<br>");

          out.println("Total memory:"+tm+"MB"+"<br>");

          out.println("Free memory:"+fm+"MB"+"<br>");

          out.println("Available memory can be used is :"+(mm+fm-tm)+"MB"+"<br>");

          %>

          1.11.2 方法二:使用jps命令進行監控

          [root@web03 ~]# jps -lvm

          31906 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8_1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8_1/endorsed -Dcatalina.base=/application/tomcat8_1 -Dcatalina.home=/application/tomcat8_1 -Djava.io.tmpdir=/application/tomcat8_1/temp

          31812 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat/endorsed -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp

          31932 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8_2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8_2/endorsed -Dcatalina.base=/application/tomcat8_2 -Dcatalina.home=/application/tomcat8_2 -Djava.io.tmpdir=/application/tomcat8_2/temp

          32079 sun.tools.jps.Jps -lvm -Denv.class.path=.:/application/jdk/lib:/application/jdk/jre/lib:/application/jdk/lib/tools.jar -Dapplication.home=/application/jdk1.8.0_60 -Xms8m

          1.11.3 Tomcat遠程監控功能

          修改配置文件,開啟遠程監控

          vim /application/tomcat8_1/bin/catalina.sh +97

          CATALINA_OPTS="$CATALINA_OPTS

          -Dcom.sun.management.jmxremote

          -Dcom.sun.management.jmxremote.port=12345

          -Dcom.sun.management.jmxremote.authenticate=false

          -Dcom.sun.management.jmxremote.ssl=false

          -Djava.rmi.server.hostname=10.0.0.17"

          重啟服務,檢查12345端口是否開啟

          /application/tomcat8_1/bin/shutdown.sh

          /application/tomcat8_1/bin/startup.sh

          netstat -tunlp|grep 12345

          檢查端口

          [root@web03 ~]# netstat -tunlp|grep 12345

          tcp6 0 0 :::12345 :::* LISTEN 33158/java

          在windows上監控tomcat

          注意:windwos需要安裝jdk環境!

          查考:http://www.oracle.com/technetwork/java/javase/downloads/index.html

          軟件路徑

          C:\Program Files\Java\jdk1.8.0_31\bin

          jconsole.exe jvisualvm.exe

          jconsole.exe 使用說明

          連接成功即可進行監控,連接的時候注意端口信息。

          jvisualvm.exe使用說明

          輸入ip地址

          主機添加完成,添加JMX監控

          注意添加的時候輸入端口信息。

          添加完成后就能夠多tomcat程序進行監控。

          1.11.4 zabbix監控tomcat程序

          zabbix搭建詳情參考:http://www.cnblogs.com/clsn/p/7885990.html

          服務端安裝配置java監控服務

          [root@m01 ~]# yum install zabbix-java-gateway -y

          查看配置文件

          配置文件路徑:/etc/zabbix/zabbix_java_gateway.conf

          sed -i -e '220a JavaGateway=127.0.0.1' -e '236a StartJavaPollers=5' /etc/zabbix/zabbix_server.conf

          啟動zabbix-java-gateway服務,與zabbix服務

          systemctl start zabbix-java-gateway.service

          systemctl restart zabbix-server.service

          檢查java端口是否開啟

          [root@m01 ~]# netstat -lntup |grep java

          tcp6 0 0 :::10052 :::* LISTEN 72971/java

          檢查java進程是否存在

          [root@m01 ~]# ps -ef |grep [j]ava

          zabbix 72971 1 0 11:29 ? 00:00:00 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-3.0.13.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.timeout=3 -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway

          zabbix 73255 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73256 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73257 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73258 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73259 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000004 sec, idle 5 sec]

          web界面添加

          添加主機

          主機管理模板,注意是JMX模板

          監控完成

          1.11.5 排除tomcat故障步驟

          a. 查看catalina.out

          b. 使用sh show-busy-java-threads.sh腳本進行檢測

          腳本下載地址

          https://files.cnblogs.com/files/clsn/show-busy-java-threads.sh

          1.12 Tomcat安全優化

          1. telnet管理端口保護(強制)

          2. ajp連接端口保護(推薦)

          3. 禁用管理端(強制)

          4. 降權啟動(強制)

          [root@web03 ~]# useradd tomcat

          [root@web03 ~]# cp -a /application/tools/tomcat8_1 /home/tomcat/

          [root@web03 ~]# chown -R tomcat.tomcat /home/tomcat/tomcat8_1/

          [root@web03 ~]# su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat

          Using CATALINA_BASE: /home/tomcat/tomcat8_1

          Using CATALINA_HOME: /home/tomcat/tomcat8_1

          Using CATALINA_TMPDIR: /home/tomcat/tomcat8_1/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /home/tomcat/tomcat8_1/bin/bootstrap.jar:/home/tomcat/tomcat8_1/bin/tomcat-juli.jar

          Tomcat started.

          [root@web03 ~]# ps -ef|grep tomcat

          5.文件列表訪問控制(強制)

          6. 版本信息隱藏(強制)

          7. Server header重寫(推薦)

          8. 訪問限制(可選)

          9. 起停腳本權限回收(推薦)

          10. 訪問日志格式規范(推薦)

          11. 附錄:建議配置及標準執行方案

          1. 配置部分(${ CATALINA_HOME }conf/server.xml)

          <Server port="8527" shutdown=" dangerous">

          <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

          <Connector port="8080" server="webserver"/>

          <!-- Define an AJP 1.3 Connector on port 8528 -->

          <!--Define an accesslog -->

          <Valve className="org.apache.catalina.valves.AccessLogValve"

          directory="logs" prefix="localhost_access_log." suffix=".txt"

          pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/>

          <Connector port="8528" protocol="AJP/1.3" />

          <Context path="" docBase="/home/work/local/tomcat_webapps" debug="0" reloadable="false" crossContext="true"/>

          2. 配置部分(${ CATALINA_HOME }conf/web.xml或者WEB-INF/web.xml)

          <init-param>

          <param-name>listings</param-name>

          <param-value>false</param-value>

          </init-param>

          <error-page>

          <error-code>403</error-code>

          <location>/forbidden.jsp</location>

          </error-page>

          <error-page>

          <error-code>404</error-code>

          <location>/notfound.jsp</location>

          </error-page>

          <error-page>

          <error-code>500</error-code>

          <location>/systembusy.jsp</location>

          </error-page>

          3. 刪除如下tomcat的默認目錄和默認文件

          tomcat/webapps/*

          tomcat/conf/tomcat-user.xml

          4. 去除其他用戶對tomcat 起停腳本的執行權限

          chmod 744 –R tomcat/bin/*

          1.13 Tomcat性能優化

          tomcat性能取決于 內存大小

          上策:優化代碼

          該項需要開發經驗足夠豐富,對開發人員要求較高

          中策:jvm優化機制 垃圾回收機制 把不需要的內存回收

          優化jvm--優化垃圾回收策略

          優化catalina.sh配置文件。在catalina.sh配置文件中添加以下代碼

          # tomcat分配1G內存模板

          JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

          JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms800m -Xmx800m -XX:NewSize=400m -XX:MaxNewSize=400m -XX:PermSize=400m -XX:MaxPermSize=400m"

          # 重啟服務

          su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat

          su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat

          修改之前

          修改之后


          主站蜘蛛池模板: 久久亚洲国产精品一区二区| 国产成人精品亚洲一区| 国产AV午夜精品一区二区入口| 国产福利电影一区二区三区,免费久久久久久久精 | 无码人妻aⅴ一区二区三区| 久久精品国产免费一区| 一区二区三区四区电影视频在线观看| 亚洲中文字幕一区精品自拍 | 天堂va在线高清一区 | 国产在线aaa片一区二区99| 亚洲欧洲无码一区二区三区| 亚洲A∨精品一区二区三区下载| 中文字幕精品一区二区| 欲色aV无码一区二区人妻 | 国产一区二区三区美女| 精品综合一区二区三区| A国产一区二区免费入口| 久久一区不卡中文字幕| 中文字幕在线一区二区在线| 天堂成人一区二区三区| 久久亚洲色一区二区三区| 亚洲A∨无码一区二区三区| 麻豆一区二区免费播放网站| 日韩精品一区二区三区视频| 国产裸体歌舞一区二区| 免费无码A片一区二三区| 国产激情一区二区三区 | 国产成人一区二区三区在线| 精品无人乱码一区二区三区| 福利一区在线视频| 精品一区二区ww| 无码少妇精品一区二区免费动态| 99精品国产高清一区二区麻豆| 国产精品美女一区二区| 国产日韩AV免费无码一区二区| 亚洲综合无码一区二区痴汉| 无码人妻精品一区二| 中文精品一区二区三区四区| 日本免费一区二区久久人人澡| 欧美日韩精品一区二区在线观看| 丝袜无码一区二区三区|