<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                本篇是《Tomcat權威指南》第二版學習筆記,Jason Brittain著,英文名是:Tomcat:The Definitive Guide,中國電力出版社,2009.9出版。 在工作中經常使用Tomcat、JBoss、Jetty等Java容器,但都不曾系統的學習總結過,本次拿出一個周末的時間,通過本書,較為系統的學習一下Tomcat,并結合互聯網的參考資料,寫下這篇學習總結,感覺還是受益良多。 關于《Tomcat權威指南》第二版這本書,是基于Tomcat 6的,翻譯不是很專業,一些計算機技術術語翻譯的不夠準確,印刷中也有一些錯別字,所以對于沒有基礎的初學者,容易被誤導,如果有一定基礎,把這本書系統看一遍,作為工具書,還是不錯的。 關于本書的原作者,是spigit.com的軟件架構師,對Tomcat作為Web服務器的性能估計較為樂觀,這個樂觀的估計沒有得到大數據量高并發系統的驗證;相反,僅僅把Tomcat作為Java容器,甚至僅僅作為開發過程Java容器,生產過程使用JBoss的案例貌似更多。 關于選擇這本書的原因,是市場上系統的講解Tomcat的書實在是少,相對來說,從系統化講解來說,這本書還不錯![大笑](https://box.kancloud.cn/2016-01-19_569e21abc5518.gif) # Tomcat權威指南 ### Tomcat目錄結構 | bin | 存放啟動、停止服務器的腳本文件 | |-----|-----| | conf | 存放服務器的配置文件、最重要的是server.xml文件 | | lib | 存放jar文件,服務器和所有的web應用程序都可以訪問 | | logs | 存放服務器的日志文件 | | temp | 存放Tomcat運行時的臨時文件 | | webapps | 缺省的web應用的發布目錄,在server.xml中的“Host appBase="webapps"...”節點定義 | | work | Tomcat的工作目錄,默認情況下把編譯JSP文件生成的servlet類文件放于此目錄下 | ### Tomcat conf目錄下的配置文件 | server.xml | Tomcat主配置文件 | |-----|-----| | web.xml | servlet與其他適用于整個Web應用程序的配置,必須符合servlet規范 | | tomcat-users.xml | Tomcat的UserDatabaseRealm用于認證的默認角色、用戶及密碼清單 | | catalina.policy | Tomcat的Java安全防護策略文件 | | context.xml | 默認的context設置,應用于安裝了Tomcat的所有主機的所有部署內容 | | catalina.properties | ? | | logging.properties | ? | ### Tomcat lib目錄下的jar包作用 | **jar** | **作用** | **Tomcat6** | **Tomcat7** | **Tomcat8** | |-----|-----|-----|-----|-----| | annotation-api.jar | JavaEE annotations classes | √ | √ | √ | | catalina.jar | Implementation of the Catalina servlet container portion of Tomcat | √ | √ | √ | | catalina-ant.jar | Tomcat Catalina Ant tasks | √ | √ | √ | | catalina-ha.jar | 高可用package | √ | √ | √ | | catalina-storeconfig.jar | ? | **×** | **×** | √ | | catalina-tribes.jar | 組通信package | √ | √ | √ | | ecj-4.3.1.jar | Eclipse JDT Java compiler,即Eclipse開發的Jsp編譯器,Tomcat5.5開始,開始默認使用這個編譯器編譯Jsp頁 | √ | √ | √ | | el-api.jar | expression language | √ | √ | √ | | jasper.jar | Tomcat Jasper JSP Compiler and Runtime,Jasper 2 JSP Engine to implement the JavaServer Pages 2.1 specification | √ | √ | √ | | jasper-el.jar | Tomcat Jasper EL implementation | √ | √ | √ | | jsp-api.jar | 在Tomcat6/7/8中,版本分別是2.1/2.2/2.3 | √ | √ | √ | | servlet-api.jar | 在Tomcat6/7/8中,版本分別是2.5/3.0/3.1 | √ | √ | √ | | tomcat-api.jar | Several interfaces defined by Tomcat | **×** | √ | √ | | tomcat-coyote.jar | Tomcat connectors and utility classes | √ | √ | √ | | tomcat-dbcp.jar | Database connection pool implementation,based on package-renamed copy of Apache Commons Pool and Apache Commons DBCP | √ | √ | √ | | tomcat-i18n-es.jar | Optional JARs containing resource bundles for other languages。As default bundles are also included in each individual JAR,they can be safely removed if no internationalization of messages is needed | √ | √ | √ | | tomcat-i18n-fr.jar | ? | √ | √ | √ | | tomcat-i18n-fa.jar | ? | √ | √ | √ | | tomcat-jdbc.jar | An alternative database connection pool implementation,known as Tomcat JDBC pool。See documentation for more details | **×** | √ | √ | | tomcat-jni.jar | ? | **×** | **×** | √ | | tomcat-spdy.jar | ? | **×** | **×** | √ | | tomcat-util.jar | Common classes used by various components of Apache Tomcat | **×** | √ | √ | | tomcat-util-scan.jar | ? | **×** | **×** | √ | | tomcat-websocket.jar | 在Tomcat7中這個包叫tomcat7-websocket.jar | **×** | √ | √ | | websocket-api.jar | ? | **×** | √ | √ | ### Tomcat部署的兩種方法 (1)server.xml Context部署:在server.xml文件中增加一個Context元素 (2)Context XML片段文件部署:在Tomcat的CATALINA_HOME/conf/[EngineName]/[Hostname]目錄中增加一個新的Context XML片段文件 ### Tomcat性能優化 ### 性能指標:吞吐量 Responsetime、CpuLoad、MemoryUsage ### 壓力測試工具 a、Apache Benchmark(ab,內含在Apache httpd Web服務器的發行版中,網址為:http://httpd.apache.org) ? ?ab -k -n 100000 -c 149 http://ip:8080 b、Siege(http://www.joedog.org/JoeDog/Siege) siege -b -r 671 -c 149 tomcathost:8080 c、Apache Jakarta的JMeter(http://jakarta.apache.org/jmeter),據說易用、靈活、圖形化、報表性強、但是單純測試“每秒鐘請求并完成非常大量HTTP請求”方面,不如以上兩種 ### Tomcat連接器 Tomcat提供了3種不同的服務器設計實現方法,JIO(java.io):這是Tomcat默認的連接器實現辦法,也成為“Coyote”,是使用java.io核心網絡類的純Java TCP實現;APR(Apache Portable Runtime),使用了libtcnative庫(c語言編寫的),適用于HTTPS鏈接;NIO(java.nio),非阻塞的方式,更少的線程 ### Apache連接器 mod_jk、mod_proxy_ajp、mod_proxy_http ### JVM優化 所有的Java相關應用的JVM調優,其原理都是一致的,請參考這里:http://blog.csdn.net/puma_dong/article/details/12529905#t4 ### Tomcat優化 a、禁用DNS查詢,在Connection節點中,增加enableLookups="false",這個設置會導致getRemoteHost()只能獲取到IP地址; b、調整線程數,maxThreads默認是200,示例: <Connector port="80" protocol="HTTP/1.1" maxThreads="1000" minSpareThreads="200" maxSpareThreads="800" acceptCount="800" connectionTimeout="20000" enableLookups="false" redirectPort="8443"/> **maxThrads和acceptCount,這兩個值如何起作用,請看下面三種場景:** a、接受一個請求,此時tomcat啟動的線程數沒有到達maxThreads,tomcat會啟動一個線程來處理此請求; b、接受一個請求,此時tomcat啟動的線程數已經到達maxThreads,tomcat會把此請求放入等待隊列,等待空閑線程; c、接受一個請求,此時tomcat啟動的線程數已經到達maxThreads,等待隊列中得請求個數也達到了acceptCount,此時tomcat會直接拒絕此次請求,返回connection refused **maxThreads如何配置:** 一般的服務器操作都包含量方面:1計算(主要消耗cpu),2等待(io、數據庫等); 第一種極端情況,如果我們的操作是純粹的計算,那么系統響應時間的主要限制就是cpu的運算能力,此時maxThreads應該盡量設的小,降低同一時間內爭搶cpu的線程個數,可以提高計算效率,提高系統的整體處理能力; 第二種極端情況,如果我們的操作純粹是IO或者數據庫,那么響應時間的主要限制就變為等待外部資源,此時maxThreads應該盡量設的大,這樣才能提高同時處理請求的個數,從而提高系統整體的處理能力。此情況因為tomcat同時處理的請求量會比較大,所以需要關注一下tomcat的虛擬機內存設置和linux的open file限制; 如果maxThreads設置過大,比如5000,由于cpu就需要在多個線程之間來回切換,以保證每個線程都會獲得cpu時間,即通常我們說的并發執行,反而降低了cpu效率,直接導致響應時間急劇增加,所以maxThreads的配置絕對不是越大越好; 現實應用中,我們的操作都會包含以上兩種類型(計算、等待),所以maxThreads的配置并沒有一個最優值,一定要根據具體情況來配置; 最好的做法是:在不斷測試的基礎上,不斷調整、優化,才能得到最合理的配置。 **acceptCount如何配置:** 可以設置跟maxThreads一樣大,這個值應該是主要根據應用的訪問峰值與平均值來權衡配置的; 如果設的較小,可以保證接受的請求較快響應,但是超出的請求可能就直接被拒絕; 如果設的較大,可能就出現大量的請求超時的情況,因為我們系統的處理能力是一定的。 ### Tomcat和Apache的區別 (1)apache:是Web服務器,本身只支持靜態網頁,但可以通過插件擴展支持PHP、Java等 (2)tomcat:是應用服務器,它只是一個servlet容器,是Apache的擴展,較少直接用作Web服務器 ### Tomcat雞肋功能 (1)Tomcat支持多實例部署,即在一個Tomcat安裝的基礎上,通過配置多個實例,達到bin/lib等目錄共享,及版本統一的目的,實際如果想多實例,直接在生產中拷貝兩套Tomcat反而更簡單快捷 (2)Tomcat Admin管理Web界面,實際的生產中,不會用這個功能,并且應該是把這些功能從生產部署中刪除的,達到安全的目的 (3)熱部署,實際的生產中,更多的是冷卻部署 ### 總結 ### 原書作者觀點 原書作者的觀點是Tomcat處理靜態頁面和圖片的性能也是優于Apache的,他是通過一個不完全的測試案例:150個線程內(Tomcat默認運行的線程數),對小文件和小圖片進行壓力測試得出這個結論,所以他推崇“既把Tomcat作為Java容器,也直接用作Web服務器”,在中小應用中,這可能沒有問題,但是在大型/超大型互聯網應用中,Apache/Nginx的性能是被廣泛證明了的,Apache/Nginx+Tomcat的組合依然是更優的選擇。 ### 關于本書 關于Ant的內容,沒有去看,我用的是Maven; 關于Apache的內容,沒有去看,我用的是Nginx; 關于權限相關,沒有去看,應用場景很少,權限還是整體交給運維的好; 關于集群,沒有去看,個人不覺得Tomcat本身的集群有什么用。 ### 學習總結 在工作中經常使用Tomcat、JBoss、Jetty等Java容器,但都不曾系統的學習總結過,本次拿出一個周末兩天的時間,通過本書,較為系統的學習一下Tomcat,并結合互聯網的參考資料,寫下這篇學習總結,感覺還是受益良多。 關于《Tomcat權威指南》第二版這本書,是基于Tomcat6的,翻譯不是很專業,一些計算機技術術語翻譯的不夠準確,印刷中也有一些錯別字,所以對于沒有基礎的初學者,容易被誤導,如果有一定基礎,把這本書系統看一遍,作為工具書,還是不錯的。 關于本書的原作者,是spigit.com的軟件架構師,對于Tomcat作為Web服務器的性能評估較為樂觀,這個樂觀的估計沒有得到大數據量高并發系統的驗證;相反,僅僅把Tomcat作為Java容器,似乎更為妥當。 # Tomcat日志 Tomcat日志,默認情況下,在啟動的時候,會產生當天的文件,比如,catalina.2014-08-14.log,但是啟動完畢后,之后的控制臺日志就只往catalina.out文件里面寫了,為了每天產生一個日志,有多種方式: 1、官方網站:http://tomcat.apache.org/tomcat-7.0-doc/logging.html 2、網上多有介紹使用cronolog進行切割的方式 3、下面介紹配置Solr時,使用的Log4j的配置方式 把jcl-over-slf4j-1.6.6.jar、jul-to-slf4j-1.6.6.jar、log4j-1.2.16.jar、slf4j-api-1.6.6.jar、slf4j-log4j12-1.6.6.jar、log4j.properties 6個文件放在Tomcat安裝目錄/lib下面即可產生每天一個的cata.yyyy-mm-dd.log日志文件,log4j.properties內容如下(這個文件實際是在:\solr-4.9.0\example\resources 目錄下面的): ~~~ # Logging level log4j.rootLogger=INFO, file, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n #- size rotation with log cleanup. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.MaxFileSize=4MB log4j.appender.file.MaxBackupIndex=9 #- File to log to and log format log4j.appender.file.File=logs/solr.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看