91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

tomcat6優化配置(參考網絡資源整理)

發布時間:2020-07-24 11:09:35 來源:網絡 閱讀:251 作者:vick05 欄目:關系型數據庫

Tomcat的優化分成兩塊:

 Tomcat啟動命令行中的優化參數即JVM優化

 Tomcat容器自身參數的優化(這塊很像ApacheHttp Server)


一、JVM的優化

1.Tomcat首先跑在JVM之上的,因為它的啟動其實也只是一個java命令行,首先我們需要對這個JAVA的啟動命令行進行調優。

PS:這邊討論的JVM優化是基于Oracle Sun的jdk1.6版本以上,其它JDK或者低版本JDK不適用。

2.Tomcat啟動行參數的優化

Tomcat 的啟動參數位于tomcat的安裝目錄\bin目錄下,修改catalina.sh文件,注釋的最后一行后面增加下面參數:

export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"


參數解釋:

-server

我不管你什么理由,只要你的tomcat是運行在生產環境中的,這個參數必須給我加上,因為tomcat默認是以一種叫java –client的模式來運行的,server即意味著你的tomcat是以真實的production的模式在運行的,這也就意味著你的tomcat以 server模式運行時將擁有:更大、更高的并發處理能力,更快更強捷的JVM垃圾回收機制,可以獲得更多的負載與吞吐量。。。更。。。還有更。。。

-Xms–Xmx

即JVM內存設置了,把Xms與Xmx兩個值設成一樣是最優的做法.

PS:一個系統隨著并發數越來越高,它的內存使用情況逐步上升,上升到最高點不能上升了,開始回落,你們不要認為這個回落就是好事情,由其是大起大落,在內存回落時它付出的代價是CPU高速開始運轉進行垃圾回收,此時嚴重的甚至會造成你的系統出現“卡殼”就是你在好好的操作,突然網頁像死在那邊一樣幾秒甚至十幾秒 時間,因為JVM正在進行垃圾回收。

因此一開始我們就把這兩個設成一樣,使得Tomcat在啟動時就為最大化參數充分利用系統的效率,這個道理和jdbcconnection pool里的minpool size與maxpool size的需要設成一個數量是一樣的原理。如何知道我的JVM能夠使用最大值啊?在設這個最大內存即Xmx值時請先打開一個命令行,鍵入如下的命令:

java -Xmx2048m -version #檢查是否支持你所設的值

–Xmn

設置年輕代大小為512m。整個堆大小=年輕代大小+年老代大小+持久代大小.持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。

-Xss

是指設定每個線程的堆棧大小。這個就要依據你的程序,看一個線程大約需要占用多少內存,可能會有多少線程同時運行等。一般不易設置超過1M,要不然容易出現out of memory。

-XX:+AggressiveOpts

作用如其名(aggressive),啟用這個參數,則每當JDK版本升級時,你的JVM都會使用最新加入的優化技術(如果有的話)

-XX:+UseBiasedLocking

啟用一個優化了的線程鎖,我們知道在我們的appserver,每個http請求就是一個線程,有的請求短有的請求長,就會有請求排隊的現象,甚至還會出現線程阻塞,這個優化了的線程鎖使得你的appserver內對線程處理自動進行最優調配。

-XX:PermSize=128M-XX:MaxPermSize=256M

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

在數據量的很大的文件導出時,一定要把這兩個值設置上,否則會出現內存溢出的錯誤。

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

那么,如果是物理內存4GB,那么64分之一就是64MB,這就是PermSize默認值,也就是永生代內存初始大小;四分之一是1024MB,這就是MaxPermSize默認大小。

-XX:+DisableExplicitGC

在程序代碼中不允許有顯示的調用”System.gc()”。看到過有兩個極品工程中每次在DAO操作結束時手動調用System.gc()一下,覺得這樣 做好像能夠解決它們的out of memory問題一樣,付出的代價就是系統響應時間嚴重降低,就和我在關于Xms,Xmx里的解釋的原理一樣,這樣去調用GC導致系統的JVM大起大落,性能不到什么地方去喲!

-XX:+UseParNewGC

對年輕代采用多線程并行回收,這樣收得快。

-XX:+UseConcMarkSweepGC

即CMS gc,這一特性只有jdk1.5即后續版本才具有的功能,它使用的是gc估算觸發和heap占用觸發。

我們知道頻頻繁的GC會造面JVM的大起大落從而影響到系統的效率,因此使用了CMS GC后可以在GC次數增多的情況下,每次GC的響應時間卻很短,比如說使用了CMS GC后經過jprofiler的觀察,GC被觸發次數非常多,而每次GC耗時僅為幾毫秒。

-XX:MaxTenuringThreshold

設置垃圾最大年齡。如果設置為0的話,則年輕代對象不經過Survivor區,直接進入年老代。對于年老代比較多的應用,可以提高效率。如果將此值設置為一 個較大值,則年輕代對象會在Survivor區進行多次復制,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概率。

這個值的設置是根據本地的jprofiler監控后得到的一個理想的值,不能一概而論原搬照抄。

-XX:+CMSParallelRemarkEnabled

在使用UseParNewGC 的情況下, 盡量減少 mark 的時間

-XX:+UseCMSCompactAtFullCollection

在使用concurrent gc 的情況下, 防止 memoryfragmention, 對live object 進行整理, 使 memory 碎片減少。

-XX:LargePageSizeInBytes

指定 Java heap的分頁頁面大小

