文章目錄
- 🔥Tomcat java 服務器詳解
- 關于作者
- 一、Tomcat 服務器詳解
- 1.Tomcat 簡介
- 2.tomcat 專案部署
- 2.1 部署實驗環境
- 2.2 java 環境安裝
- 2.3 Tomcat 部署
- 3.Tomcat 目錄介紹
- 4.Tomcat 組態檔
- 5.Tomcat 配置環境變數
- 6.Tomcat 埠介紹
- 7.WEB 站點部署--將java 代碼打包成war檔案
- 二、Tomcat 性能調優
- 三、Tomcat 動靜分離
- 3.1 什么是動靜分離
- 3.2 lnmt 架構部署
- 3.2.1 實驗環境
- 3.2.2 nginx 部署
- 3.2.3 mysql 部署
- 3.2.4 tomcat 部署
- 3.2.5 配置nginx 組態檔
- 四、總結
🔥Tomcat java 服務器詳解
關于作者
-
作者介紹
📢博客主頁:https://rivers.blog.csdn.net/
hello,大家好!我是黃昏,我們一起來學linux 云計算,如果喜歡博客,點個贊,關注下喲,還可以訂閱專欄:📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
對linux 云計算|華為|華三|思科等數通網路技術感興趣,可以私信博主,私信獲取教程,一起交流技術,📢未來可期 讓生命像一團熱烈燃燒的火,直到死亡才能使它熄滅?
一、Tomcat 服務器詳解
1.Tomcat 簡介
-
tomcat 介紹
Tomcat是Apache軟體基金會(Apache Software Foundation)的Jakarta專案中的一個核心專案,由Apache,Sun和其他一些公司及個人共同開發而成
Tomcat服務器是一個免費的開放源代碼的Web應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和除錯JSP程式的首選.
Tomcat和Nginx,Apache(httpd),lighttpd等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Server和JSP容器,獨立的Server容器是Tomcat的默認模式,.不過,Tomcat處理靜態HTML的能力不如Nginx/Apache服務器.
tomcat 官方網站,目前最新版本是10 官方網址
tomcat就是傳說中的中間件之一,tomcat本身是一個容器,專門用來運行java程式,java語言開發的網頁.jsp就應該運行于tomcat中,而tomcat本身的運行也依賴于jdk環境,
-

2.tomcat 專案部署
2.1 部署實驗環境
-
實驗環境說明
主機名 系統版本 系統ip地址 webserver-01 Centos 7.6 10.0.0.7
2.2 java 環境安裝
-
部署java 環境
# 安裝jdk 1.8 [root@tomcat_server~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel # 檢查安裝版本 [root@tomcat_server~]# java -version openjdk version "1.8.0_302" OpenJDK Runtime Environment (build 1.8.0_302-b08) OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)
2.3 Tomcat 部署
-
下載安裝包部署
# 下載安裝包 [root@web_server01~]# wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.52/bin/apache-tomcat-9.0.52.tar.gz [root@tomcat_server~]# ls anaconda-ks.cfg apache-tomcat-9.0.52.tar.gz # 解壓安裝包 [root@tomcat_server~]# tar xf apache-tomcat-9.0.52.tar.gz -C /usr/local/ # 寫一個軟連接,因為解壓名字太長了, [root@tomcat_server~]# cd /usr/local/ [root@tomcat_server/usr/local]# ls apache-tomcat-9.0.52-src bin etc games include lib lib64 libexec sbin share src [root@tomcat_server/usr/local]# ln -s apache-tomcat-9.0.52/ tomcat-9 [root@tomcat_server/usr/local]# 這里個人愛好,你可以自己修改名字,也可以忽略此步驟 # 寫一個歡迎界面,測驗用 [root@tomcat_server~]# cat <<EOF >index.jsp > <html> > <head> > <title>test page</title> > </head> > <body> > <% > out.println("手把手教你玩轉tom 貓!"); > %> > </body> > </html> > EOF [root@tomcat_server~]# # 創建站點存放目錄 [root@tomcat_server/usr/local]# mkdir /usr/local/tomcat-9/webapps/rivers # 將測驗歡迎界面 移動web 目錄中 [root@tomcat_server~]# mv index.jsp /usr/local/tomcat-9/webapps/rivers/ [root@tomcat_server~]# ls /usr/local/tomcat-9/webapps/rivers/ index.jsp [root@tomcat_server~]# # 啟動tomcat [root@web_server01~]# /usr/local/tomcat-9/bin/catalina.sh start [root@web_server01/usr/local]# ps -ef|grep tomcat root 7312 1 1 15:53 pts/0 00:00:03 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat-9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat-9/bin/bootstrap.jar:/usr/local/tomcat-9/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat-9 -Dcatalina.home=/usr/local/tomcat-9 -Djava.io.tmpdir=/usr/local/tomcat-9/temp org.apache.catalina.startup.Bootstrap start root 7341 7245 0 15:57 pts/0 00:00:00 grep --color=auto tomcat -
測驗
-

