真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

tomcat6優(yōu)化配置(參考網(wǎng)絡(luò)資源整理)

Tomcat的優(yōu)化分成兩塊:

專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)唐山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

 Tomcat啟動(dòng)命令行中的優(yōu)化參數(shù)即JVM優(yōu)化

 Tomcat容器自身參數(shù)的優(yōu)化(這塊很像ApacheHttp Server)

一、JVM的優(yōu)化

1.Tomcat首先跑在JVM之上的,因?yàn)樗膯?dòng)其實(shí)也只是一個(gè)java命令行,首先我們需要對(duì)這個(gè)JAVA的啟動(dòng)命令行進(jìn)行調(diào)優(yōu)。

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

2.Tomcat啟動(dòng)行參數(shù)的優(yōu)化

Tomcat 的啟動(dòng)參數(shù)位于tomcat的安裝目錄\bin目錄下,修改catalina.sh文件,注釋的最后一行后面增加下面參數(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"

參數(shù)解釋?zhuān)?/p>

-server

我不管你什么理由,只要你的tomcat是運(yùn)行在生產(chǎn)環(huán)境中的,這個(gè)參數(shù)必須給我加上,因?yàn)閠omcat默認(rèn)是以一種叫java –client的模式來(lái)運(yùn)行的,server即意味著你的tomcat是以真實(shí)的production的模式在運(yùn)行的,這也就意味著你的tomcat以 server模式運(yùn)行時(shí)將擁有:更大、更高的并發(fā)處理能力,更快更強(qiáng)捷的JVM垃圾回收機(jī)制,可以獲得更多的負(fù)載與吞吐量。。。更。。。還有更。。。

-Xms–Xmx

即JVM內(nèi)存設(shè)置了,把Xms與Xmx兩個(gè)值設(shè)成一樣是最優(yōu)的做法.

PS:一個(gè)系統(tǒng)隨著并發(fā)數(shù)越來(lái)越高,它的內(nèi)存使用情況逐步上升,上升到最高點(diǎn)不能上升了,開(kāi)始回落,你們不要認(rèn)為這個(gè)回落就是好事情,由其是大起大落,在內(nèi)存回落時(shí)它付出的代價(jià)是CPU高速開(kāi)始運(yùn)轉(zhuǎn)進(jìn)行垃圾回收,此時(shí)嚴(yán)重的甚至?xí)斐赡愕南到y(tǒng)出現(xiàn)“卡殼”就是你在好好的操作,突然網(wǎng)頁(yè)像死在那邊一樣幾秒甚至十幾秒 時(shí)間,因?yàn)镴VM正在進(jìn)行垃圾回收。

因此一開(kāi)始我們就把這兩個(gè)設(shè)成一樣,使得Tomcat在啟動(dòng)時(shí)就為最大化參數(shù)充分利用系統(tǒng)的效率,這個(gè)道理和jdbcconnection pool里的minpool size與maxpool size的需要設(shè)成一個(gè)數(shù)量是一樣的原理。如何知道我的JVM能夠使用最大值?。吭谠O(shè)這個(gè)最大內(nèi)存即Xmx值時(shí)請(qǐng)先打開(kāi)一個(gè)命令行,鍵入如下的命令:

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

–Xmn

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

-Xss

是指設(shè)定每個(gè)線(xiàn)程的堆棧大小。這個(gè)就要依據(jù)你的程序,看一個(gè)線(xiàn)程大約需要占用多少內(nèi)存,可能會(huì)有多少線(xiàn)程同時(shí)運(yùn)行等。一般不易設(shè)置超過(guò)1M,要不然容易出現(xiàn)out of memory。

-XX:+AggressiveOpts

作用如其名(aggressive),啟用這個(gè)參數(shù),則每當(dāng)JDK版本升級(jí)時(shí),你的JVM都會(huì)使用最新加入的優(yōu)化技術(shù)(如果有的話(huà))

-XX:+UseBiasedLocking

啟用一個(gè)優(yōu)化了的線(xiàn)程鎖,我們知道在我們的appserver,每個(gè)http請(qǐng)求就是一個(gè)線(xiàn)程,有的請(qǐng)求短有的請(qǐng)求長(zhǎng),就會(huì)有請(qǐng)求排隊(duì)的現(xiàn)象,甚至還會(huì)出現(xiàn)線(xiàn)程阻塞,這個(gè)優(yōu)化了的線(xiàn)程鎖使得你的appserver內(nèi)對(duì)線(xiàn)程處理自動(dòng)進(jìn)行最優(yōu)調(diào)配。

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

