Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
Nginx也是一款服務(wù)器,我們常用它做如:反向代理、負(fù)載均衡、動態(tài)與靜態(tài)資源的分離的工作 反向代理:相對應(yīng)的是正向代理,如果你使用過代理服務(wù)器的話就明白,我們訪問某一個網(wǎng)站并非直接訪問目標(biāo)網(wǎng)站,而是告訴代理服務(wù)器我需要訪問什么目標(biāo)網(wǎng)站,由代理服務(wù)器發(fā)出請求給目標(biāo)網(wǎng)站,將目標(biāo)網(wǎng)站訪問結(jié)果再轉(zhuǎn)發(fā)給你,此時,你是請求代理方。而反向代理是此時代理服務(wù)器做服務(wù)器的代理,我們的訪問請求并非直接訪問到目標(biāo)服務(wù)器上,而是訪問代理服務(wù)器,由代理服務(wù)器決定什么樣的請求以什么樣的方式訪問正式服務(wù)器 負(fù)載均衡:目前大多數(shù)的網(wǎng)站都會采用負(fù)載均衡手段來針對目前用戶的指數(shù)級增長來減少對單點(diǎn)服務(wù)器的負(fù)載壓力,比如目前我們擁有3臺真實(shí)服務(wù)器,我們需要根據(jù)相應(yīng)策略決定什么樣的用戶請求分配到哪個真實(shí)服務(wù)器,比如按照輪詢的方式,用戶請求挨個到達(dá)代理服務(wù)器,此時代理服務(wù)器按照第一個請求轉(zhuǎn)發(fā)至第一臺真實(shí)服務(wù)器,第二個請求轉(zhuǎn)發(fā)到第二個服務(wù)器上,依次類推,這樣可以防止大量的用戶請求全部訪問到同一臺物理機(jī)上,單點(diǎn)物理機(jī)的性能始終有限的,當(dāng)然這可能對服務(wù)器數(shù)據(jù)訪問時候造成事務(wù)性的失效,在Web方面可能造成Session訪問的問題,這不在本文討論方面內(nèi) 動態(tài)靜態(tài)資源分離:最方便列舉就是Java的JSP和靜態(tài)資源如:.js/.css/.html/.png方面的資源分離,之前開發(fā)web方面的程序時候我們習(xí)慣將html、css等資源文件也放置于Tomcat之中,用戶訪問后tomcat需要將請求的這些靜態(tài)資源文件一并返回給用戶,再者如果有多臺同業(yè)務(wù)邏輯的tomcat服務(wù)器的話,同樣的資源還需要在每個服務(wù)器上放一份,同時也增加了tomcat服務(wù)器的網(wǎng)絡(luò)IO,十分不合算的,如果我們只講JSP之類的請求交給tomcat,而代理服務(wù)器上存放靜態(tài)資源,當(dāng)用戶的請求非動態(tài)資源的時候,我們完全可以將代理服務(wù)器的靜態(tài)資源直接返回給用戶,而不去增大Tomcat的壓力,tomcat只需要負(fù)責(zé)邏輯處理和動態(tài)資源的加載就可以了 基于上述的Nginx優(yōu)勢,決定搭建一下Nginx+Tomcat的組合來進(jìn)行測試,包括參數(shù)傳遞,post、get傳遞參數(shù)是否有影響,還有Nginx的工作模式master和worker的工作方式進(jìn)行一些淺薄的總結(jié) 1 2 3 4 5 6 7 8 9 10
安裝部分這里就不在細(xì)說了,網(wǎng)上的教程很多,我們直接從配置文件開始吧 1 2
#user nobody; #這里是核心worker數(shù),一般設(shè)置為與cpu核心數(shù)相同的數(shù)目,避免進(jìn)程切換造成的上下文切換耗費(fèi)資源,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; #設(shè)定通過nginx上傳文件的大小 client_max_body_size 300m; #使用sendfile函數(shù)在兩個文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作,傳送),從而避免了內(nèi)核緩沖區(qū)數(shù)據(jù)和用戶緩沖區(qū)數(shù)據(jù)之間的拷貝,操作效率很高,被稱之為零拷貝。 sendfile on; #tcp_nopush on; #keepalive_timeout 0; #連接活躍時間 keepalive_timeout 65; #使用壓縮數(shù)據(jù)減少IO量,但是在不支持?jǐn)?shù)據(jù)解壓瀏覽器可能產(chǎn)生亂碼 #gzip on; #靜態(tài)服務(wù)器組 #設(shè)定靜態(tài)資源服務(wù)器訪問接口 upstream static.zh-jieli.com { server localhost:808 weight=1; } #動態(tài)服務(wù)器組 upstream zh-jieli.com { #設(shè)置Hash輪詢規(guī)則 #ip_hash; #weight: server ip:port weight=10 #默認(rèn) 輪詢 #fair:按照后端服務(wù)器的響應(yīng)時間來分配 #url_hash:按照url規(guī)則進(jìn)行分配,使得固定的請求分配到固定的服務(wù)器上 server localhost:8080; server localhost:8081; } server{ listen 808; server_name static; location / { } location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) { #所有靜態(tài)文件直接讀取硬盤內(nèi)容:讀取的靜態(tài)資源存放位置 root /apache-tomcat-8.5.24/webapps/ROOT ; #資源是否進(jìn)行緩存與緩存時間 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; # 所有靜態(tài)文件直接讀取硬盤 root /apache-tomcat-8.5.24/webapps/ROOT; expires 30d; #緩存30天 } #其他頁面反向代理到tomcat容器 location ^~ /tomcat { index index; # proxy_pass http://localhost:8080/; #設(shè)定代理服務(wù)器組 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工作時當(dāng)http請求到來時,由nginx針對nginx.conf配置好的規(guī)則,對location進(jìn)行正則匹配,匹配到相應(yīng)的正則,進(jìn)行l(wèi)ocation內(nèi)部的處理 關(guān)于Nginx的location配置附上一篇博客,很nice http://seanlook.com/2015/05/17/nginx-location-rewrite/ 里面很詳細(xì)列出了各種要求的location匹配規(guī)則,值得注意的一點(diǎn)是: location匹配遵循最長原則,即滿足了之前的匹配規(guī)則后,除了遇見^會終止向下繼續(xù)匹配,其他情況會依次向下搜索,知道找到合適的location匹配規(guī)則然后進(jìn)行處理 Nginx在模塊功能上分三個模塊: Handlers(處理器模塊)。此類模塊直接處理請求,并進(jìn)行輸出內(nèi)容和修改headers信息等操作。Handlers處理器模塊一般只能有一個。 Filters (過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由Nginx輸出。 Proxies (代理類模塊)。此類模塊是Nginx的HTTP Upstream之類的模塊,這些模塊主要與后端一些服務(wù)比如FastCGI等進(jìn)行交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能。 因?yàn)槭菧y試,所以我的兩個tomcat都安裝到了同一臺本地機(jī)器上 生產(chǎn)環(huán)境中根據(jù)需要進(jìn)行配置相應(yīng)的IP就好了 本地寫好相應(yīng)的測試代碼+log4j將信息日志打到相應(yīng)的位置用來觀察參數(shù)是否傳遞過來 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) { //用來記錄獲取的參數(shù)name,可以通過查看日志進(jìn)行確認(rèn) 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程序,做相應(yīng)的測試,將項目打成war包后上傳至Linux服務(wù)器,移動到tomcat/webapps中,tomcat進(jìn)行熱部署 先測試當(dāng)前的tomcat是否能正常運(yùn)行,由于沒有做區(qū)別頁面,就直接看日志來判斷了 1 2 3
如圖:以輪詢方式進(jìn)行訪問8080和8081監(jiān)聽的tomcat 上述方式是get請求進(jìn)行的測試,我們來試試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 測試結(jié)果依舊可以正常接收參數(shù),這里就不貼圖了 1 2
現(xiàn)在試試直接訪問 1 2 http://ip/tomcat 1 我們會直接跳轉(zhuǎn)到tomcat的主頁面,如果檢索tomcat.png的話 1 2 http://ip/tomcat/tomcat.png 1 可以直接檢索到tomcat.png,它是來自tomcat服務(wù)器的資源,如果需要檢索nginx的靜態(tài)資源,可以使用 1 2 http://ip/tomcat.png 1 這樣我們的資源就來自于nginx.conf文件中配置的關(guān)于靜態(tài)資源的訪問路徑了,為了證明此事資源來自于nginx,我嘗試將8080端口的tomcat/webapps/ROOT/tomcat.png更名為tomcat1.png,然后嘗試訪問http://ip/tomcat1.png訪問成功,這時候如果刷新http://ip/tomcat/訪問tomcat主頁的時候會發(fā)現(xiàn)圖標(biāo)會在出現(xiàn)和不出現(xiàn)之間輪轉(zhuǎn),原因就是這里請求了tomcat服務(wù)器本身去拿資源,tomcat:8080的圖片名被更改,如果代理訪問的服務(wù)器正好是tomcat:8080的話,它是找不到tomcat.png的,當(dāng)然輪轉(zhuǎn)到tomcat:8081時候,圖片還是會出現(xiàn)滴 1 2
如圖nginx啟動后會有兩個進(jìn)程 如果你將nginx.conf的 1 2 3 worker_processes 1;更改為worker_processes 2; 1 那么出現(xiàn)的就是 1 2
那我們來說說master和worker進(jìn)程分別的是干什么的,從pid來看,matser的父進(jìn)程是init進(jìn)程,而worker的父進(jìn)程都是master,這里就很有意思了,那nginx這兩個進(jìn)程都到底是干嘛的嘞??? 感謝baidu與google的強(qiáng)大,對于疑問的解釋很清楚 原地址:http://blog.csdn.net/hguisu/article/details/8930668 感興趣的同學(xué)可以看一看,這里只簡單總結(jié)一下 1 2 3 4 5 6 7
主要用來管理worker進(jìn)程,包含:接收來自外界的信號,向各worker進(jìn)程發(fā)送信號,監(jiān)控worker進(jìn)程的運(yùn)行狀態(tài),當(dāng)worker進(jìn)程退出后(異常情況下),會自動重新啟動新的worker進(jìn)程。 master的平滑重啟很有意思,master只負(fù)責(zé)接收外界信號,那么當(dāng)我們更改了nginx.conf文件需要重新啟動nginx時候怎么辦????只需要通過kill向master進(jìn)程發(fā)送信號就行了。比如kill -HUP pid,這時候master并不會干掉自己所有的worker然后自殺,而是重新加載nginx.conf后,重新啟動一批worker,在這之后的請求全部由新的worker進(jìn)行處理,而老的worker也并不是立即終止,而是在運(yùn)行完當(dāng)前的請求后,被終止掉,接下來的請求就全部交給新的worker了,當(dāng)然這個方式后來被改成了 1 2 3 nginx -s reload 1 這個命令重新加載配置和上面的略有不一樣,其會新啟動一個nginx然后向Master發(fā)送信號,當(dāng)然接下來就和上面的過程一致了 1 2
ntroduction
部署是指將Web應(yīng)用程序(第三方WAR或您自己的自定義Web應(yīng)用程序)安裝到Tomcat服務(wù)器的過程。
Web應(yīng)用程序部署可以在Tomcat服務(wù)器中以多種方式完成。
Tomcat Manager是一個Web應(yīng)用程序,可以通過HTML GUI交互使用,或以編程方式(通過基于URL的API)來部署和管理Web應(yīng)用程序。
有許多方法可以執(zhí)行依賴Manager Web應(yīng)用程序的部署。 Apache Tomcat為Apache Ant構(gòu)建工具提供任務(wù)。Apache Tomcat Maven Plugin project提供與Apache Maven的集成。還有一個名為Client Deployer的工具,可以從命令行使用它,并提供其他功能,例如編譯和驗(yàn)證Web應(yīng)用程序以及將Web應(yīng)用程序打包到Web應(yīng)用程序資源(WAR)文件中。
Installation
靜態(tài)部署Web應(yīng)用程序不需要安裝,因?yàn)門omcat提供了開箱即用的功能。使用Tomcat Manager的部署功能也不需要任何安裝,盡管需要進(jìn)行一些配置,詳細(xì)說明在下一節(jié)。但是,如果您希望使用Tomcat客戶端部署程序(TCD),則需要安裝。
TCD未與Tomcat核心發(fā)行版一起打包,因此必須從“下載”區(qū)域單獨(dú)下載。下載通常是標(biāo)記的apache-tomcat-9.0.x-deployer.
TCD需要先安裝Apache Ant 1.6.2+和Java。您需要設(shè)置指向Ant安裝根目錄的ANT_HOME環(huán)境值,以及指向Java安裝根目錄的JAVA_HOME值。此外,您應(yīng)該確保Ant的ant命令,以及Java javac編譯器命令可以在shell中運(yùn)行。
A word on Contexts
在談?wù)揥eb應(yīng)用程序的部署時,Context這個概念需要被理解。 Context在Tomcat中被稱為Web應(yīng)用程序。
為了在Tomcat中配置一個Context ,一個Context Descriptor(Context描述)是必須的。Context Descriptor只是一個XML文件,它包含上下文的Tomcat相關(guān)配置,例如命名資源或會話管理器配置。在早期版本的Tomcat中,Context Descriptor配置的內(nèi)容通常存儲在Tomcat的主配置文件中server.xml。但現(xiàn)在不鼓勵這種做法(盡管目前仍然有效)。
Context Descriptor不僅幫助Tomcat知道如何配置上下文,而且其他工具(如Tomcat Manager和TCD)通常使用這些上下文描述符來正確執(zhí)行其角色。
Context Descriptor的位置是:
(1)中的文件名為[webappname] .xml,但(2)中的文件名為context.xml。如果沒有為Context提供Context Descriptor,Tomcat將使用默認(rèn)值配置Context。
在Tomcat啟動時部署
如果您對使用Tomcat Manager或TCD不感興趣,那么您需要將Web應(yīng)用程序靜態(tài)部署到Tomcat,然后啟動Tomcat,此類部署的位置稱為appBase,它對于每個主機(jī)是指定的。你要么復(fù)制一個所謂的exploded web application到此位置,或壓縮的Web應(yīng)用程序資源.WAR文件。
還有當(dāng)Host的deployOnStartup屬性為“true”時,在Tomcat啟動時應(yīng)用才會部署到appBase指定的位置。
在這種情況下,Tomcat啟動時將發(fā)生以下部署順序:
在正在運(yùn)行的Tomcat服務(wù)器上部署
可以將Web應(yīng)用程序部署到正在運(yùn)行的Tomcat服務(wù)器。
如果 Host的 autoDeploy屬性為“true”,主機(jī)將嘗試根據(jù)需要動態(tài)部署和更新Web應(yīng)用程序,例如,如果將新的.WAR放入appBase。為此,主機(jī)需要啟用后臺處理,這是默認(rèn)配置。
autoDeploy設(shè)置為“true”,運(yùn)行Tomcat允許:
請注意,也可以在加載程序中配置Web應(yīng)用程序重新加載,在這種情況下,將跟蹤已加載的類以進(jìn)行更改。
使用客戶端部署程序包進(jìn)行部署
最后,可以使用Tomcat Client Deployer實(shí)現(xiàn)Web應(yīng)用程序的部署。這是一個包,可用于驗(yàn)證,編譯,壓縮到.WAR,以及將Web應(yīng)用程序部署到生產(chǎn)或開發(fā)Tomcat服務(wù)器。應(yīng)該注意,此功能使用Tomcat Manager,因此目標(biāo)Tomcat服務(wù)器應(yīng)該運(yùn)行。
假設(shè)用戶熟悉Apache Ant以使用TCD。 Apache Ant是一個腳本化的構(gòu)建工具。 TCD預(yù)先打包了要使用的構(gòu)建腳本。只需要對Apache Ant有一定的了解(本頁前面列出的安裝,熟悉使用操作系統(tǒng)命令shell和配置環(huán)境變量)。
TCD包括Ant任務(wù),部署前用于JSP編譯的Jasper頁面編譯器,以及驗(yàn)證Web應(yīng)用程序上下文描述符的任務(wù)。驗(yàn)證器任務(wù)(類org.apache.catalina.ant.ValidatorTask)僅允許一個參數(shù):解壓的Web應(yīng)用程序的基本路徑。
TCD使用解壓的Web應(yīng)用程序作為輸入(請參閱下面使用的屬性列表)。以部署程序編程部署的Web應(yīng)用程序可以包括上下文描述符/META-INF/context.xml.
TCD包含一個即用型Ant腳本,具有以下目標(biāo):
為了配置部署,請創(chuàng)建一個名為的文件deployer.properties在TCD安裝目錄root中。在此文件中,每行添加以下name=value對:
此外,您需要確保已為目標(biāo)Tomcat Manager(TCD使用)設(shè)置了用戶,否則TCD將不會使用Tomcat Manager進(jìn)行身份驗(yàn)證,部署將失敗。要執(zhí)行此操作,請參閱Tomcat Manager頁面。
Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發(fā)而成。
Tomcat服務(wù)器是一個免費(fèi)的開放源代碼的Web應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP程序的首選。
Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務(wù)器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨(dú)立的Servlet容器是Tomcat的默認(rèn)模式。不過,Tomcat處理靜態(tài)HTML的能力不如Nginx/Apache服務(wù)器。
JDK是 Java 語言的軟件開發(fā)工具包,主要用于移動設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序。JDK是整個java開發(fā)的核心,它包含了JAVA的運(yùn)行環(huán)境(JVM+Java系統(tǒng)類庫)和JAVA工具。
JDK包含了一批用于Java開發(fā)的組件,其中包括:
javac:編譯器,將后綴名為.java的源代碼編譯成后綴名為“.class”的字節(jié)碼
java:運(yùn)行工具,運(yùn)行.class的字節(jié)碼
jar:打包工具,將相關(guān)的類文件打包成一個文件
javadoc:文檔生成器,從源碼注釋中提取文檔,注釋需匹配規(guī)范
jdb debugger:調(diào)試工具
jps:顯示當(dāng)前java程序運(yùn)行的進(jìn)程狀態(tài)
javap:反編譯程序
appletviewer:運(yùn)行和調(diào)試applet程序的工具,不需要使用瀏覽器
javah:從Java類生成C頭文件和C源文件。這些文件提供了連接膠合,使Java和C代碼可進(jìn)行交互。
javaws:運(yùn)行JNLP程序
extcheck:一個檢測jar包沖突的工具
apt:注釋處理工具
jhat:java堆分析工具
jstack:棧跟蹤程序
jstat:JVM檢測統(tǒng)計工具
jstatd:jstat守護(hù)進(jìn)程
jinfo:獲取正在運(yùn)行或崩潰的java程序配置信息
jmap:獲取java進(jìn)程內(nèi)存映射信息
idlj:IDL-to-Java編譯器。將IDL語言轉(zhuǎn)化為java文件
policytool:一個GUI的策略文件創(chuàng)建和管理工具
jrunscript:命令行腳本運(yùn)行
JDK中還包括完整的JRE(Java Runtime Environment),Java運(yùn)行環(huán)境,也被稱為private runtime。包括了用于產(chǎn)品環(huán)境的各種庫類,如基礎(chǔ)類庫rt.jar,以及給開發(fā)人員使用的補(bǔ)充庫,如國際化與本地化的類庫、IDL庫等等。
JDK中還包括各種樣例程序,用以展示Java API中的各部分。
安裝時候選擇tomcat軟件版本要與程序開發(fā)使用的版本一致。jdk版本要進(jìn)行與tomcat保持一致。
[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)
命令集:
tar xf jdk-8u60-linux-x64.tar.gz -C /application/
ln -s /application/jdk1.8.0_60 /application/jdk
# 設(shè)置環(huán)境變量
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)
命令集:
tar xf apache-tomcat-8.0.27.tar.gz -C /application/
ln -s /application/apache-tomcat-8.0.27 /application/tomcat
# 設(shè)置環(huán)境變量
echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile
source /etc/profile
# 注意授權(quán),統(tǒng)一權(quán)限
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
[root@web03 ~]# cd /application/tomcat/
[root@web03 tomcat]# tree -L 1
.
├── bin #存放tomcat管理腳本
├── conf # tomcat 配置文件存放目錄
├── lib # web應(yīng)用調(diào)用的jar包存放路徑
├── LICENSE
├── logs # tomcat 日志存放目錄,catalina.out 為主要輸出日志
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp # 存放臨時文件
├── webapps # web程序存放目錄
└── work # 存放編譯產(chǎn)生的.java 與 .class文件
7 directories, 4 files
[root@web03 tomcat]# cd webapps/
[root@web03 webapps]# tree -L 1
.
├── docs # tomcat 幫助文檔
├── examples # web應(yīng)用實(shí)例
├── host-manager # 主機(jī)管理
├── manager # 管理
└── ROOT # 默認(rèn)站點(diǎn)根目錄
5 directories, 0 files
[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
# 啟動程序/application/tomcat/bin/startup.sh
# 關(guān)閉程序/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相關(guān)的,服務(wù)啟動都是java命名的進(jìn)程
http://10.0.0.17:8080/
[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
發(fā)現(xiàn)啟動時間較長,其中有一項的啟動時間占據(jù)了絕大多數(shù)
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
發(fā)現(xiàn)耗時在這里:是session引起的隨機(jī)數(shù)問題導(dǎo)致的。Tocmat的Session ID是通過SHA1算法計算得到的,計算Session ID的時候必須有一個密鑰。為了提高安全性Tomcat在啟動的時候會通過隨機(jī)生成一個密鑰。
Tomcat啟動慢主要原因是生成隨機(jī)數(shù)的時候卡住了,導(dǎo)致tomcat啟動不了。
是否有足夠的熵來用于產(chǎn)生隨機(jī)數(shù),可以通過如下命令來查看
[root@web03 ~]# cat /proc/sys/kernel/random/entropy_avail
6
為了加速/dev/random提供隨機(jī)數(shù)的速度,你可以通過操作設(shè)備的外設(shè),讓其產(chǎn)生大量的中斷,網(wǎng)絡(luò)傳輸數(shù)據(jù),按鍵,移動鼠標(biāo),在命令行敲幾個不同的命令,俗稱聚氣。
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
這個系統(tǒng)屬性egd表示熵收集守護(hù)進(jìn)程(entropy gathering daemon)
方法3:(推薦)
yum install rng-tools # 安裝rngd服務(wù)(熵服務(wù),增大熵池)
systemctl start rngd # 啟動服務(wù)
注意:測試功能,生產(chǎn)環(huán)境不要用
Tomcat管理功能用于對Tomcat自身以及部署在Tomcat上的應(yīng)用進(jìn)行管理的web應(yīng)用。在默認(rèn)情況下是處于禁用狀態(tài)的。如果需要開啟這個功能,就需要配置管理用戶,即配置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> # 在此行前加入上面三行
未修改文件前進(jìn)行訪問
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="s3cret" roles="admin-gui"/>
從而得出上面的配置文件信息。
輸入之前配置的賬戶與密碼即可
頂級組件:位于整個配置的頂層,如server。
容器類組件:可以包含其它組件的組件,如service、engine、host、context。
連接器組件:連接用戶請求至tomcat,如connector。
被嵌套類組件:位于一個容器當(dāng)中,不能包含其他組件,如Valve、logger。
<server>
<service>
<connector />
<engine>
<host>
<context></context>
</host>
<host>
<context></context>
</host>
</engine>
</service>
</server>
<?xml version='1.0' encoding='utf-8'?>
<!--
<Server>元素代表整個容器,是Tomcat實(shí)例的頂層元素.由org.apache.catalina.Server接口來定義.它包含一個<Service>元素.并且它不能做為任何元素的子元素.
port指定Tomcat監(jiān)聽shutdown命令端口.終止服務(wù)器運(yùn)行時,必須在Tomcat服務(wù)器所在的機(jī)器上發(fā)出shutdown命令.該屬性是必須的.
shutdown指定終止Tomcat服務(wù)器運(yùn)行時,發(fā)給Tomcat服務(wù)器的shutdown監(jiān)聽端口的字符串.該屬性必須設(shè)置
-->
<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服務(wù)組件-->
<Service name="Catalina">
<!-- Connector主要參數(shù)說明(見下表) -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!--engine,核心容器組件,catalina引擎,負(fù)責(zé)通過connector接收用戶請求,并處理請求,將請求轉(zhuǎn)至對應(yīng)的虛擬主機(jī)host
defaultHost指定缺省的處理請求的主機(jī)名,它至少與其中的一個host元素的name屬性值是一樣的
-->
<Engine name="Catalina" defaultHost="localhost">
<!--Realm表示存放用戶名,密碼及role的數(shù)據(jù)庫-->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!-- 詳情常見下表(host參數(shù)詳解)-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 詳情常見下表(Context參數(shù)說明 )-->
<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>
上線的代碼有兩種方式:
第一種方式是直接將程序目錄放在webapps目錄下面,這種方式大家已經(jīng)明白了,就不多說了。
第二種方式是使用開發(fā)工具將程序打包成war包,然后上傳到webapps目錄下面。
[root@web03 webapps]# pwd
/application/tomcat/webapps
[root@web03 webapps]# wget http://10.0.0.1/apache/tomcat/memtest.war
站點(diǎn)主動解壓部署
[root@web03 webapps]# ls
docs examples host-manager logs manager memtest memtest.war ROOT
瀏覽器訪問:
http://10.0.0.17:8080//memtest/meminfo.jsp
上面訪問的網(wǎng)址為 http://10.0.0.3:8080/memtest/meminfo.jsp
現(xiàn)在想訪問格式為http://10.0.0.3:8080/meminfo.jsp
方法一
將meminfo.jsp或其他程序放在tomcat/webapps/ROOT目錄下即可。因?yàn)槟J(rèn)網(wǎng)站根目錄為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"/>
……
修改配置文件后,要重啟服務(wù)
[root@web03 ~]# /application/tomcat/bin/shutdown.sh
[root@web03 ~]# /application/tomcat/bin/startup.sh
jpress官網(wǎng):http://jpress.io
下載地址:https://github.com/JpressProjects/jpress
第一個里程碑:安裝配置數(shù)據(jù)庫
yum -y install mariadb-server
systemctl start mariadb.service
#配置數(shù)據(jù)庫
mysql
create database jpress DEFAULT CHARACTER SET utf8;
grant all on jpress.* to jpress@'localhost' identified by '123456';
exit
第二個里程碑:jpress站點(diǎn)上線
[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
填寫數(shù)據(jù)庫信息
設(shè)置站點(diǎn)名稱等
安裝完成
重啟tomcat服務(wù)
[root@web03 ~]# /application/tomcat/bin/shutdown.sh
[root@web03 ~]# /application/tomcat/bin/startup.sh
多虛擬主機(jī):nginx 多個Server標(biāo)簽(域名,ip,端口) 進(jìn)程數(shù)量固定 master+worker
多實(shí)例(多進(jìn)程):同一個程序啟動多次,分為兩種情況:
第一種:一臺機(jī)器跑多個站點(diǎn);
第二種:一個機(jī)器跑一個站點(diǎn)多個實(shí)例,配合負(fù)載均衡
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
修改端口,以啟動多實(shí)例。多實(shí)例之間端口不能一致
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多實(shí)例
/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
將每個實(shí)例的網(wǎng)頁進(jìn)行區(qū)分
echo 8081 >>/application/tomcat8_1/webapps/ROOT/index.jsp
echo 8082 >>/application/tomcat8_2/webapps/ROOT/index.jsp
檢查多實(shí)例的啟動
http://10.0.0.17:8082
http://10.0.0.17:8081
[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.
負(fù)載均衡軟件使用nginx,詳情參照
http://www.cnblogs.com/clsn/p/7750615.html
備份原配置文件
mv /application/nginx/conf/nginx.conf{,.20171127}
egrep -v '#|^$' /application/nginx/conf/nginx.conf.default > /application/nginx/conf/nginx.conf
配置文件內(nèi)容
[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服務(wù)
/application/nginx/sbin/nginx -s stop
/application/nginx/sbin/nginx
使用curl 命令進(jìn)行測試,tail進(jìn)行關(guān)鍵字提取
[root@lb01 ~]# curl -s 10.0.0.5|tail -1
8081
[root@lb01 ~]# curl -s 10.0.0.5|tail -1
8082
使用curl 命令進(jìn)行測試,awk進(jìn)行關(guān)鍵字提取
[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 命令進(jìn)行測試,sed進(jìn)行關(guān)鍵字提取
[root@lb01 ~]# curl -s 10.0.0.5|sed -n '$p'
8082
[root@lb01 ~]# curl -s 10.0.0.5|sed -n '$p'
8081
建議使用google瀏覽器chrome 的隱身模式進(jìn)行訪問,使用ctrl+f5 進(jìn)行強(qiáng)制刷新
[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>");
%>
[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
修改配置文件,開啟遠(yuǎn)程監(jiān)控
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"
重啟服務(wù),檢查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上監(jiān)控tomcat
注意:windwos需要安裝jdk環(huán)境!
查考: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 使用說明
連接成功即可進(jìn)行監(jiān)控,連接的時候注意端口信息。
jvisualvm.exe使用說明
輸入ip地址
主機(jī)添加完成,添加JMX監(jiān)控
注意添加的時候輸入端口信息。
添加完成后就能夠多tomcat程序進(jìn)行監(jiān)控。
zabbix搭建詳情參考:http://www.cnblogs.com/clsn/p/7885990.html
服務(wù)端安裝配置java監(jiān)控服務(wù)
[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服務(wù),與zabbix服務(wù)
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進(jìn)程是否存在
[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界面添加
添加主機(jī)
主機(jī)管理模板,注意是JMX模板
監(jiān)控完成
a. 查看catalina.out
b. 使用sh show-busy-java-threads.sh腳本進(jìn)行檢測
腳本下載地址
https://files.cnblogs.com/files/clsn/show-busy-java-threads.sh
[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
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的默認(rèn)目錄和默認(rèn)文件
tomcat/webapps/*
tomcat/conf/tomcat-user.xml
4. 去除其他用戶對tomcat 起停腳本的執(zhí)行權(quán)限
chmod 744 –R tomcat/bin/*
tomcat性能取決于 內(nèi)存大小
上策:優(yōu)化代碼
該項需要開發(fā)經(jīng)驗(yàn)足夠豐富,對開發(fā)人員要求較高
中策:jvm優(yōu)化機(jī)制 垃圾回收機(jī)制 把不需要的內(nèi)存回收
優(yōu)化jvm--優(yōu)化垃圾回收策略
優(yōu)化catalina.sh配置文件。在catalina.sh配置文件中添加以下代碼
# tomcat分配1G內(nèi)存模板
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"
# 重啟服務(wù)
su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat
su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat
修改之前
修改之后
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。