3.Tomcat 目錄介紹
-
目錄結構
-

bin #用以啟動,關閉Tomcat或其他腳本功能的腳本(.bat和.sh) conf #用以配置Tomcat的XML及DTD檔案 lib #存放web應用能訪問的JAR包 logs #Catalina和其他web應用程式的日志檔案 temp #臨時檔案 webapps #Web應用程式根目錄 work #用以產生有JSP編譯出的Servlet的.java和.class檔案 -
webapps 站點目錄
[root@web_server01/usr/local/tomcat-9]# cd webapps/ [root@web_server01/usr/local/tomcat-9/webapps]# ls docs examples host-manager manager rivers ROOT [root@web_server01/usr/local/tomcat-9/webapps]# tree -L 1 . docs #tomcat幫助檔案 examples #web應用 host-manager #管理 manager #管理 rivers #自己床架的web目錄 ROOT #默認根目錄
4.Tomcat 組態檔
-
常用的組態檔
[root@web_server01~]# tree /usr/local/tomcat-9/conf/ /usr/local/tomcat-9/conf/ ├── Catalina │ └── localhost ├── catalina.policy ├── catalina.properties ├── context.xml ├── jaspic-providers.xml ├── jaspic-providers.xsd ├── logging.properties ├── server.xml #主組態檔 ├── tomcat-users.xml #管理用戶組態檔 ├── tomcat-users.xsd └── web.xml 2 directories, 10 files [root@web_server01~]#
5.Tomcat 配置環境變數
-
設定環境變數,便于啟動/關閉
# 設定環境變數 [root@web_server01~]# echo 'export PATH=/usr/local/tomcat-9/bin:$PATH' > /etc/profile # source下環境變數 [root@web_server01~]# source /etc/profile # 關閉tomcat 服務 [root@web_server01~]# shutdown.sh Using CATALINA_BASE: /usr/local/tomcat-9 Using CATALINA_HOME: /usr/local/tomcat-9 Using CATALINA_TMPDIR: /usr/local/tomcat-9/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat-9/bin/bootstrap.jar:/usr/local/tomcat-9/bin/tomcat-juli.jar Using CATALINA_OPTS: # 重啟tomcat [root@web_server01~]# startup.sh Using CATALINA_BASE: /usr/local/tomcat-9 Using CATALINA_HOME: /usr/local/tomcat-9 Using CATALINA_TMPDIR: /usr/local/tomcat-9/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat-9/bin/bootstrap.jar:/usr/local/tomcat-9/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. [root@web_server01/usr/local/tomcat-9]#
6.Tomcat 埠介紹
-
埠解釋
tomcat啟動之后默認會啟動3個埠,分別是8080,8009,8005 修改埠, server.xml 組態檔 8009 nginx 代理,9默認沒開啟, 8005 tomcat 埠負責關閉tomcat的請求 -
8080 和8443 埠—監聽瀏覽器發送請求
-