JVM使用-XX:PermSize設(shè)置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;

在數(shù)據(jù)量的很大的文件導(dǎo)出時(shí),一定要把這兩個(gè)值設(shè)置上,否則會(huì)出現(xiàn)內(nèi)存溢出的錯(cuò)誤。

由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4。

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

-XX:+DisableExplicitGC

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

-XX:+UseParNewGC

對(duì)年輕代采用多線(xiàn)程并行回收,這樣收得快。

-XX:+UseConcMarkSweepGC

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

我們知道頻頻繁的GC會(huì)造面JVM的大起大落從而影響到系統(tǒng)的效率,因此使用了CMS GC后可以在GC次數(shù)增多的情況下,每次GC的響應(yīng)時(shí)間卻很短,比如說(shuō)使用了CMS GC后經(jīng)過(guò)jprofiler的觀察,GC被觸發(fā)次數(shù)非常多,而每次GC耗時(shí)僅為幾毫秒。

-XX:MaxTenuringThreshold

設(shè)置垃圾最大年齡。如果設(shè)置為0的話(huà),則年輕代對(duì)象不經(jīng)過(guò)Survivor區(qū),直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一 個(gè)較大值,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概率。

這個(gè)值的設(shè)置是根據(jù)本地的jprofiler監(jiān)控后得到的一個(gè)理想的值,不能一概而論原搬照抄。

-XX:+CMSParallelRemarkEnabled

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

-XX:+UseCMSCompactAtFullCollection

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

-XX:LargePageSizeInBytes

指定 Java heap的分頁(yè)頁(yè)面大小

-XX:+UseFastAccessorMethods

get,set 方法轉(zhuǎn)成本地代碼

-XX:+UseCMSInitiatingOccupancyOnly

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

-XX:CMSInitiatingOccupancyFraction=70

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

因此這個(gè)參數(shù)的設(shè)置必須與Xmn關(guān)聯(lián)在一起。

-Djava.awt.headless=true

這個(gè)參數(shù)一般我們都是放在最后使用的,這全參數(shù)的作用是這樣的,有時(shí)我們會(huì)在我們的J2EE工程中使用一些圖表工具如:jfreechart,用于在web網(wǎng)頁(yè)輸出GIF/JPG等流,在winodws環(huán)境下,一般我們的app server在輸出圖形時(shí)不會(huì)碰到什么問(wèn)題,但是在linux/unix環(huán)境下經(jīng)常會(huì)碰到一個(gè)exception導(dǎo)致你在winodws開(kāi)發(fā)環(huán)境下圖片顯示的好好可是在linux/unix下卻顯示不出來(lái),因此加上這個(gè)參數(shù)以免避這樣的情況出現(xiàn)。

上述這樣的配置,基本上可以達(dá)到:

   系統(tǒng)響應(yīng)時(shí)間增快

   JVM回收速度增快同時(shí)又不影響系統(tǒng)的響應(yīng)率

   JVM內(nèi)存最大化利用

   線(xiàn)程阻塞情況最小化

二、tomcat本身的優(yōu)化

1.Tomcat容器內(nèi)的優(yōu)化

前面我們對(duì)Tomcat啟動(dòng)時(shí)的命令進(jìn)行了優(yōu)化,增加了系統(tǒng)的JVM可使用數(shù)、垃圾回收效率與線(xiàn)程阻塞情況、增加了系統(tǒng)響應(yīng)效率等還有一個(gè)很重要的指標(biāo),我們沒(méi)有去做優(yōu)化,就是吞吐量。

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

這一行就是我們的tomcat容器性能參數(shù)設(shè)置的地方,它一般都會(huì)有一個(gè)默認(rèn)值,這些默認(rèn)值是遠(yuǎn)遠(yuǎn)不夠我們的使用的,我們來(lái)看經(jīng)過(guò)更改后的這一段的配置:

參數(shù)釋義:

URIEncoding=”UTF-8”

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

maxSpareThreads

