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