這個埠用于監聽瀏覽器發送的請求,設定為80后可以直接使用域名訪問,但是如果使用普通賬戶啟動的tomcat,則不能使用小于1024的埠 8443埠是用于https連接的,除了打開注釋之外還需要有域名證書才可以 -
8009埠 —nginx 反向代理
-

7.WEB 站點部署–將java 代碼打包成war檔案
-
代碼上線
-

-

代碼上線 主要有2種方式,一種是直接將代碼放在web目錄,還有一種就是通過開發工具將程式打包成war包,
二、Tomcat 性能調優
-
生產環境tomcat 服務器優化
線上環境使用默認tomcat組態檔,性能很一般,為了滿足大量用戶的訪問,需要對tomcat進行引數性能優化,具體優化的地方如下:
這里著重講解tomcat引數的優化:server.xml檔案,關閉DNS查詢、配置最大并發等引數, maxThreads:tomcat起動的最大執行緒數,即同時處理的任務個數,默認值為200 acceptCount:當tomcat啟動的執行緒數達到最大時,接受排隊的請求個數,默認值為100 當然這些值都不是越大越好,需要根據實際情況來設定,可以基于測驗的基礎上來不斷的調優分析, <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" maxThreads="5000" minSpareThreads="20" acceptCount="10000" disableUploadTimeout="true" enableLookups="false" URIEncoding="UTF-8" />具體優化點:
1.降權啟動tomcat
[root@web_server01 ~]# useradd -M -s /sbin/nologin tomcat [root@web_server01 ~]# chown -R tomcat.tomcat /usr/local/tomcat-9/ [root@web_server01 ~]# /usr/local/tomcat-9/bin/startup.sh2**.屏蔽dns查詢 —enableLookups=”false“**
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="6000" enableLookups="false" acceptCount="800" redirectPort="8443" />3.JVM 引數調優
3.1 bin/catalina.sh JVM引數優化,添加如下內容: CATALINA_OPTS="$CATALINA_OPTS -Xms512M -Xmx1024M -Xmn100M -XX:SurvivorRatio=4 -XX:+UseConcMarkS weepGC -XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE -DRAMDISK=/ -DUSE_RAM_DISK=ture -DRAM_DISK=true -Djava.rmi.server.hostname=192.168.111.128 -Dcom.sun.management.jmxremote.port =10000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" ==============分割線===========分割線=================分割線==================== 補充: AVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m" server:一定要作為第一個引數,在多個CPU時性能佳 -Xms:初始堆記憶體Heap大小,使用的最小記憶體,cpu性能高時此值應設的大一些 -Xmx:初始堆記憶體heap最大值,使用的最大記憶體 上面兩個值是分配JVM的最小和最大記憶體,取決于硬體物理記憶體的大小,建議均設為物理記憶體的一半, -XX:PermSize:設定記憶體的永久保存區域 -XX:MaxPermSize:設定最大記憶體的永久保存區域 -XX:MaxNewSize: -Xss 15120 這使得JBoss每增加一個執行緒(thread)就會立即消耗15M記憶體,而最佳值應該是128K,默認值好像是512k. +XX:AggressiveHeap 會使得 Xms沒有意義,這個引數讓jvm忽略Xmx引數,瘋狂地吃完一個G物理記憶體,再吃盡一個G的swap, -Xss:每個執行緒的Stack大小 -verbose:gc 現實垃圾收集資訊 -Xloggc:gc.log 指定垃圾收集日志檔案 -Xmn:young generation的heap大小,一般設定為Xmx的3、4分之一 -XX:+UseParNewGC :縮短minor收集的時間 -XX:+UseConcMarkSweepGC :縮短major收集的時間
三、Tomcat 動靜分離
3.1 什么是動靜分離
-
Nginx動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和靜態頁面物理分離,嚴格意義上說應該是動態請求跟靜態請求分開,可以理解成使用Nginx處理靜態頁面,Tomcat、Resin出來動態頁面,
-
動靜分離從目前實作角度來講大致分為兩種,一種是純粹的把靜態檔案獨立成單獨的域名,放在獨立的服務器上,也是目前主流推崇的方案;另外一種方法就是動態跟靜態檔案混合在一起發布,通過nginx來分開,就是我們常說的lnmt架構
3.2 lnmt 架構部署
3.2.1 實驗環境
-
實驗環境說明
主機名 系統版本 系統ip地址 nignx-server Centos 7.6 10.0.0.9/24 mysql-server Centos 7.6 10.0.0.8/24 tomcat-server Centos 7.6 10.0.0.7/24
3.2.2 nginx 部署
-
原始碼安裝nginx
nginx安裝詳解
3.2.3 mysql 部署
-
原始碼安裝mysql 5.7
#安裝依賴包 [root@client ~]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel gcc gcc-c++ epel-release # 創建mysql系統用戶 [root@web02_server~]# useradd -M -s /sbin/nologin mysql [root@web02_server~]# id mysql # 下載mysql 安裝包 [root@web02_server~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz # 解壓mysql 安裝包 [root@web02_server~]# tar -xf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ # 創建軟鏈接 [root@web02_server~]# cd /usr/local/ [root@web02_server/usr/local]# ln -s mysql-5.7.22-linux-glibc2.12-x86_64/ mysql5.7 [root@web02_server/usr/local]# ls bin include libexec sbin etc lib mysql5.7 share games lib64 mysql-5.7.22-linux-glibc2.12-x86_64 src [root@web02_server/usr/local]# # 修改屬主屬組 [root@web02_server/usr/local]# chown -R mysql:mysql mysql5.7/ # 設定環境變數 [root@web02_server/usr/local/mysql5.7/bin]# echo "export PATH=/usr/local/mysql5.7/bin:$PATH" > /etc/profile.d/mysql.sh [root@web02_server/usr/local/mysql5.7/bin]# source /etc/profile.d/mysql.sh [root@web02_server/usr/local/mysql5.7/bin]# # 創建存放資料的目錄并修改屬主 [root@web02_server~]# mkdir /date [root@web02_server~]# chown -R mysql.mysql /date/ # 初始化mysql [root@web02_server~]# /usr/local/mysql5.7/bin/mysqld --initialize --user=mysql --datadir=/data/ 末尾會給一個臨時密碼,這里需要記住 qy4nD69ghX*4 # 配置組態檔 [root@web02_server~]# cat > /etc/my.cnf <<EOF > [mysqld] > basedir = /usr/local/mysql5.7 > datadir = /data > socket = /tmp/mysql.sock > port = 3306 > pid-file = /data/mysql.pid > user = mysql > skip-name-resolve > EOF [root@web02_server~]# cat /etc/my.cnf [mysqld] basedir = /usr/local/mysql5.7 datadir = /data socket = /tmp/mysql.sock port = 3306 pid-file = /data/mysql.pid user = mysql skip-name-resolve # 配置服務啟動腳本 [root@web02_server/usr/local/mysql5.7]# cd support-files/ [root@web02_server/usr/local/mysql5.7/support-files]# ls magic mysqld_multi.server mysql-log-rotate mysql.server [root@web02_server/usr/local/mysql5.7/support-files]# \cp mysql.server /etc/init.d/mysqld [root@web02_server/usr/local/mysql5.7/support-files [root@web02_server~]# chkconfig --add mysqld [root@web02_server~]# chkconfig --level 35 mysqld on # 啟動mysql [root@web02_server~]# service mysqld restart ERROR! MySQL server PID file could not be found! Starting MySQL.Logging to '/data/web02_server.err'. SUCCESS! [root@web02_server~]# # 修改臨時密碼(輸入臨時密碼:qy4nD69ghX*4) [root@web02_server~]# /usr/local/mysql5.7/bin/mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.22 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set password = password('123456'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye
3.2.4 tomcat 部署
-
這里詳細從新介紹一遍
# 配置java環境 [root@tomcat-server~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel # 下載安裝包 [root@tomcat-server~]# wget wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.52/bin/apache-tomcat-9.0.52.tar.gz # 創建目錄 [root@tomcat-server~]# mkdir -p /usr/local/tomcat{1,2} [root@tomcat-server~]# # 解壓安裝包 [root@tomcat-server~]# tar -xf apache-tomcat-9.0.52.tar.gz -C /usr/local/tomcat1 [root@tomcat-server~]# tar -xf apache-tomcat-9.0.52.tar.gz -C /usr/local/tomcat2 [root@tomcat-server~]# # 創建軟鏈接 [root@tomcat-server~]# cd /usr/local/tomcat1 [root@tomcat-server/usr/local/tomcat1]# ls apache-tomcat-9.0.52 [root@tomcat-server/usr/local/tomcat1]# ln -s apache-tomcat-9.0.52/ tomcat1 [root@tomcat-server/usr/local/tomcat1]# cd .. [root@tomcat-server/usr/local]# cd tomcat2 [root@tomcat-server/usr/local/tomcat2]# ln -s apache-tomcat-9.0.52/ tomcat2 [root@tomcat-server/usr/local/tomcat2]# # 創建實驗目錄和網頁檔案 [root@tomcat-server~]# mkdir /usr/local/tomcat1/tomcat1/webapps/test/ [root@tomcat-server~]# mkdir /usr/local/tomcat2/tomcat2/webapps/test/ [root@tomcat-server~]# vim /usr/local/tomcat2/tomcat2/webapps/test/index.jsp <html> <head> <title>test page</title> </head> <body> <% out.println("hello,tomcat2"); %> %</body> %</html> [root@tomcat-server~]# vim /usr/local/tomcat1/tomcat1/webapps/test/index.jsp <html> <head> <title>test page</title> </head> <body> <% out.println("hello,tomcat2"); %> %</body> %</html> #修改tomcat2的埠 將8005改為8006 將8080改為8081 將8009改為8010 # 啟動tomcat [root@tomcat-server~]# /usr/local/tomcat1/tomcat1/bin/catalina.sh start Using CATALINA_BASE: /usr/local/tomcat1/tomcat1 Using CATALINA_HOME: /usr/local/tomcat1/tomcat1 Using CATALINA_TMPDIR: /usr/local/tomcat1/tomcat1/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat1/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/tomcat1/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. [root@tomcat-server~]# /usr/local/tomcat2/tomcat2/bin/catalina.sh start Using CATALINA_BASE: /usr/local/tomcat2/tomcat2 Using CATALINA_HOME: /usr/local/tomcat2/tomcat2 Using CATALINA_TMPDIR: /usr/local/tomcat2/tomcat2/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat2/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/tomcat2/bin/tomcat-juli.jar Using CATALINA_OPTS: \Tomcat started. [root@tomcat-server~]# -
測驗
-

-

3.2.5 配置nginx 組態檔
-
修改組態檔
#新加入的行起始點 upstream web { server 10.0.0.7:8080; server 10.0.0.7:8081; } #在server段添加以下內容即可 location ~* \.(do|jsp)$ { proxy_pass http://web; } location ~* tomcat\.(png|css)$ { proxy_pass http://web; } [root@nginx-server~]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful -

-
測驗
靜態資源訪問nginx,輸入10.0.0.9
-

動態資源訪問tomcat 輸入 10.0.0.9/index.jsp
-

瀏覽器輸入:10.0.0.9/test/index.jsp
再次重繪下
ok!lnmt 動靜分離搭建完畢!
四、總結
-
好了,本文已經將tomcat 詳細的介紹完畢,當然還有部分沒做介紹,需要大家一起研究,相信你讀完這篇tomcat 詳解,已經掌握了基本tomcat 配置了,
最后 如果 你對博主的文章感興趣,歡迎關注,點贊!訂閱相關專欄哦

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298763.html
標籤:其他
上一篇:JVM之記憶體結構


