Tomcat服務器是一個免費的開放源代碼的Web應用服務器,
在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP網頁的首選。 Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務器同樣,
具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,
獨立的Servlet容器是Tomcat的默認模式。
不過,Tomcat處理靜態HTML的能力不如Nginx/Apache服務器。 目前Tomcat最新版本爲9.0。Java容器還有resin、weblogic等。 Tomcat官網:http://tomcat.apache.org/
常見的JAVA應用架構模型html
tomcat處理JSP動態,還須要nginx處理靜態的,要動靜分離java
JVM是tomcat中的核心mysql
JVM是Java Virtual Machine(Java虛擬機)的縮寫。實現程序可移植linux
只要有JVM,就能夠運行java程序,而JVM能夠在任何系統運行
Java的特性:一次編譯,處處運行
類比Vmware WorkStation的Linux系統
JDK(Java 語言的軟件開發工具,包含JVM)種類:nginx
從CentOS7模板機全新克隆2臺新主機 第1臺:IP規劃爲10.0.0.17/172.16.1.17,主機名爲web03 第2臺:IP規劃爲10.0.0.18/172.16.1.18,主機名爲web04 準備好lb01(CentOS6),須要其上的nginx反向代理功能 建立目錄/server/tools
將apsche-comcat和jdk上傳到web服務器中/server/tools
注:jdk和Tomcat的版本對運維來講沒什麼區別,安裝方法高度一致。
下載軟件web
mkdir -p /server/tools cd /server/tools 下載comcat wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz
下載jdk https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
安裝JDKsql
建立目錄/application
重要提示:全部涉及到java應用都須要安裝 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 # 讓環境變量生效 java -version # 查看是否是安裝好了
# 注意:用echo想文件中添加多行的時候忙不解析內容中的$ 要使擁‘EOF,上面也能夠用這種方法
安裝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
# 有一個坑,咱們正常解壓出來的文件是屬於root的,可是有的時候會顯示成數字,表示用戶不存在 chown -R root.root /application/jdk/ /application/tomcat/ /application/tomcat/bin/version.sh # 顯示版本和系統配置
Tomcat目錄結構說明apache
[root@web03 tools]# cd /application/tomcat/ [root@web03 tomcat]# tree -L 1 . ├── bin #命令 startup.sh shutdown.sh catalina.sh(核心) ├── conf # server.xml(主配置文件) tomcat-users.xml(配置外部頁面管理tomcat) ├── lib 庫文件,插件和功能 ├── LICENSE ├── logs # 日誌目錄 catalina.out tomcat實時日誌 ├── NOTICE ├── RELEASE-NOTES ├── RUNNING.txt ├── temp ├── webapps # 站點目錄 └── work 工做目錄 7 directories, 4 files
目錄中的文件中的bat是windows中用的,sh是Linux中用的vim
啓動和關閉tomcat
/application/tomcat/bin/startup.sh /application/tomcat/bin/shutdown.sh
啓動後,能夠查看日誌
tail -f /application/tomcat/logs/catalina.out netstat -tunlp|grep java 不要輸成tomcat 在瀏覽器中輸入http://10.0.0.17:8080/
# 關閉的時候,要檢查端口和進程都沒有了,纔是真的關閉了
# 不然在從新啓動的時候,會啓動幾個同樣的進程,會報錯
ss -lntup|grep jave
ps -ef |grep java
經過md5 和 diff 對比catalina.20xx-xx-xx 和 catalina.out 發現這兩個日誌中的內容是同樣的
查看日誌,讀懂日誌 /application/tomcat/logs catalina.out # 實時記錄tomcat運行信息,文件會愈來愈大,定時清空 catalina.時間.log # catalina.out文件天天的日誌切割文件 # 每一個站點訪問日誌 host-manager.時間.log 管理主機操做日誌 localhost_access_log.時間.txt 訪問日誌 localhost.時間.log 訪問日誌 manager.時間.log 管理日誌
查看實時日誌,發現緣由是生成隨機數的時候卡住了,致使tomcat啓動慢。 是否有足夠的熵來用於產生隨機數,能夠經過以下命令來查看 [root@oldboy tools]# cat /proc/sys/kernel/random/entropy_avail 7 爲了加速/dev/random提供隨機數的速度,你能夠經過操做設備的外設,
讓其產生大量的中斷(如網絡傳輸數據,按鍵,移動鼠標,在命令行敲幾個不一樣的命令,俗稱聚氣。 cat /dev/random 會消耗能量 yum install rng-tools # 安裝rngd服務(熵服務,增大熵池) systemctl start rngd # 啓動服務
生產環境不要開啓這個功能
[root@web03 webapps]# tail -4 /application/tomcat/conf/tomcat-users.xml
到文件最後添加下面內容
<role rolename="manager-gui"/> <role rolename="admin-gui"/>
<role rolename="host-gui"> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui,host-gui"/> </tomcat-users> /application/tomcat/bin/shutdown.sh
ss -lntup|grep jave
ps -ef |grep java
/application/tomcat/bin/startup.sh
在web頁面中點擊管理按鈕,輸入帳號密碼,默認都是tomcat
相似wordpess博客站點 環境:Linux Tomcat JDK MySQL(Mariadb) 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'; grant all on jpress.* to jpress@'172.16.1.%' identified by '123456';
flush privileges;
# 能夠鏈接另外一臺的mysql,只須要有命令文件便可,沒有能夠推一個或者拉一個過來
# 是爲了不重複安裝
[root@web04 ~]# mysql -ujpress -p123456 -h 172.16.1.17
上傳jpress-web-newest.war到/application/tomcat/webapps目錄,過一會自動節解壓了
這是自動部署的功能,能夠在日誌中看到信息
http://10.0.0.17:8080/jpress-web-newest/ 網頁安裝
跟着嚮導走,由於沒有啓動數據庫服務器,暫時就使用本地服務器了
jpress不會自動重啓,須要手動重啓tomcat
[root@web03 webapps]# /application/tomcat/bin/shutdown.sh [root@web03 webapps]# ss -lntup|grep java [root@web03 webapps]# ps -ef |grep java #確保沒有殘留的進程,有就殺掉pkill java #從新啓動 [root@web03 webapps]# /application/tomcat/bin/startup.sh #瀏覽器顯示博客頁面,部署成功 http://10.0.0.17:8080/jpress-web-newest/admin/login須要輸入admin才能登錄 # 輸入剛剛設置的帳號密碼,登錄,就能夠發佈文章了
文件位置/application/tomcat/conf/server.xml
<Server port="8005" shutdown="SHUTDOWN"> # 向8005端口發送SHUTDOWN 就關閉了tomcat <Connector port="8080" protocol="HTTP/1.1"
# 默認的訪問端口, connectionTimeout="20000" 單位是毫秒 redirectPort="8443" /> 和http配置有關 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
# 用來和apache通訊 ,咱們後面用nginx,能夠不用管
# Host中的內容 就是虛擬主機
<Host name="localhost" appBase="webapps"
149 unpackWARs="true" autoDeploy="true">
150
151 <!-- SingleSignOn valve, share authentication between web applications
152 Documentation at: /docs/config/valve.html -->
153 <!--
154 <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
155 -->
156
157 <!-- Access log processes all example.
158 Documentation at: /docs/config/valve.html
159 Note: The pattern used is equivalent to using pattern="common" -->
160 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
161 prefix="localhost_access_log" suffix=".txt"
162 pattern="%h %l %u %t "%r" %s %b" />
163
164 </Host> 詳細說明:http://blog.oldboyedu.com/java-tomcat/
將http://10.0.0.17:8080/jpress-web-newest 改成http://10.0.0.17:8080/jpress
在配置文件中加上下面這行,記在Host標籤內部
<Context path="/jpress"
docBase="/application/tomcat/webapps/jpress-web-newest"
debug="0" reloadable="false" crossContext="true"/>
重啓後訪問http://10.0.0.17:8080/jpress。確保都關閉了
訪問成功!
多虛擬主機:nginx 多個Server標籤(域名,ip,端口),進程數量固定 master+worker
多實例(多進程):同一個程序啓動屢次,分爲兩種狀況:
第一種:一臺機器跑多個站點;
第二種:一個機器跑一個站點多個實例,配合負載均衡
應用場景:一臺服務器部署多個網站,啓動多個tomcat程序
再將tomcat複製兩份
[root@web03 tools]# tar xf apache-tomcat-8.5.38.tar.gz [root@web03 tools]# cp apache-tomcat-8.5.38 tomcat_1 -a [root@web03 tools]# cp apache-tomcat-8.5.38 tomcat_2 -a #修改端口 [root@web03 tools]# sed -i "s#8005#8006#g" tomcat_1/conf/server.xml [root@web03 tools]# sed -i "s#8080#8081#g" tomcat_1/conf/server.xml [root@web03 tools]# sed -i "s#8009#8010#g" tomcat_1/conf/server.xml [root@web03 tools]# sed -i "s#8005#8007#g" tomcat_2/conf/server.xml [root@web03 tools]# sed -i "s#8080#8082#g" tomcat_2/conf/server.xml [root@web03 tools]# sed -i "s#8009#8011#g" tomcat_2/conf/server.xml #移動到application下 [root@web03 tools]# mv tomcat_* /application/ #啓動! [root@web03 tools]# /application/tomcat_1/bin/startup.sh [root@web03 tools]# /application/tomcat_2/bin/startup.sh #建立測試文件!在webapps/ROOT 是默認的訪問目錄 [root@web03 tools]# echo default-8080 >/application/tomcat/webapps/ROOT/index.jsp [root@web03 tools]# echo default-8081 >/application/tomcat_1/webapps/ROOT/index.jsp [root@web03 tools]# echo default-8082 >/application/tomcat_2/webapps/ROOT/index.jsp 瀏覽器訪問:http://10.0.0.17:8080/ http://10.0.0.17:8081/ http://10.0.0.17:8082/
# 在CentOS6的lb01操做 mv /application/nginx/conf/nginx.conf{,.ori} egrep -v '#|^$' /application/nginx/conf/nginx.conf.default > /application/nginx/conf/nginx.conf cat /application/nginx/conf/nginx.conf …… upstream web_pools { server 10.0.0.17:8081; server 10.0.0.17:8082; } …… location / { root html; index index.jsp index.html index.htm; proxy_pass http://web_pools; }
1、Tomcat自帶函數檢測:meminfo.jsp(不建議使用)
將函數寫入文件,在瀏覽器訪問?
2、jps命令:jdk包帶的命令,jps主要用來輸出JVM中運行的進程狀態信息。 語法格式:jps [options] [hostid] 若是不指定hostid就默認爲當前主機或服務器。 參數說明: -q 不輸出類名、Jar名和傳入main方法的參數 -m 輸出傳入main方法的參數 -l 輸出main類或Jar的全名 -v 輸出傳入JVM的參數 jps -lvm #→快速獲取Java進程的pid,不用ps和grep
3、jstack:主要用來查看某個Java進程內的線程堆棧信息。 jstack能夠定位到線程堆棧,根據堆棧信息咱們能夠定位到具體代碼,
因此它在JVM性能調優中使用得很是多。 排除tomcat故障步驟 a. 查看catalina.out b. sh show-busy-java-threads.sh
4、jconsole和jvisualvm 這是windows安裝完jdk後的圖形監控工具。 C:\Program Files\Java\jdk1.8.0_31\bin
vim /application/tomcat8_1/bin/catalina.sh +97 修改文件第97行,版本不一樣行數也會不一樣
# OS specific support. $var _must_ be set to either true or false.在這一行以前
#加上下面的代碼
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=172.16.1.17" # 監聽的IP 要用內網,這個功能仍是很危險的
# 主機名解析 echo "172.16.1.17 web03" >>/etc/hosts /application/tomcat8_1/bin/shutdown.sh /application/tomcat8_1/bin/startup.sh netstat -tunlp|grep 12345
java不是經過安裝zabbix agent 來開啓客戶端監控的
而是用java-gateway,在zabbix服務器上安裝
第一步:Zabbix Server 須要開啓java監控功能(作1次) sed -i -e '220a JavaGateway=127.0.0.1' -e '236a StartJavaPollers=5' /etc/zabbix/zabbix_server.conf systemctl restart zabbix-server.service 第二步:安裝zabbix_java_gateway(java程序),也須要jdk(openjdk) (作1次) rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm yum -y install zabbix-java-gateway systemctl start zabbix-java-gateway.service netstat -tunlp|grep java
在http://10.0.0.61/zabbix/的WEB頁面上添加主機
移除agent代理
添加JMX接口
第三步:Tomcat須要開啓遠程監控功能 (每個實例都要作)
關閉端口保護 8005 SHUTDOWN ajp鏈接端口保護 8009 註釋 禁用管理端 降權啓動:下降用戶權限啓動 pkill java useradd tomcat cp -a /application/tools/tomcat8_1 /home/tomcat/ chown -R tomcat.tomcat /home/tomcat/tomcat8_1/ su -c '/home/tomcat/tomcat8_1/bin/startup.sh' 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" 下策:加足夠大的內存 下下策:天天0點定時重啓tomcat