六 java和Tomcat

Java企業級應用TOMCAT實戰html

http://blog.oldboyedu.com/java-tomcat/ 老男孩筆記java

常規應用架構模型mysql

Tomcat對靜態請求效率低,能夠作動靜分離,動態的給Tomcat靜態的交給nginxlinux

 

Tomcat服務器是一個免費的開放源代碼的Web應用服務器,nginx

在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP網頁的首選。web

Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務器同樣,具備處理HTML頁面的功能,sql

另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。數據庫

不過,Tomcat處理靜態HTML的能力不如Nginx/Apache服務器。apache

目前Tomcat最新版本爲9.0。Java容器還有resin、weblogic等。
Tomcat官網:http://tomcat.apache.org/vim

JVM介紹

JVM是Java Virtual Machine(Java虛擬機)的縮寫。
Java的特性:一次編譯,處處運行
類比Vmware WorkStation的Linux系統

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

環境準備及軟件選擇

從CentOS7模板機全新克隆2臺新主機
第1臺:IP規劃爲10.0.0.17/172.16.1.9,主機名爲web03
第2臺:IP規劃爲10.0.0.18/172.16.1.10,主機名爲web04
準備好lb01(CentOS6),須要其上的nginx反向代理功能
下載相關軟件包:http://pan.baidu.com/s/1IpioA
注:jdk和Tomcat的版本對運維來講沒什麼區別,安裝方法高度一致。

JDK安裝

重要提示:全部涉及到java應用都須要安裝

解壓 到指定文件夾 建立好 軟連接

tar xf jdk-8u60-linux-x64.tar.gz -C /application/
ln -s /application/jdk1.8.0_60 /application/jdk

追加變量到/etc/profile中 EOF 加上單引號 否則追加內容裏的$會被解析

# cat >>/etc/profile<<'EOF'
> export JAVA_HOME=/application/jdk
> export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
> export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
> EOF

# source /etc/profile

或 使用sed 添加

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

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/

執行version查看JVM和Tomcat版本 /application/tomcat/bin/version.sh

Tomcat目錄結構說明

# cd /application/tomcat/
# tree -L 1
├── bin            # startup.sh shutdown.sh catalina.sh(核心)
├── conf         # server.xml(主配置文件) tomcat-users.xml
├── lib
├── LICENSE
├── logs         # 日誌目錄 catalina.out tomcat實時日誌
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp
├── webapps  # 站點目錄
└── work

或  # find -maxdepth 1

./bin
./conf
./lib
./logs
./temp
./webapps
./work
./LICENSE
./NOTICE
./RELEASE-NOTES
./RUNNING.txt

7 directories, 4 files

啓動關閉tomcat

/application/tomcat/bin/startup.sh
/application/tomcat/bin/shutdown.sh

能夠查看日誌 看到啓動 或關閉  catalina.out 主要日誌

# tail -f /application/tomcat/logs/catalina.out

關完以後必定要檢查端口和進程 是否都關閉了

# ss -lntup|grep java或# netstat -tunlp|grep java

# ps -ef|grep java

訪問Tomcat   http://10.0.0.17:8080/

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 日誌說明

查看日誌,讀懂日誌  作個定時任務 狀況catalina.out
/application/tomcat/logs
catalina.out                    # 實時記錄tomcat運行信息,文件會愈來愈大,定時清空
catalina.時間.log            # catalina.out文件天天的日誌切割文件

# 每一個站點訪問日誌
host-manager.時間.log
localhost_access_log.時間.txt
localhost.時間.log
manager.時間.log

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

默認是打不開的  正式環境中也不要啓用它

vim /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"/>
</tomcat-users>

改完配置重啓Tomcat

/application/tomcat/bin/shutdown.sh
/application/tomcat/bin/startup.sh

 

 搭建jpress(1)

相似wordpess博客站點  建議就用以前部署的mysql數據服務db01

進入mysql  添加用戶

mysql  -uroot  -poldboy123

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';

查看用戶

