
三十一、Tomcat優(yōu)化
增大內(nèi)存(堆,持久代)并開啟server模式
我在做XXX項(xiàng)目時(shí),用到了poi導(dǎo)入和導(dǎo)出數(shù)據(jù),由于公司的業(yè)務(wù)比較繁多,數(shù)據(jù)量很大,測試時(shí)報(bào)內(nèi)存溢出,經(jīng)過我的分析再結(jié)合上網(wǎng)查閱資料,發(fā)現(xiàn)可能是tomcat內(nèi)存不足,需要增大,修改配置文件后測試不再報(bào)錯(cuò).
tomcat增大內(nèi)存的方式通過修改tomcat配置文件
window下, 在bin/catalina.bat文件中最前面添加:
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m –Xms1024m -Xmx1024m
linux下,在catalina.sh最前面增加:
JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m –Xms1024m -Xmx1024m "
-client –service
當(dāng)我們在cmd中運(yùn)行-java時(shí),黑窗口會出現(xiàn)-client -service這兩參數(shù).其作用是設(shè)置虛擬機(jī)運(yùn)行模式;client模式啟動(dòng)比較快,但運(yùn)行時(shí)性能和內(nèi)存管理效率不如server模式,通常用于客戶端應(yīng)用程序。server模式啟動(dòng)比client慢,但可獲得更高的運(yùn)行性能。Windows默認(rèn)為client,如果要使用server模式,就需要在啟動(dòng)虛擬機(jī)時(shí)加-server參數(shù),以獲得更高性能,對服務(wù)器端應(yīng)用,推薦采用server模式,尤其是多個(gè)CPU的系統(tǒng)。在Linux,Solaris上,默認(rèn)值為server模式.
JDK版本
影響虛擬機(jī)還有JDK的版本,JDK分為32位,64位兩種版本,32位裝在32位系統(tǒng),64位系統(tǒng)可以裝32位和64位JDK.64位JDK性能優(yōu)于32位JDK.
測試的命令 java -xmx數(shù)值m –version 報(bào)錯(cuò)配置大小失敗,反之成功
增加Tomcat最大連接數(shù)
使用場景
我在做完一個(gè)XXX項(xiàng)目后,測試時(shí)發(fā)現(xiàn)并發(fā)數(shù)量增加到一定程度就會很卡,于是我想到了是不是tomcat最大連接數(shù)設(shè)置有限制.果不其然,配置文件中最大值才500,于是我更改了最大連接數(shù),根據(jù)業(yè)務(wù)我修改了連接數(shù)為2000,完美的解決了這個(gè)問題;
修改方法在conf/service.xml中默認(rèn)值
minSpareThreads="30" maxSpareThreads="75" enableLookups="false"
redirectPort="8443" acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" />,修改maxthreads的值即可
tomcat進(jìn)行g(shù)zip壓縮從而降低網(wǎng)絡(luò)傳輸量
tomcat 壓縮設(shè)置tomcat壓縮gzip啟用
HTTP 壓縮可以大大提高瀏覽網(wǎng)站的速度,它的原理是,
在客戶端請求服務(wù)器對應(yīng)資源后,從服務(wù)器端將資源文件壓縮,
再輸出到客戶端,由客戶端的瀏覽器負(fù)責(zé)解壓縮并瀏覽。
相對于普通的瀏覽過程HTML ,CSS,Javascript , Text ,
它可以節(jié)省60%左右的流量。更為重要的是,它可以對動(dòng)態(tài)生成的,
包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網(wǎng)頁也能進(jìn)行壓縮,
壓縮效率也很高。
啟用tomcat的gzip壓縮
要使用gzip壓縮功能,你需要在Connector節(jié)點(diǎn)中加上如下屬性
記住來源:http://www.qi788.com/info-42.html
compression="on" 打開壓縮功能
compressionMinSize="50" 啟用壓縮的輸出內(nèi)容大小,默認(rèn)為2KB
noCompressionUserAgents="gozilla, traviata" 對于以下的瀏覽器,不啟用壓縮
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮
connectionTimeout="20000"
redirectPort="8443" executor="tomcatThreadPool" URIEncoding="utf-8"
compression="on"
compressionMinSize="50" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />
三十二、memcached的介紹
memcached是一個(gè)用C語言開發(fā)的分布式的緩存,內(nèi)部基于類似hashMap的結(jié)構(gòu)。
它的優(yōu)點(diǎn)是協(xié)議簡單,內(nèi)置內(nèi)存存儲,并且他的
分布式算法是在客戶端完成的,不需要服務(wù)器端進(jìn)行
通信,我們當(dāng)時(shí)在做項(xiàng)目的時(shí)候因?yàn)榭紤]到項(xiàng)目
的高可用性高擴(kuò)展性,因此在服務(wù)器部署方面采用
了apache+jk+tomcat這種負(fù)載均衡的方式,但是也帶來了一個(gè)問題
就是session共享的問題,雖然可以通過session復(fù)制來解決這個(gè)
問題,但是在性能方面存在缺陷,所以最后我們采用了
用memcached來存儲session,這樣既解決了session共享
問題,也解決了session復(fù)制那種方式所產(chǎn)生的性能問題。
了解(不必主動(dòng)說,但別人問的話一定要知道)
memcached是以KEY-VALUE的方式進(jìn)行數(shù)據(jù)存儲的,
KEY的大小限制:Key(max)<=250個(gè)字符;
VALUE在存儲時(shí)有限制:Value(max)<= 1M;
根據(jù)最近最少使用原則刪除對象即LRU.
memcached默認(rèn)過期時(shí)間:ExpiresTime(max)= 30(days)