maxSpareThreads 的意思就是如果空閑狀態(tài)的線(xiàn)程數(shù)多于設(shè)置的數(shù)目,則將這些線(xiàn)程中止,減少這個(gè)池中的線(xiàn)程總數(shù)。

minSpareThreads

最小備用線(xiàn)程數(shù),tomcat啟動(dòng)時(shí)的初始化的線(xiàn)程數(shù)。

enableLookups

這個(gè)功效和Apache中的HostnameLookups一樣,設(shè)為關(guān)閉。

connectionTimeout

connectionTimeout為網(wǎng)絡(luò)連接超時(shí)時(shí)間毫秒數(shù)。

maxThreads

maxThreads Tomcat使用線(xiàn)程來(lái)處理接收的每個(gè)請(qǐng)求。這個(gè)值表示Tomcat可創(chuàng)建的最大的線(xiàn)程數(shù),即最大并發(fā)數(shù)。

acceptCount

acceptCount是當(dāng)線(xiàn)程數(shù)達(dá)到maxThreads后,后續(xù)請(qǐng)求會(huì)被放入一個(gè)等待隊(duì)列,這個(gè)acceptCount是這個(gè)隊(duì)列的大小,如果這個(gè)隊(duì)列也滿(mǎn)了,就直接refuse connection

maxProcessors

minProcessors

在Java中線(xiàn)程是程序運(yùn)行時(shí)的路徑,是在一個(gè)程序中與其它控制線(xiàn)程無(wú)關(guān)的、能夠獨(dú)立運(yùn)行的代碼段。它們共享相同的地址空間。多線(xiàn)程幫助程序員寫(xiě)出CPU最大利用率的高效程序,使空閑時(shí)間保持最低,從而接受更多的請(qǐng)求。

useURIValidationHack

我們來(lái)看一下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設(shè)成"false",可以減少它對(duì)一些url的不必要的檢查從而減省開(kāi)銷(xiāo)。

enableLookups="false"

為了消除DNS查詢(xún)對(duì)性能的影響我們可以關(guān)閉DNS查詢(xún),方式是修改server.xml文件中的enableLookups參數(shù)值。

disableUploadTimeout

類(lèi)似于Apache中的keeyalive一樣

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

compression="on" compressionMinSize="2048"             

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

HTTP壓縮可以大大提高瀏覽網(wǎng)站的速度,它的原理是,在客戶(hù)端請(qǐng)求網(wǎng)頁(yè)后,從服務(wù)器端將網(wǎng)頁(yè)文件壓縮,再下載到客戶(hù)端,由客戶(hù)端的瀏覽器負(fù)責(zé)解壓縮并瀏覽。相對(duì)于普通的瀏覽過(guò)程HTML,CSS,Javascript , Text,它可以節(jié)省40%左右的流量。更為重要的是,它可以對(duì)動(dòng)態(tài)生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網(wǎng)頁(yè)也能進(jìn)行壓縮,壓縮效率驚人。

1)compression="on" 打開(kāi)壓縮功能

2)compressionMinSize="2048" 啟用壓縮的輸出內(nèi)容大小,這里面默認(rèn)為2KB

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

4)compressableMimeType="text/html,text/xml" 壓縮類(lèi)型

最后不要忘了把8443端口的地方也加上同樣的配置,因?yàn)槿绻覀冏遠(yuǎn)ttps協(xié)議的話(huà),我們將會(huì)用到8443端口這個(gè)段的配置,對(duì)吧?


    

2.apr模式的使用

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

官方文檔中對(duì)三種模式的對(duì)比:

                  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默認(rèn)的運(yùn)行模式,NIO的配置比較簡(jiǎn)單,將connector中的協(xié)議改成NIO即可:

  HTTP/1.1 --> protocol="org.apache.coyote.http11.Http11NioProtocol"

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

APR library[APR庫(kù)]

JNI wrappers for APR used by Tomcat (libtcnative)

OpenSSL libraries[OpenSSL庫(kù)]

此外,與配置nio運(yùn)行模式一樣,也需要將對(duì)應(yīng)的Connector節(jié)點(diǎn)的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

重啟運(yùn)行tomcat就可以了


網(wǎng)站名稱(chēng):tomcat6優(yōu)化配置(參考網(wǎng)絡(luò)資源整理)
URL地址:http://weahome.cn/article/gogsid.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部