增大內存(堆,持久代)并開啟server模式
我在做XXX項目時,用到了poi導入和導出數據,由于公司的業務比較繁多,數據量很大,測試時報內存溢出,經過我的分析再結合上網查閱資料,發現可能是tomcat內存不足,需要增大,修改配置文件后測試不再報錯.tomcat增大內存的方式通過修改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
當我們在cmd中運行-java時,黑窗口會出現-client -service這兩參數.其作用是設置虛擬機運行模式;client模式啟動比較快,但運行時性能和內存管理效率不如server模式,通常用于客戶端應用程序。server模式啟動比client慢,但可獲得更高的運行性能。Windows默認為client,如果要使用server模式,就需要在啟動虛擬機時加-server參數,以獲得更高性能,對服務器端應用,推薦采用server模式,尤其是多個CPU的系統。在Linux,Solaris上,默認值為server模式.
JDK版本
影響虛擬機還有JDK的版本,JDK分為32位,64位兩種版本,32位裝在32位系統,64位系統可以裝32位和64位JDK.64位JDK性能優于32位JDK.測試的命令 java -xmx數值m –version? 報錯配置大小失敗,反之成功
增加Tomcat最大連接數
使用場景
我在做完一個XXX項目后,測試時發現并發數量增加到一定程度就會很卡,于是我想到了是不是tomcat最大連接數設置有限制.果不其然,配置文件中最大值才500,于是我更改了最大連接數,根據業務我修改了連接數為2000,完美的解決了這個問題;
修改方法在conf/service.xml中默認值
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="1500"
? minSpareThreads="30" maxSpareThreads="75" enableLookups="false"
? redirectPort="8443" acceptCount="100" connectionTimeout="20000"
? disableUploadTimeout="true" />,修改maxthreads的值即可
tomcat進行gzip壓縮從而降低網絡傳輸量
tomcat 壓縮設置tomcat壓縮gzip啟用HTTP 壓縮可以大大提高瀏覽網站的速度,它的原理是,在客戶端請求服務器對應資源后,從服務器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮并瀏覽。
相對于普通的瀏覽過程HTML ,CSS,Javascript , Text ,它可以節省60%左右的流量。更為重要的是,它可以對動態生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率也很高。
啟用tomcat 的gzip壓縮
要使用gzip壓縮功能,你需要在Connector節點中加上如下屬性
記住來源:http://www.qi788.com/info-42.html
compression="on" 打開壓縮功能
compressionMinSize="50" 啟用壓縮的輸出內容大小,默認為2KB
noCompressionUserAgents="gozilla, traviata" 對于以下的瀏覽器,不啟用壓縮
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮
<Connector port="80" protocol="HTTP/1.1"?
? ? ? ? ? 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" />
補充:
在項目中使用了tomcat做web服務器,上線初期經常宕機,后來發現宕機的時候,服務器的訪問量都比較高,當時tomcat進行了一些調優
主要是調整jvm內存參數和tomcat自身參數
調整jvm內存參數,主要修改catalina.sh文件,
設置最大內存Xmx,最小內存Xms, 新生代內存Xmn,線程分配的內存大小Xss
固定內存PermSize,最大固定內存MaxPermSize,同時設置-server 以服務端模式啟動
調整tomcat的自身參數,主要修改tomcat目錄conf目錄下的server.xml
設置最大線程數,初始化線程數,允許的最大線程數,
啟動壓縮功能,禁止DNS查詢反查域名
[說明]
set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048M -Xms2048M
-Xmn512M -Xss512k
-XX:PermSize=128M ?-XX:MaxPermSize=256M -XX:MaxNewSize=256M
(Xmx最大內存,Xms最小內存,Xmn新生代內存,Xss新增線程分配的棧內存,
???--XX:PermSize 設定內存的永久保存區域
??-XX:MaxPermSize=256M設定內存的永久保存區域最大值
??-XX:MaxNewSize)
Tomcat容器配置
修改conf/server.xml文件
maxThreads,配置"8080"
redirectPort="8443"
maxThreads="5000"
minSpareThreads="1000"
maxSpareThreads="4000"
enableLookups="false"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
maxHttpHeaderSize="8192"
useBodyEncodingForURI="true"
minProcessors="100"
maxProcessors="5000"
acceptCount="3500"
connectionTimeout="60000"
disableUploadTimeout="true"debug="0"/>