Tomcat(二)------性能調優

1、JVM優化

tomcat出現java.lang.OutOfMemoryError內存溢出,有兩種

一、java.lang.OutOfMemoryError: PermGen space

PermGen space指的是內存的永久保存區域,也稱”永久代”,用於存儲虛擬機(JVM)加載的(class)信息、常量靜態變量、是各個線程共享的內存區域。

類在被載入(Loader)時就被放到該區中。GC(Garbage Collection垃圾回收機制)不會在主程序運行期對該區進行清理。所以如果程序中有很多類的話,就很可能出現java.lang.OutOfMemoryError: PermGen space錯誤。

原因是其大小超過了jvm設置默認的大小(不同JVM默認值不盡相同,網上常說的默認最小值爲16MB,最大值爲64MB),那麼就會產生此錯誤信息了。

-XX:PermSize=512m -XX:MaxPermSize=1024m

二、java.lang.OutOfMemoryError: Java heap space

Heap space是指堆區,在JVM中如果**98%的時間是用於GC且可用的 Heap size 不足2%**的時候將拋出此異常信息。

JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置.

默認其初始空間(即-Xms)是物理內存的1/64最大空間(-Xmx)是物理內存的1/4

可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。

提示:Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置爲相同,而-Xmn爲1/4的-Xmx值。

Linux下修改Tomcat jvm內存大小

bin/catalina.sh,位於cygwin=false

JAVA_OPTS="-Xms1024m -Xmx1024m -Xss512K -XX:PermSize=256m -XX:MaxPermSize=256m"

windows下修改Tomcat jvm內存大小

通過bin/catalina.bat啓動

在
rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
後添加

set JAVA_OPTS=-Xms1024m -Xmx1024m -Xss512K -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true

各參數含義

-Xmx    Java Heap最大值,默認值爲物理內存的1/4;

-Xms    Java Heap初始值,Server端JVM最好將-Xms和-Xmx設爲相同值,開發測試機JVM可以保留默認值;

-Xmn    Java Heap Young區大小,不熟悉最好保留默認值;

-Xss      每個線程的Stack大小,不熟悉最好保留默認值;

-XX:PermSize:設定內存的永久保存區域; 

-XX:MaxPermSize:設定最大內存的永久保存區域;

-XX:PermSize:設定內存的永久保存區域;

-XX:NewSize:設置JVM堆的‘新生代’的默認大小;

2、字符集配置優化

2.1、控制檯會出現中文亂碼

在conf/logging.properties

#java.util.logging.ConsoleHandler.encoding = UTF-8
修改爲
java.util.logging.ConsoleHandler.encoding = GBK

2.2、get請求參數中文亂碼

在conf/server.xml

#增加URIEncoding="UTF-8" 
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"   URIEncoding="UTF-8" />

2.3、URL特殊字符過濾

URL中有特殊字符如大括號{},^等tomcat會返回400錯誤

在conf/catalina.properties

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章