部署Java和Tomcat


Tomcat介紹

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應用架構模型

tomcat處理JSP動態,還需要nginx處理靜態的,要動靜分離

JVM是tomcat中的核心

JVM介紹

JVM是Java Virtual Machine(Java虛擬機)的縮寫。實現程序可移植

只要有JVM,就可以運行java程序,而JVM可以在任何系統運行
Java的特性:一次編譯,到處運行
類比Vmware WorkStation的Linux系統

JDK(Java 語言的軟件開發工具,包含JVM)種類:

  • Oracle JDK:商業軟件
  • openjdk:開源軟件

 

環境准備以及軟件選擇

從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的版本對運維來說沒什么區別,安裝方法高度一致。

 

下載軟件

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

 

 

安裝JDK

創建目錄/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目錄結構說明

[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中用的

 

啟動和關閉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在CentOS7啟動慢的原因

查看實時日志,發現原因是生成隨機數的時候卡住了,導致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 # 啟動服務

 

tomcat 管理功能(測試環境使用)

生產環境不要開啟這個功能

[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

 

搭建Jpress

類似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才能登陸

# 輸入剛剛設置的賬號密碼,登陸,就可以發布文章了

 

 

Tomcat主配置文件介紹

文件位置/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 &quot;%r&quot; %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。確保都關閉了

訪問成功!

Tomcat多實例

 

多虛擬主機: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/

 

 

Tomcat反向代理集群

 

# 在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;
        }

Tomcat監控

 

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

 

 

 

 

tomcat開啟遠程監控

 

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需要開啟遠程監控功能 (每一個實例都要做)

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性能優化

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

 


免責聲明!

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



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