電商網(wǎng)站怎么制作全國(guó)seo公司排名
一. 設(shè)置賬戶進(jìn)入管理頁面
通過瀏覽器進(jìn)入Tomcat7的管理模塊頁面:http://localhost:8080/manager/status
按照提示,在Tomcat7服務(wù)器指定的位置修改配置文件(conf/tomcat-users.xml),增加相應(yīng)的用戶和角色配置標(biāo)簽
<role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="admin" password="admin" roles="admin-gui,manager-gui"/> |
重啟服務(wù)器后,再次訪問服務(wù)器管理模塊頁面:http://localhost:8080/manager/status
二. tomcat的啟動(dòng)調(diào)優(yōu)
Tomcat7啟動(dòng)需要執(zhí)行bin/catalina.sh文件,所以需要修改此文件,增加配置。
(修改文件前請(qǐng)事先做備份: cp catalina.sh catalina.sh.bk)
在文件開頭處增加配置:
export JAVA_OPTS="-server -Xms1600M -Xmx1600M -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" |
注:32位操作系統(tǒng),無論你的內(nèi)存有多大,最大只支持4G內(nèi)存,所以,請(qǐng)一定要裝64位操作系統(tǒng)
執(zhí)行命令獲取當(dāng)前Tomcat服務(wù)的進(jìn)程號(hào)PID :? ps -ef | grep tomcat
執(zhí)行命令查看當(dāng)前系統(tǒng)中jvm堆的內(nèi)存詳情 jmap –heap PID
-server : -server 啟用jdk 的 server 版; 只要你的tomcat是運(yùn)行在生產(chǎn)環(huán)境中的,這個(gè)參數(shù)必須添加 因?yàn)閠omcat默認(rèn)是以一種叫java–client的模式來運(yùn)行的,server即意味著你的tomcat是以真實(shí)的production的模式在運(yùn)行的,這也就意味著你的tomcat以server模式運(yùn)行時(shí)將擁有:更大、更高的并發(fā)處理能力,更快更強(qiáng)捷的JVM垃圾回收機(jī)制,可以獲得更多的負(fù)載與吞吐量 |
-Xms–Xmx -Xms 初始堆大小;其初始空間(即-Xms)是物理內(nèi)存的1/64, -Xmx 最大堆大小; 最大空間(-Xmx)是物理內(nèi)存的1/4。 -Xmn 年輕代堆內(nèi)存大小,此處是(eden+ 2 survivor space),默認(rèn)為物理內(nèi)存的1/64. 可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng), 要加“m”說明是MB,否則就是KB了,在啟動(dòng)tomcat時(shí)會(huì)報(bào)內(nèi)存不足。 把Xms與Xmx兩個(gè)值設(shè)成一樣是最優(yōu)的做法 ================================================== 一般設(shè)置-Xms、-Xmx相等以避免在每次GC后調(diào)整堆的大小。因?yàn)槟J(rèn)空余堆內(nèi)存小于40%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到-Xms的最小限制。 |
-Xss :是指設(shè)定每個(gè)線程的棧大小。一般設(shè)置不超過1M,要不然容易出現(xiàn)out of memory。 |
-XX:+AggressiveOpts:積極的、生猛的,也即可以將最新版的JDK優(yōu)化后的新特性自動(dòng)注入 |
-XX:+UseBiasedLocking: 啟用一個(gè)優(yōu)化了的線程鎖,對(duì)于高并發(fā)訪問很重要 ,太多的請(qǐng)求忙不過來它自動(dòng)優(yōu)化,對(duì)于各自長(zhǎng)短不一的請(qǐng)求,出現(xiàn)的阻塞、排隊(duì)現(xiàn)象,他自己優(yōu)化。 |
-XX:PermSize -XX:MaxPermSize -XX:PermSize設(shè)置Perm區(qū)的初始大小,默認(rèn)是物理內(nèi)存的1/64; 在數(shù)據(jù)量的很大的文件導(dǎo)出時(shí),一定要把這兩個(gè)值設(shè)置上,否則會(huì)出現(xiàn)內(nèi)存溢出的錯(cuò)誤。 -XX:MaxPermSize設(shè)置Perm區(qū)的最大值,默認(rèn)是32M,建議達(dá)到物理內(nèi)存的1/4。 ?存放的都是jvm初始化時(shí)加載器加載的一些類型信息(包括類信息、常量、靜態(tài)變量等),這些信息的生存周期比較長(zhǎng),GC不會(huì)在主程序運(yùn)行期對(duì)PermGen Space進(jìn)行清理,所以如果你的應(yīng)用中有很多CLASS的話,就很可能出現(xiàn)PermGen Space錯(cuò)誤。 上述兩個(gè)參數(shù)值存在于jdk1.7之前,1.8后就沒有了。 |
-XX:MaxNewSize:設(shè)置最大的年輕代大小,默認(rèn)是16M -XX:NewSize 設(shè)置年輕代大小 |
-XX:+DisableExplicitGC : 在程序代碼中不允許有顯示的調(diào)用”System.gc()”,避免內(nèi)存的大起大落, 忽略手動(dòng)調(diào)用GC的代碼使得 System.gc()的調(diào)用就會(huì)變成一個(gè)空調(diào)用,完全不會(huì)觸發(fā)任何GC |
-XX:MaxTenuringThreshold:設(shè)置對(duì)象在新生代中存活的次數(shù),設(shè)置垃圾最大年齡 1 如果設(shè)置為零的話,則年輕代對(duì)象不經(jīng)過Survivor區(qū)直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用,可以提高效率。 2 如果將此值設(shè)置為一個(gè)較大值,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概率。 這個(gè)值的設(shè)置是根據(jù)本地監(jiān)控后得到的一個(gè)理想的值,不能一概而論原搬照抄。 默認(rèn)為:15。 |
-XX:+UseConcMarkSweepGC : 使用CMS內(nèi)存收集。即CMS gc,這一特性只有jdk1.5即后續(xù)版本才具有的功能,它使用的是gc估算觸發(fā)和heap占用觸發(fā)。 我們知道頻頻繁的GC會(huì)造面JVM的大起大落從而影響到系統(tǒng)的效率,因此使用了CMS GC后可以在GC次數(shù)增多的情況下,每次GC的響應(yīng)時(shí)間卻很短,比如說使用了CMS GC后經(jīng)過jprofiler的觀察,GC被觸發(fā)次數(shù)非常多,而每次GC耗時(shí)僅為幾毫秒 ?添加該參數(shù)表示啟動(dòng)并發(fā)標(biāo)識(shí)-清理(Mark-Sweep)回收器(CMS) |
-XX:+UseParNewGC :設(shè)置年輕代為并行收集,對(duì)年輕代采用多線程并行回收,這樣收得快 |
-XX:+CMSParallelRemarkEnabled : 在使用UseParNewGC 的情況下, 盡量減少mark 的時(shí)間,降低標(biāo)記停頓 |
-XX:+UseCMSCompactAtFullCollection : 在使用concurrent gc 的情況下, 防止 memoryfragmention, 對(duì)live object 進(jìn)行整理, 使 memory 碎片減少。 |
-XX:LargePageSizeInBytes :指定 Java heap的分頁頁面大小 |
-XX:+UseFastAccessorMethods :get,set 方法轉(zhuǎn)成本地代碼 |
-XX:+UseCMSInitiatingOccupancyOnly : 指示只有在 old generation 在使用了初始化的比例后concurrent collector 啟動(dòng)收集 |
-Djava.awt.headless=true 這個(gè)參數(shù)一般我們都是放在最后使用的, 在web網(wǎng)頁中可能會(huì)輸出GIF/JPG等圖片流,在linux/unix環(huán)境下經(jīng)常會(huì)碰到一個(gè)exception導(dǎo)致你在winodws開發(fā)環(huán)境下圖片顯示的好好可是在linux/unix下卻顯示不出來,因此加上這個(gè)參數(shù)以免避這樣的情況出現(xiàn)。 |
-XX:+PrintGCDetails :打印GC詳情 |
三.?Tomcat并發(fā)優(yōu)化
優(yōu)化前
基礎(chǔ)優(yōu)化
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" ?maxThreads="600" ?minSpareThreads="100" ?maxSpareThreads="500" ?acceptCount="700" ?connectionTimeout="20000" ?redirectPort="8443" /> |
MaxThreads: 設(shè)定在監(jiān)聽端口的線程的最大數(shù)目,這個(gè)值也決定了服務(wù)器可以同時(shí)響應(yīng)客戶請(qǐng)求的最大數(shù)目。即最大并發(fā)數(shù),默認(rèn)值為200,建議修改為500以上。保守 600 ~ 900 |
minSpareThreads: Tomcat初始化時(shí)創(chuàng)建的線程數(shù)。默認(rèn)值是10, 此處我們?cè)O(shè)置為100 |
maxSpareThreads: 一旦創(chuàng)建的線程超過這個(gè)值,Tomcat就會(huì)關(guān)閉不再需要的socket線程。此處的值我們?cè)O(shè)置為500。 |
acceptCount: 當(dāng)所有可以使用的處理請(qǐng)求的線程都被用光時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),超過這個(gè)數(shù)的請(qǐng)求將不予處理,而返回Connection refused錯(cuò)誤;默認(rèn)值100 |
connectionTimeout: 等待超時(shí)的時(shí)間數(shù)(以毫秒為單位),建議修改為20000以上; |
高級(jí)優(yōu)化
<Connector? port="8080" ??? protocol="org.apache.coyote.http11.Http11NioProtocol" ??? 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" ??? redirectPort="8443"/> |
參數(shù)說明
URIEncoding=”UTF-8” 使得tomcat可以解析含有中文名的文件的url,在server.xml文件的Connector標(biāo)簽中增加URIEncoding="UTF-8"屬性,解決中文參數(shù)亂碼問題。 |
minSpareThreads: |
maxSpareThreads |
enableLookups 如果希望調(diào)用request.getRemoteHost()進(jìn)行DNS查詢,以返回遠(yuǎn)程客戶的實(shí)際主機(jī)名,將enableLookups設(shè)為true。 如果希望忽略DNS查詢,僅僅返回IP地址,設(shè)為false(這樣提高了性能)。 缺省情況下,DNS查詢是使能的。 一句話:是否反查域名,取值為: true 或 false 。為了提高處理能力,應(yīng)設(shè)置為 false |
disableUploadTimeout 類似于Apache中的keepalive一樣,是否需要tomcat容器單獨(dú)設(shè)置上傳時(shí)間限制,這里是不用,還是使用標(biāo)準(zhǔn)的,不去給上傳的附件單獨(dú)做超時(shí)設(shè)置。 |
connectionTimeout : |
acceptCount acceptCount是當(dāng)線程數(shù)達(dá)到maxThreads后,后續(xù)請(qǐng)求會(huì)被放入一個(gè)等待隊(duì)列,這個(gè)acceptCount是這個(gè)隊(duì)列的大小,如果這個(gè)隊(duì)列也滿了,就直接refuse connection一句話:acceptCount:當(dāng)處理任務(wù)的線程數(shù)達(dá)到最大時(shí),接受排隊(duì)的請(qǐng)求個(gè)數(shù),默認(rèn)100 |
maxThreads : |
maxProcessors 在 Java中線程是程序運(yùn)行時(shí)的路徑,是在一個(gè)程序中與其它控制線程無關(guān)的、能夠獨(dú)立運(yùn)行的代碼段。它們共享相同的地址空間。多線程幫助程序員寫出CPU最大利用率的高效程序,使空閑時(shí)間保持最低,從而接受更多的請(qǐng)求。 通常Windows是1000個(gè)左右,Linux是2000個(gè)左右。 |
minProcessors |
useURIValidationHack:減少它對(duì)一些url的不必要的檢查從而減省開銷,為提高性能可以設(shè)置為false |
compression compression :設(shè)置是否開啟GZip壓縮,HTTP壓縮可以大大提高瀏覽網(wǎng)站的速度,它的原理是,在客戶端請(qǐng)求網(wǎng)頁后,從服務(wù)器端將網(wǎng)頁文件壓縮,再下載到客戶端,由客戶端的瀏覽器負(fù)責(zé)解壓縮并瀏覽。相對(duì)于普通的瀏覽過程HTML,CSS,Javascript , Text ,它可以節(jié)省40%左右的流量。更為重要的是,它可以對(duì)動(dòng)態(tài)生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網(wǎng)頁也能進(jìn)行壓縮,壓縮效率驚人。 |
compressionMinSize compressionMinSize="2048" 啟用壓縮的輸出內(nèi)容大小,這里面默認(rèn)為2KB |
compressableMimeType:哪些類型需要壓縮,默認(rèn)是text/html,text/xml,text/plain |
最后不要忘了把8443端口的地方也加上同樣的配置,因?yàn)槿绻覀冏遠(yuǎn)ttps協(xié)議的話,我們將會(huì)用到8443端口這個(gè)段的配置。
修改conf/web.xml文件,增加服務(wù)器會(huì)話超時(shí)時(shí)間
四.tomcat?內(nèi)存優(yōu)化
查看%TOMCAT_HOME%\logs文件夾下,日志文件是否有內(nèi)存溢出錯(cuò)誤 |
錯(cuò)誤提示:java.lang.OutOfMemoryError: Java heap space Tomcat默認(rèn)可以使用的內(nèi)存為128MB,在較大型的應(yīng)用項(xiàng)目中,這點(diǎn)內(nèi)存是不夠的,有可能導(dǎo)致系統(tǒng)無法運(yùn)行。 常見的問題是報(bào)Tomcat內(nèi)存溢出錯(cuò)誤,Out of Memory(系統(tǒng)內(nèi)存不足)的異常,從而導(dǎo)致客戶端顯示500錯(cuò)誤, 一般調(diào)整Tomcat的使用內(nèi)存即可解決此問題。 windows環(huán)境下修改 “%TOMCAT_HOME%\bin\catalina.bat”文件,在文件開頭增加如下設(shè)置: set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC Linux環(huán)境下修改 “%TOMCAT_HOME%\bin\catalina.sh”文件,在文件開頭增加如下設(shè)置: JAVA_OPTS=-Xms2048m -Xmx2048m |
錯(cuò)誤提示:java.lang.OutOfMemoryError: PermGen space PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,它和存放類實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤,這種錯(cuò)誤常見在web服務(wù)器對(duì)JSP進(jìn)行pre-compile的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過了jvm默認(rèn)的大小(4M)那么就會(huì)產(chǎn)生此錯(cuò)誤信息了 windows環(huán)境下修改 %TOMCAT_HOME%\bin\catalina.bat”文件,在文件開頭增加如下設(shè)置: set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m - XX:MaxPermSize=256m linux環(huán)境下修改 “%TOMCAT_HOME%\bin\catalina.sh”文件,在文件開頭增加如下設(shè)置: export JAVA_OPTS=-Xms256m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m XX:MaxPermSize=256m |
五.
Tomcat 之BIO/NIO/APR的三大模式
BIO BIO是最穩(wěn)定最老的一個(gè)連接器,是采用阻塞的方式,意味著每個(gè)連接線程綁定到每個(gè) Http請(qǐng)求,直到獲得Http響應(yīng)返回,如果Http客戶端請(qǐng)求的是keep-Alive連接,那么這些連接也許一直保持著直至達(dá)到timeout時(shí)間,這期間不能用于其它請(qǐng)求。性能差但是最穩(wěn)定 |
NIO NIO是使用Java的異步IO技術(shù),不產(chǎn)生阻塞。nio(new I/O),是Java SE1.4及后續(xù)版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個(gè)基于緩沖區(qū)、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運(yùn)行性能。 直接修改server.xml里的Connector節(jié)點(diǎn),修改protocol為 : protocol="org.apache.coyote.http11.Http11NioProtocol" |
APR APR(Apache Portable Runtime)是使用原生C語言編寫的非堵塞I/O,利用了操作系統(tǒng)的網(wǎng)絡(luò)連接功能,速度很快,從操作系統(tǒng)層面解決IO問題。但是需先安裝apr和native,若直接啟動(dòng)就支持apr,能大幅度提升性能。 ???? 直接修改server.xml里的Connector節(jié)點(diǎn),修改protocol為: protocol=" org.apache.coyote.http11.Http11AprProtocol " |
安裝APR
安裝APR
|
安裝apr-iconv
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
|
安裝apr-util
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
|
安裝tomcat-native
|
設(shè)置apr的環(huán)境變量
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH 保存退出 ? |
修改Apr的默認(rèn)配置
|
增加配置:<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8" maxConnections="10000" maxThreads="2000" acceptCount="2000" minSpareThreads="100" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000" redirectPort="8443" /> |
壓力測(cè)試 ab -n1000 -c100 http://localhost:8080/ |