-XX:+UseFastAccessorMethods

get,set 方法轉成本地代碼

-XX:+UseCMSInitiatingOccupancyOnly

指示只有在 oldgeneration 在使用了初始化的比例后concurrent collector 啟動收集

-XX:CMSInitiatingOccupancyFraction=70

CMSInitiatingOccupancyFraction,這個參數設置有很大技巧,基本上滿足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就 不會出現promotion failed。在我的應用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90說明年老代到90%滿的時候開始執行對年老代的并發垃圾回收(CMS),這時還 剩10%的空間是548810%=548兆,所以即使Xmn(也就是年輕代共512兆)里所有對象都搬到年老代里,548兆的空間也足夠了,所以只要滿足上面的公式,就不會出現垃圾回收時的promotion failed;

因此這個參數的設置必須與Xmn關聯在一起。

-Djava.awt.headless=true

這個參數一般我們都是放在最后使用的,這全參數的作用是這樣的,有時我們會在我們的J2EE工程中使用一些圖表工具如:jfreechart,用于在web網頁輸出GIF/JPG等流,在winodws環境下,一般我們的app server在輸出圖形時不會碰到什么問題,但是在linux/unix環境下經常會碰到一個exception導致你在winodws開發環境下圖片顯示的好好可是在linux/unix下卻顯示不出來,因此加上這個參數以免避這樣的情況出現。

上述這樣的配置,基本上可以達到:

   系統響應時間增快

   JVM回收速度增快同時又不影響系統的響應率

   JVM內存最大化利用

   線程阻塞情況最小化


二、tomcat本身的優化

1.Tomcat容器內的優化

前面我們對Tomcat啟動時的命令進行了優化,增加了系統的JVM可使用數、垃圾回收效率與線程阻塞情況、增加了系統響應效率等還有一個很重要的指標,我們沒有去做優化,就是吞吐量。

打開tomcat安裝目錄\conf\server.xml文件,定位到這一行:

<Connector port="8080" protocol="HTTP/1.1"

這一行就是我們的tomcat容器性能參數設置的地方,它一般都會有一個默認值,這些默認值是遠遠不夠我們的使用的,我們來看經過更改后的這一段的配置:

<Connector port="8080" protocol="HTTP/1.1"
          URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
          acceptCount="300" maxThreads="300" maxProcessors="2000" minProcessors="5"
          useURIValidationHack="false" 
  compression="on"
  compressionMinSize="2048"
          compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
          redirectPort="8443"
/>


參數釋義:

URIEncoding=”UTF-8”

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

maxSpareThreads

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

minSpareThreads

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

enableLookups

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

connectionTimeout

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

maxThreads

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

acceptCount

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

maxProcessors

minProcessors

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

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"
/>

2.apr模式的使用

tomcat connector支持3種運行模式,即:BIO(即阻塞式I/O操作)、NIO(non-blocking I/O)、APR(Apache Portable Runtime/Apache可移植運行時)

官方文檔中對三種模式的對比:

                  Java Blocking Connector       Java Nio Blocking Connector       APR Connector

    Classname         Http11Protocol                  Http11NioProtocol         Http11AprProtocol

    Tomcat Version   3.x 4.x 5.x 6.x                       6.x                     5.5.x 6.x

    Support Polling         NO                             YES                        YES

    Polling Size           N/A                   Unlimited - Restricted by mem        Unlimited - Configurable

    Read HTTP Request     Blocking                     Non Blocking                   Blocking

    Read HTTP Body        Blocking                     Sim Blocking                   Blocking

    Write HTTP Response   Blocking                     Sim Blocking                   Blocking

    SSL Support           Java SSL                     Java SSL                       OpenSSL

    SSL Handshake         Blocking                     Non blocking                   Blocking

    Max Connections       maxThreads                   See polling size               See polling size

BIO是tomcat默認的運行模式,NIO的配置比較簡單,將connector中的協議改成NIO即可:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />  HTTP/1.1 --> protocol="org.apache.coyote.http11.Http11NioProtocol"

Tomcat apr運行模式的配置是三種運行模式之中相對比較麻煩的一種。據官方文檔所述,Tomcat apr需要以下三個組件的支持:

APR library[APR庫]

JNI wrappers for APR used by Tomcat (libtcnative)

OpenSSL libraries[OpenSSL庫]

此外,與配置nio運行模式一樣,也需要將對應的Connector節點的protocol屬性值改為org.apache.coyote.http11.Http11AprProtocol。

下載tomcat-native-1.1.33-src.tar.gz

tar xzf tomcat-native-1.1.33-src.tar.gz
cd tomcat-native-1.1.33-src/jni/native
./configure 
make 
make install


編輯/etc/profile,末尾增加

export LD_LIBRARY_PATH=/usr/local/apr/lib


重啟運行tomcat就可以了


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥芬河市| 民和| 博客| 安国市| 永泰县| 漯河市| 乡城县| 将乐县| 玛沁县| 固始县| 泽普县| 临夏县| 谷城县| 久治县| 乌拉特后旗| 三明市| 泸溪县| 西乡县| 新昌县| 宣恩县| 蕉岭县| 大方县| 乌鲁木齐市| 南皮县| 宁城县| 黄骅市| 金山区| 互助| 萍乡市| 台中县| 浪卡子县| 仁化县| 宁阳县| 依兰县| 武功县| 桑植县| 伊宁市| 新余市| 余庆县| 包头市| 梁山县|