<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:56179|
      • 收錄網站:177806|

      IT精英團

      Tomcat安裝、配置、優化及負載均衡詳解

      Tomcat安裝、配置、優化及負載均衡詳解

      瀏覽次數:
      評論次數:
      編輯: mb5fcf3d5431d90
      信息來源: 51CTO博客
      更新日期: 2021-02-11 12:46:07
      摘要

      一、常見JavaWeb服務器1、WebLogic:是BEA公司的產品、WebSphereAS:是IBM公司的產品、JBossAS:紅帽公司的產品,可以自行了解2、Tomcat服務器:Sun公司在推出的小型Servlet/JSP調試工具的基礎上發展起來的一個優秀的Servlet容器,Tomcat本身完全用java語言編寫,所以tomcat的運行需要java的支持,所以要先安裝JDK,才能運行。目前是

      • 正文開始
      • 相關閱讀
      • 推薦作品

      Tomcat安裝、配置、優化及負載均衡詳解

      一、常見JavaWeb服務器


      1、WebLogic:是BEA公司的產品、WebSphereAS:是IBM公司的產品、JBossAS:紅帽公司的產品,可以自行了解


      2、Tomcat服務器:Sun公司在推出的小型Servlet/JSP調試工具的基礎上發展起來的一個優秀的Servlet容器,Tomcat本身完全用java語言編寫,所以tomcat的運行需要java的支持,所以要先安裝JDK,才能運行。


      目前是Apache開源軟件組織的一個軟件項目,它的官網 :

      http://tomcat.apache.org


      Tomcat得到了廣大開源代碼志愿者的大力支持,且可以和目前大部分的主流Web服務器(IIS、Apache服務器)一起工作,它運行穩定、可靠且高效。已成為目前開發企業JavaWeb應用的最佳Servlet容器選擇之一。


      二、Tomcat的目錄結構及常用配置


      1、Tomcat的目錄層次結構

      • bin:存放啟動和關閉Tomcat的腳本文件
      • conf:存放Tomcat服務器的各種配置文件
      • lib:存放tomcat服務器支撐的jar包
      • logs:存放Tomcat的日志文件
      • temp:存放Tomcat運行時產生的臨時文件
      • webapps:web應用雖在目錄,即供外界訪問的web資源的存放目錄
      • work:Tomcat的工作目錄

      2、JavaWeb應用的組成結構

      mail---------------------------Web應用所在目錄
      ? ? |----html、jsp、css、js等文件,根目錄下的文件外界可以直接訪問
      ? ? |----WEB-INF目錄
      ? ? ? ? ?|---------classes目錄(java類)
      ? ? ? ? ?|---------lib目錄(java類運行所需的jar包)
      ? ? ? ? ?|---------web.xml(web應用的配置文件)
      ? ? ?WEB-INF 這個目錄下的文件外界無法直接訪問,由web服務器負責調用

      3、JavaWeb應用的發布

      開放式目錄方式:

      打包war方式: ? 使用 ? Jar -cvf *.war .

      4、Tomcat的組成結構

      Tomcat本身由一系列可配置的組件構成,其中核心組件是Servlet容器組件,它是所有其他Tomcat組件的頂層容器。


      每個組件都可以在Tomcat安裝目錄/conf/server.xml文件中進行配置,每個Tomcat組件在server.xml文件中對應一種配置元素。下面用XML的形式展示各種Tomcat組件之間的關系


      <Server>代表整個Servlet容器組件,是最頂層元素,可以包含一個或多個<Service>元素
      <Service>包含一個<Engine>元素以及一個或多個<Connector>元素,這些<Connector>共享一個<Engine>
      <Connector/>代表和客戶程序實際交互的組件,負責接收客戶請求,以及向客戶返回響應
      <Engine>每個<Service>元素只能包含一個<Engine>元素,它處理在同一個<Service>中所有<Connector>接收到的客戶請求
      <Host>在一個<Engine>中可以包含多個<Host>,它代表一個虛擬主機(即一個服務器程序可以部署在多個有不同IP的服務器主機上),它可以包含一個或多個應用
      <Context>使用最頻繁的元素,代表了運行在虛擬主機上的單個web應用
      Host>
      Engine>
      Service>
      Server>


      5、Tomcat體系結構


      a886546f5d5375ae010a2c9d086414e7.jpeg



      6、虛擬目錄的映射方式

      從Tomcat6開始,Tomcat支持自動映射,即tomcat服務器會自動管理webapps目錄下的所有web應用,并把它映射成虛擬目錄,換句話說,只需把web應用放在webapps目錄下,不需要配置Context,外界可以直接訪問。

      但是如果你不想講項目放在webapps下,而是放在其他地方,還是需要配置Context,比如我的tomcat在C盤,我的項目在D盤,則需要在Host下增加如下虛擬目錄映射語句。


      <contextpath="/myapp"docBase="D:/work/myapp">Context></contextpath=


      7、Context元素配置

      tomcat在加載一個web應用時,會一次按照以下五種方式查找web應用中的元素,優先級一次降低,直到找到為止

      1. 到Tomcat安裝目錄/conf/Context.xml文件中查找元素。
      2. 到Tomcat安裝錄/conf/[enginename]/[hostname]/context.xml.default文件中查找元素。
        [enginename]:表示的name屬性
        [hostname]:表示d的那么屬性
      3. 到Tomcat安裝目錄/conf/[enginename]/[hostname]/[contextpath].xml文件中查找元素
        [contextpath]:表示單個Web應用的URL入口
      4. 到Web應用的META-INF/context.xml文件中查找元素
      5. 到Tomcat安裝目錄/conf/server.xml文件中查找元素。只適用于單個Web應用

      8、將項目部署為Tomcat默認應用

      即訪問 http://localhost:8080 時出來的是tomcat自帶的歡迎頁面,改為登錄到自己的項目主頁。


      方法一:

      在Tomcat默認安裝后,tomcat的主目錄是webapps/root目錄,所以如果想改變tomcat的主目錄的話可以如下所做:


      在/conf/server.xml文件的之間加入代碼


      <Contextpath=""docBase="C:\tomcat7\webapps\myapp"reloadable="true"debug="0">Context>


      方法二:

      將tomcat安裝目錄下的ROOT下的所有文件刪除,換成自己項目的文件,此法有點暴力。

      方法三:

      Tomcat5.0以下版本在C:/Tomcat/conf/Catalina/localhost目錄下會自動生成了一個ROOT.Xml,但是5.0以上版本不再生成此文件。


      所以可以新建個ROOT.xml,在里面加入如下代碼:


      Xml?version='1.0'?encoding='utf-8'?>
      <ContextcrossContext="true"docBase="C:\tomcat7\webapps\myapp"path=""reloadable="true">
      Context>


      9、Context元素的屬性

      path:指定訪問該Web應用的URL入口


      docBase:指定Web應用的文件路徑,可以寫絕對路徑,也可以寫相對于appBase屬性的相對路徑


      className:指定實現Context組件的Java類的名字,這個類必須實現org.apache.catalina.Contex接口,該屬性默認值為org.apache.catalina.core.StandardContext(不建議大家改動)


      reloadable:如果為true,Tomcat服務器在運行狀態下回監視在WEB-INF/classes和WEB-INF/lib目錄下的class文件的改動,以及監視Web應用的WEB-INF/web.xml文件的改動,如果檢測到有更新,服務器會自動更新加載web應用。


      其默認值為false。在開發和調試階段,將其改為true,一般像Eclipse等開發環境都會默認改為true。在正式發布階段,應將其該為false,可以降低Tomcat的運行負荷,提高Tomcat的運行性能


      在一般情況下,元素都會使用默認的標準Context組件,即className屬性采用默認值org.apache.catalina.core.StandardContext,它除了擁有上面介紹到的屬性外,還有自身專有的屬性:

      • cachingAllowed:是否允許啟用靜態資源(HTML、圖片、聲音等)的緩存。默認值為true。
      • cacheMaxSize:設置靜態資源緩存的最大值,單位為K。
      • workDir:指定Web應用的工作目錄。
      • uppackWAR:如果為true,會把war文件展開為開放目錄后再運行。為false,直接運行war文件。默認值為true。

      10、web.xml文件

      該文件必須放在/WEB-INF目錄下,但是從7.0版本開始,Tomcat可以不使用web.xml文件,而是使用注解方式。


      三、Tomcat的優化


      1、內存使用配置

      Tomcat是依賴于JVM的,所以Tomcat的使用內存配置實質上是JVM的內存配置。


      在/bin目錄下的catalina.bat可以直接通過Tomcat設置JVM內存參數,windows下打開catalina.bat文件,在大概中間的位置,找到


      set"JAVA_OPTS=%JAVA_OPT%?-server?-Xms2048m?-Xmx2048m?-XX:PermSize=256m?-XX:MaxPermSize=512m?-Djava.awt.headless=true"


      通過內存設置充分利用服務器內存

      • -server:模式啟動應用慢,但是極大程度提高運行性能
      • -Xms2048m -Xmx2048m:設置的是堆內存
      java8開始,PermSize被MetaspaceSize代替,MetaspaceSize共享heap,不會再有java.lang.OutOfMemoryError:PermGen space,可以不設置
      • Headless=true:適用于Linux系統,與圖形操作有關,如生成驗證碼含義是當前的是無顯示器的服務器,應用中如果獲取系統顯示有關的參數會拋出異常,windows系統可不用設置


      可通過jmap -heap process_id查看設置是否成功

      2、最大連接數配置(并發能力)

      在/conf/server.xml里進行配置


      在屬性中將protocol屬性改為


      "org.apache.coyote.http11.Http11NioProtocol",


      NIO模型的效率更高

      加入


      maxThreads="500"
      //當前可以同時處理的最大用戶訪問數
      
      minSpareThreads="100"
      //最小空閑線程連接數,用于優化線程池
      
      maxSpareThreads="200"
      
      acceptCount="200"
      //當所有的線程以分配,仍然允許連接進來,但是出于等待狀態的用戶數。
      //等待線程數+工作線程數=總的可最大連接數,如果超過此數,
      //新的連接將不會被接受,就會產生一個http錯誤
      
      enableLookups="false"
      //是否允許DNS反查,如果為true,request.getRemoteHost會執行DNS查找,反向解析ip對應域名或主機名,
      //當沒有這樣需要的時候,可以將這個功能關閉,在一定程度上提高了Tomcat服務器的性能



      四、負載均衡配置

      負載均衡是提高應用負載量和容錯的有效手段,可以結合Nginxs與Tomcat實現,Nginx是一款性能優異的反向代理服務器。


      1、負載均衡配置實現

      反向代理原理示意圖:


      6ab50026af54e6e12863d0f95f4ab94c.jpeg



      負載均衡示意圖:


      8796a01bd4ebfde20b3553df3a74e4e3.jpeg


      負載均衡策略:

      Nginx 提供輪詢(round robin)、用戶IP哈希(client IP)和指定權重 3 種方式

      2、負載均衡時Session的處理策略

      Session是Tomcat服務器上的內存空間,如果一個用戶發出多個請求,卻發到了多個tomcat服務器中,那么就會出現Session不同步的問題

      解決方案1

      將一個用戶的請求鎖定到某一臺服務器上,簡單,但是缺乏容錯性,一旦某個服務器發生故障,Session可能丟失,(但是服務器發生故障是一個低概率事件,如果一個服務器經常掛掉,要么是硬件有問題,要么是應用有問題)


      可以使用用戶IP哈希實現


      解決方案2

      Session復制策略,基于網絡的廣播策略,一個節點Session變化,其他節點同步復制,具有容錯性,但節點多或復制量大時對網絡負荷大,使網絡效率低下,甚至阻塞


      ① 在/conf/server.xml文件中開啟Session復制的選項,將注釋去掉,7.0默認值以配置好,需要接收器綁定內網(一般服務器都有兩塊網卡)網卡地址,修改端口>。


      ② 在應用中指定應用是在分布式部署之下,在web.xml中添加選項


      解決方案3

      額外創建一個共享的空間用來存放Session,所有服務器共享一個Session


      memcached緩存共享方案基本原理

      粘性Session與非粘性Session方式:


      d9eb7913c2b4bf71cb746678cd549201.jpeg


      需要一些工具jar包,官網有目錄和下載連接,在/conf/context.xml中進行配置,全局有效。

      3、集群環境中應用代碼應注意的問題

      傳遞Session需要實體類序列化支持,實現可序列化接口,設置版本號。

      獲取用戶IP地址方法的變化,獲取真實客戶端ip而不是Nginx代理地址。

      動靜分離結構的預規劃。一般高并發的網站上,資源類的文件,如js,css,圖片通常是由靜態服務器處理,Nginx處理靜態文件效率就非常高,而tomcat處理靜態文件是它很大的一個弱勢,tomcat只負責動態請求的處理。


      那么編碼的時候就要考慮靜態資源最后可能要被拿出去,地址會有變化,所以在開發的時候應該規劃訪問地址,保持最大靈活性。


      原作者:rocomp
      原文鏈接:rocomp - 博客園
      原出處:博客園
      侵刪

      06de258e8360694ddb2cd1f77c650ac7.jpeg


      標簽:java
      6種快速統計代碼執行時間的方法,真香!(史上最全)
      ? 上一篇 2021-02-11
      為什么你總是 CRUD,你想過沒有?
      下一篇 ? 2021-02-11
      • 談如何設計未來的倉庫建筑
        4閱讀 0條評論 個贊
        編輯:數據社全文共3758個字,建議10分鐘閱讀大家好,我是峰哥,夏天已經來了,小麥馬上要豐收了,今天分析一篇關于未來數倉架構發展方向的文章。Linked大佬JayKreps曾發表過一篇博客,簡單闡……
      • 高并發服務的幾點優化經驗
        0閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • Java處理異常的9個最佳實踐 你做得對嗎?
        1閱讀 0條評論 個贊
        原文:https://dzone.com/articles/9-best-practices-to-handle-exceptions-in-java譯者:颯然Hang譯文:http://www.r……
      • 提高Java字符串編碼和解碼性能的技巧
        1閱讀 0條評論 個贊
        1常見字符串編碼●常見的字符串編碼有:LATIN1只能保存ASCII字符,又稱ISO-8859-1。UTF-8變長字節編碼,一個字符需要使用1個、2個或者3個byte表示。由于中文通常需要3個字節……
      • Linux預定任務調度(crontab) 好實用!
        0閱讀 0條評論 個贊
        概述crontab命令用于設置周期性被執行的指令。該命令從標準輸入設備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執行??梢允褂胏rontab定時處理離線任務,比如每天凌晨2點更新數……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 7 種提升Spring Boot吞吐量神技!
        0閱讀 0條評論 個贊
        一、異步執行實現方式二種:1.使用異步注解@aysnc、啟動類:添加@EnableAsync注解2.JDK8本身有一個非常好用的Future類——CompletableFuture@AllArg……
      • 采訪者:告訴我們SpringAOP的底層代理模型
        2閱讀 0條評論 個贊
        來源|Java技術指北(ID:javanorth)代理模式相信大家經常聽說,在設計模式中相對而言是比較難理解的。這次指北君來給大家通俗的介紹介紹。1、什么是代理模式Provideasurrog……
      • 阿帕奇建筑師遵循的30條設計原則
        0閱讀 0條評論 個贊
        作者介紹Srinath,科學家,軟件架構師。ApacheAxis2項目的聯合創始人,ApacheSoftware基金會的成員,WSO2流處理器(wso2.com/analytics)的聯席架構師?!?/div>
      • 不容錯過的20個ES6技巧
        5閱讀 0條評論 個贊
        前言大家好,我是xieyezi,好久不見,我又重新回歸掘金啦,這次為大家整理了20個使用頻率很高的ES6代碼塊,希望大家喜歡……
      • 說說春云的全鏈路灰度發布方案~
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-碼猿技術專欄,作者不才陳某大家好實際生產中如有需求變更,并不會直接更新線上服務,最通常的做法便是:切出線上的小部分流量進行體驗測試,經過測試后無問題則全面的上線。這樣做的好處也是……
      • 卡夫卡3.0新功能全暴露 好香??!
        1閱讀 0條評論 個贊
        以下文章來源于云加社區,作者屈志平導語|kafka3.0的版本已經試推行去zk的kafka架構了,如果去掉了zk,那么在kafka新的版本當中使用什么技術來代替了zk的位置呢,接下來我們一起來一探究竟……
      • 基礎鞏固——至少需要多少行代碼才能實現深度復制?
        1閱讀 0條評論 個贊
        前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類……
      • 一萬字長文講解HBase讀寫性能優化
        2閱讀 0條評論 個贊
        一、HBase讀優化1.HBase客戶端優化和大多數系統一樣,客戶端作為業務讀寫的入口,姿勢使用不正確通常會導致本業務讀延遲較高實際上存在一些使用姿勢的推薦用法,這里一般需要關注四個問題:1)s……
      • 優化Docker鏡像安全性的12個技巧 建議收藏起來!
        0閱讀 0條評論 個贊
        本文介紹了12個優化Docker鏡像安全性的技巧。每個技巧都解釋了底層的攻擊載體,以及一個或多個緩解方法。這些技巧包括了避免泄露構建密鑰、以非root用戶身份運行,或如何確保使用最新的依賴……
      • 1972年的C語言 控制了Windows、Linux、macOS等操作系統的半邊天
        1閱讀 0條評論 個贊
        來源|CSDN(ID:CSDNnews)誕生于1972年的C語言已經50歲了,目前來看,它還像20歲的小伙一樣活力四射,似乎永不會退休,并且正在賦能全世界重量級應用系統的運行。盡管C語言面世多年,……
      • 操作系統宕機 如何找回我的MySQL記錄?
        0閱讀 0條評論 個贊
        以下文章來源于公眾號-數據和云,作者楊豹一、概述如果Linux操作系統宕機,啟動不了,救援模式(rescueinstalledsystem)也行不通的時候,那么該機器上的MySQL數據還能恢復嗎?……
      • 低代碼實時倉儲系統的設計與實踐
        1閱讀 0條評論 個贊
        1導讀本文介紹58信安基于Flink實現低代碼實時數倉構建系統,我們將數倉構建這一過程進行抽象,通過工程化的思想去解決,將固有領域問題交給系統,讓開發人員關注數據本身,解放人力縮短數倉構建周期。2背景……
      • 解決緩存崩潰問題的一行代碼
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-孤獨煙,作者孤獨煙引言今天,重新回顧一下緩存擊穿這個問題!之所以寫這個文章呢,因為目前網上流傳的文章落地性太差(什么布隆過濾器啊,布谷過濾器啊,嗯,你們懂的),其實這類方案并不適……
      • 如何正確計算Kubernetes容器的CPU利用率
        1閱讀 0條評論 個贊
        本文轉自博客園,原文:https://www.cnblogs.com/apink/p/15767687.html,版權歸原作者所有。參數解釋使用Prometheus配置kubernetes環境……
      • Python字符串深度摘要
        2閱讀 0條評論 個贊
        以下文章來源于公眾號-蘿卜大雜燴,作者周蘿卜今天我們來學習字符串數據類型相關知識,將討論如何聲明字符串數據類型,字符串數據類型與ASCII表的關系,字符串數據類型的屬性,以及一些重要的字符串方法和……
      • 服務器端高并發分布式架構的演進之路
        1閱讀 0條評論 個贊
        1.概述本文以淘寶作為例子,介紹從一百個到千萬級并發情況下服務端的架構的演進過程。同時列舉出每個演進階段會遇到的相關技術,讓大家對架構的演進有一個整體的認知。文章最后匯總了一些架構設計的原則。特別說……
      • 納尼?數據也是立法的嗎?
        1閱讀 0條評論 個贊
        編輯:彭文華來源:大數據架構師(ID:bigdata_arch)彭友們好,我是老彭。最近忙瘋了,天天給客戶寫方案,都沒時間寫文章了。趁著五一假期,跟彭友們嘮嘮新鮮事兒。今天這個,真的是顛覆我的認知,……
      • 如何執行超過100M的SQL腳本?
        2閱讀 0條評論 個贊
        技術_菜鳥https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一個問題,在SQLServer的查詢分析器里面執行一個超過100MB的數據庫腳本,發現……
      • 運維數字化轉型的幾點思考
        1閱讀 0條評論 個贊
        這個月底要召開一個企業運維數字化轉型的研討會,昨天一個合作伙伴和我討論一些研討會的話題問題。數字化轉型是近期十分熱門的話題,各大國企央企也把數字化轉型作為未來幾年的工作重點。不過針對于IT運維,數字化……
      • 如何優雅地升級Kubernetes集群的Docker和Containerd版本
        1閱讀 0條評論 個贊
        前言公司用的k8s集群是“多環境合一”的方式,集群流量入口也摒棄了常見的traefik和ingress-nginx,直接用了一個國內不常見的底層基于Envoy的APIGateway網關服務。當然還有……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>