關于Tomcat和Tomcat的面試問題

          http://www.jfox.info/guan-yu-Tomcat-he-Tomcat-de-mian-shi-wen-ti 
          http://www.jfox.info/guan-yu-Tomcat-he-Tomcat-de-mian-shi-wen-ti

          關于Tomcat和Tomcat的面試問題

          一、Tomcat的缺省是多少,怎么修改

          Tomcat的缺省端口號是8080.
          修改Tomcat端口號:
          1.找到Tomcat目錄下的conf文件夾
          2.進入conf文件夾里面找到server.xml文件
          3.打開server.xml文件
          4.在server.xml文件里面找到下列信息
          maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
          enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
          connectionTimeout=”20000″ disableUploadTimeout=”true” />
          5.把port=”8080″改成port=”8888″,并且保存
          6.啟動Tomcat,并且在IE瀏覽器里面的地址欄輸入http://127.0.0.1:8888/

          7、tomcat默認采用的BIO模型,在幾百并發下性能會有很嚴重的下降。tomcat自帶還有NIO的模型,另外也可以調用APR的庫來實現操作系統級別控制。
            NIO模型是內置的,調用很方便,只需要將上面配置文件中protocol修改成 org.apache.coyote.http11.Http11NioProtocol,重啟即可生效。如下面的參數配置,默認的是HTTP/1.1。
              <Connector port=”8080″  
                         protocol=”org.apache.coyote.http11.Http11NioProtocol” 
                         connectionTimeout=”20000″ 
                         redirectPort=”8443″  
                         maxThreads=”500″  
                         minSpareThreads=”20″ 
                         acceptCount=”100″
                         disableUploadTimeout=”true”
                         enableLookups=”false”  
                         URIEncoding=”UTF-8″ />

          二、tomcat 如何優化?

           1、優化連接配置.這里以tomcat7的參數配置為例,需要修改conf/server.xml文件,修改連接數,關閉客戶端dns查詢。

          參數解釋:

           URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里還有搞個mod_encoding,還要手工編譯

           maxSpareThreads : 如果空閑狀態的線程數多于設置的數目,則將這些線程中止,減少這個池中的線程總數。

           minSpareThreads : 最小備用線程數,tomcat啟動時的初始化的線程數。

           enableLookups : 這個功效和Apache中的HostnameLookups一樣,設為關閉。

           connectionTimeout : connectionTimeout為網絡連接超時時間毫秒數。

           maxThreads : maxThreads Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數,即最大并發數。

           acceptCount : acceptCount是當線程數達到maxThreads后,后續請求會被放入一個等待隊列,這個acceptCount是這個隊列的大小,如果這個隊列也滿了,就直接refuse connection

           maxProcessors與minProcessors : 在 Java中線程是程序運行時的路徑,是在一個程序中與其它控制線程無關的、能夠獨立運行的代碼段。它們共享相同的地址空間。多線程幫助程序員寫出CPU最 大利用率的高效程序,使空閑時間保持最低,從而接受更多的請求。

          通常Windows是1000個左右,Linux是2000個左右。

           useURIValidationHack:

          我們來看一下tomcat中的一段源碼:

          【security】

                  if (connector.getUseURIValidationHack()) {

                      String uri = validate(request.getRequestURI());

                      if (uri == null) {

                          res.setStatus(400);

                          res.setMessage(“Invalid URI”);

                          throw new IOException(“Invalid URI”);

                      } else {

                          req.requestURI().setString(uri);

                          // Redoing the URI decoding

                          req.decodedURI().duplicate(req.requestURI());

                          req.getURLDecoder().convert(req.decodedURI(), true);

          可以看到如果把useURIValidationHack設成”false”,可以減少它對一些url的不必要的檢查從而減省開銷。

           enableLookups=”false” : 為了消除DNS查詢對性能的影響我們可以關閉DNS查詢,方式是修改server.xml文件中的enableLookups參數值。

           disableUploadTimeout :類似于Apache中的keeyalive一樣

          給Tomcat配置gzip壓縮(HTTP壓縮)功能

          compression=”on” compressionMinSize=”2048″

          compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

          HTTP 壓縮可以大大提高瀏覽網站的速度,它的原理是,在客戶端請求網頁后,從服務器端將網頁文件壓縮,再下載到客戶端,由客戶端的瀏覽器負責解壓縮并瀏覽。相對于普通的瀏覽過程HTML,CSS,Javascript , Text ,它可以節省40%左右的流量。更為重要的是,它可以對動態生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率驚人。

          1)compression=”on” 打開壓縮功能

          2)compressionMinSize=”2048″ 啟用壓縮的輸出內容大小,這里面默認為2KB

          3)noCompressionUserAgents=”gozilla, traviata” 對于以下的瀏覽器,不啟用壓縮

          4)compressableMimeType=”text/html,text/xml” 壓縮類型

          最后不要忘了把8443端口的地方也加上同樣的配置,因為如果我們走https協議的話,我們將會用到8443端口這個段的配置,對吧?

          <!–enable tomcat ssl–>

              <Connector port=”8443″ protocol=”HTTP/1.1″

                         URIEncoding=”UTF-8″  minSpareThreads=”25″ maxSpareThreads=”75″

                    enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″

                    acceptCount=”300″  maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″

                    useURIValidationHack=”false”

                              compression=”on” compressionMinSize=”2048″

                              compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

                          SSLEnabled=”true”

                     scheme=”https” secure=”true”

                     clientAuth=”false” sslProtocol=”TLS”

                     keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”

                />

          好了,所有的Tomcat優化的地方都加上了。

          2、優化JDK
          Tomcat默認可以使用的內存為128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下設置:
          JAVA_OPTS=”‘$JAVA_OPTS” -Xms[初始化內存大小] -Xmx[可以使用的最大內存]

          設置環境變量:export JAVA_OPTS=””$JAVA_OPTS” -Xms[初始化內存大小] -Xmx[可以使用的最大內存]”
          一般說來,你應該使用物理內存的 80% 作為堆大小。如果本機上有Apache服務器,可以先折算Apache需要的內存,然后修改堆大小。建議設置為70%;建議設置[[初始化內存大小]等于[可以使用的最大內存],這樣可以減少平凡分配堆而降低性能。
          本例使用加入環境變量的方式:
          # vi /etc/profile
          加入:export JAVA_OPTS=””$JAVA_OPTS” -Xms700 —Xmx700
          # source /etc/profile

          【參數說明】

          -Xms 是指設定程序啟動時占用內存大小。一般來講,大點,程序會啟動的 快一點,但是也可能會導致機器暫時間變慢。

          -Xmx 是指設定程序運行期間最大可占用的內存大小。如果程序運行需要占 用更多的內存,超出了這個設置值,就會拋出OutOfMemory 異常。

          -Xss 是指設定每個線程的堆棧大小。這個就要依據你的程序,看一個線程 大約需要占用多少內存,可能會有多少線程同時運行等。

          -XX:PermSize設置非堆內存初始值,默認是物理內存的1/64 。

          -XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。

          三、tomcat 有那幾種Connector 運行模式?

          tomcat的運行模式有3種.修改他們的運行模式.3種模式的運行是否成功,可以看他的啟動控制臺,或者啟動日志.或者登錄他們的默認頁面http://localhost:8080/查看其中的服務器狀態。

          1)bio

          默認的模式,性能非常低下,沒有經過任何優化處理和支持.

          2)nio

          利用java的異步io護理技術,no blocking IO技術.

          想運行在該模式下,直接修改server.xml里的Connector節點,修改protocol為

           <Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol”
              connectionTimeout=”20000″
              URIEncoding=”UTF-8″
              useBodyEncodingForURI=”true”
              enableLookups=”false”
              redirectPort=”8443″ />

          啟動后,就可以生效。

          3)apr

          安裝起來最困難,但是從操作系統級別來解決異步的IO問題,大幅度的提高性能.

          必須要安裝apr和native,直接啟動就支持apr。下面的修改純屬多余,僅供大家擴充知識,但仍然需要安裝apr和native

          如nio修改模式,修改protocol為org.apache.coyote.http11.Http11AprProtocol

          posted on 2016-06-19 10:31 youngturk 閱讀(405) 評論(0)  編輯  收藏 所屬分類: 筆試題

          <2016年6月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結構
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學習

          Flex學習

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大丰市| 祁东县| 临猗县| 余姚市| 龙山县| 澜沧| 原平市| 赣榆县| 安达市| 磴口县| 叶城县| 巫山县| 江山市| 太湖县| 襄城县| 家居| 永昌县| 登封市| 永宁县| 夏邑县| 香港| 定安县| 东丽区| 眉山市| 南郑县| 喀喇沁旗| 北票市| 湘潭县| 翁源县| 潼南县| 儋州市| 古蔺县| 邹平县| 灵川县| 麻城市| 宜都市| 乌拉特后旗| 句容市| 康平县| 丰原市| 施秉县|