show databases;
+-----------------------------+
| Database                    |
+-----------------------------+
| information_schema   |
| jpress                          |
| mysql                          |
| performance_schema |
| test                              |
| wordpress                   |
+-----------------------------+

select user,host from mysql.user;

+--------------+--------------------------+
| user           |  host                       |
+--------------+--------------------------+
| root           |  127.0.0.1                |
| jpress        |  172.16.1.%            |
| wordpress |  172.16.1.0/255.255.255.0 |
| root           | ::1                            |
|                  | localhost                  |
| jpress        |  localhost                 |
| root           |  localhost                 |
| wordpress |  localhost                |
|                  | web01                     |
| root           |  web01                    |
+-----------+--------------------------+

更新權限

flush privileges;

把mysql命令推給web03

# scp /application/mysql/bin/mysql  172.16.1.9:/bin/

web03 鏈接mysql

# /bin/mysql -ujpress -p123456 -h 172.16.1.51

測試數據庫能鏈接後 上傳網站代碼到如下路徑目錄中

# cd /application/tomcat/webapps/

上傳的war包  jpress會自動解壓部署 部署完進入數據庫看看錶信息是否正常建立

mysql> show tables from jpress;

瀏覽器進入http://10.0.0.9:8080/jpress-web-newest/ 安裝

完成後 須要手動重啓服務  jpress不會自動重啓

# /application/tomcat/bin/shutdown.sh

# /application/tomcat/bin/startup.sh

管理 jpress須要手動輸入 

http://10.0.0.9:8080/jpress-web-newest/admin

================================================

環境: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';

=================================================

Tomcat主配置文件介紹

/application/tomcat/conf/server.xml

<Server port="8005" shutdown="SHUTDOWN">  關閉端口 和「暗號」

<Connector port="8080" protocol="HTTP/1.1"  訪問端口  協議

connectionTimeout="20000"                              超時時間  毫秒
redirectPort="8443" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
詳細說明:http://blog.oldboyedu.com/java-tomcat/

 擴展知識

訪問jpress地址爲:http://10.0.0.200:8080/
訪問jpress地址爲:http://10.0.0.200:8080/jpress

vim /application/tomcat/conf/server.xml  在虛擬主機部分添加上如下內容
<Context path="/jpress" docBase="/application/tomcat/webapps/jpress-web-newest" debug="0" reloadable="false" crossContext="true"/>

 

訪問http://10.0.0.9:8080/jpress/ 至關於訪問http://10.0.0.9:8080/jpress-web-newest/

Tomcat多實例介紹

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

多實例(多進程):同一個程序啓動屢次,分爲兩種狀況:
第一種:一臺機器跑多個站點;
第二種:一個機器跑一個站點多個實例,配合負載均衡

cd /server/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
diff tomcat8_1/conf/server.xml tomcat8_2/conf/server.xml
# 生產經驗:將已經配置的實例打包,之後方便批量配置多實例
tar zcf tomcat_muti.tar.gz ./tomcat8_1/ ./tomcat8_2/

cp -a tomcat8_1 tomcat8_2 /application/

/application/tomcat8_1/bin/startup.sh
/application/tomcat8_2/bin/startup.sh

netstat -tunlp|grep java

# 將每一個實例的網頁差別化
echo 8081 >>/application/tomcat8_1/webapps/ROOT/index.jsp
echo 8082 >>/application/tomcat8_2/webapps/ROOT/index.jsp

 

解壓Tomcat 修改server.xml配置文件裏的端口設置 在複製到application啓動

在Tomcat 的root文件夾中加入默認頁面測試  

 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.9:8081;
server 10.0.0.9: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/tomcat/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"
# 主機名解析
echo "10.0.0.17 web03" >>/etc/hosts

/application/tomcat/bin/shutdown.sh
/application/tomcat/bin/startup.sh
netstat -tunlp|grep 12345

 Zabbix監控Tomcat

第一步: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

第三步: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

相關文章
相關標籤/搜索