tomcat部署會碰到的問題


nginx轉發丟失session的問題

問題描述: 在Nginx配置反向代理的時候,需要將一個特定的URL請求轉發到一個帶有頁面的Web后台管理系統。部署完成之后發現該后管系統無法正常登陸,輸入正確賬號密碼后報錯密碼錯誤,后台錯誤日志為:

java.lang.IllegalStateException: Cannot create a session after the response has been committed

**原因及解決: **

nginx在每次傳遞請求時,如果沒有傳遞cookie,即上述添加項,服務器將視為兩次請求,因此會重新生成一個新的session,致使session數據丟失。
解決方法: 在 location / {}中添加 proxy_cookie_path /XXX/ /;即可。

 

Tomcat配置JVM內存參數沒有生效的問題

首先要知道怎么修改Tomcat的JVM內存參數,大體上分為兩種:

  1. 直接修改startup.sh 這個腳本
  2. 修改Catalina.sh腳本,因為執行startup.sh這個腳本時會去讀Catalina.sh這個腳本里面配置的參數,配置的時候直接在注釋
# JAVA_OPTS (Optional) Java runtime options used when any command # is executed.

下追加JVM參數即可。

JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx4096M -XX:PermSize=2048m -XX:MaxPermSize=4096m" JAVA_OPTS="$JAVA_OPTS -Xloggc:/applog/log/gc-myapplication.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails" JAVA_OPTS="$JAVA_OPTS -XX:-OmitStackTraceInFastThrow -XX:ErrorFile=/applog/log/hs_err_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/applog/log/" JAVA_OPTS="$JAVA_OPTS -Ddruid.registerToSysProperty=true"

問題描述: 部署時碰到的問題是采用第二種方式配置時沒有生效,具體表現時執行 ps -ef | grep tomcat 這條指令時看不到進程信息中的jvm參數。

**原因及解決: ** 簡單來說就是之前因為為了解決數據庫連接池問題時修改了catalina.sh這個腳本,當時插入的代碼是

set JAVA_OPTS="-Ddruid.registerToSysProperty=true"

經過大牛指點,使用set JAVA_OPTS修改參數時會沒辦法正常讀取后面的“ JAVA_OPTS=”配置的參數,同樣修改為一樣的

JAVA_OPTS="$JAVA_OPTS -Ddruid.registerToSysProperty=true"

就可以了。

 

web應用啟動Druid數據源報錯“unregister mbean error”的問題

問題描述: Tomcat中部署了兩個web應用,啟動時報錯拋異常

ERROR [com.alibaba.druid.stat.DruidDataSourceStatManager] – unregister mbean error javax.management.InstanceNotFoundException: com.alibaba.druid:type=DruidDataSourceStat at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean………

原因及解決: 這個問題在搜索時發現很多人都碰到過,推測原因一說是當tomcat中部署了兩個web項目時且均有數據源的連接時就有問題(與我部署項目的情況相符),另一說時版本問題,暫時原因懸而未決...
修改Tomcat 下的 catalina.sh: 在最后面,不要放在前面或者中間的邏輯判斷附近 增加此句代碼: set JAVA_OPTS="-Ddruid.registerToSysProperty=true" 或者在開頭JAVA_OPTS處添加 JAVA_OPTS="$JAVA_OPTS -Ddruid.registerToSysProperty=true"

 

 

JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"

-server:一定要作為第一個參數,在多個CPU時性能佳
-Xms:初始Heap大小,使用的最小內存,cpu性能高時此值應設的大一些
-Xmx:Java heap最大值,使用的最大內存
上面兩個值是分配JVM的最小和最大內存,取決於硬件物理內存的大小,建議均設為物理內存的一半。
-XX:PermSize:設定內存的永久保存區域
-XX:MaxPermSize:設定最大內存的永久保存區域
-XX:MaxNewSize:
-Xss 15120 這使得JBoss每增加一個線程(thread)就會立即消耗15M內存,而最佳值應該是128K,默認值好像是512k.
+XX:AggressiveHeap 會使得 Xms沒有意義。這個參數讓jvm忽略Xmx參數,瘋狂地吃完一個G物理內存,再吃盡一個G的swap。
-Xss:每個線程的Stack大小
-verbose:gc 現實垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般設置為Xmx的3、4分之一
-XX:+UseParNewGC :縮短minor收集的時間
-XX:+UseConcMarkSweepGC :縮短major收集的時間
提示:此選項在Heap Size 比較大而且Major收集時間較長的情況下使用更合適。

PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域OutOfMemoryError: PermGen space從表面上看就是內存益出,解決方法也一定是加大內存。說說為什么會內存益出:這一部分用於存放Class和Meta的信息,Class在被 Load的時候被放入PermGen space區域,它和和存放Instance的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。這種錯誤常見在web服務器對JSP進行pre compile的時候。改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 2、在tomcat中redeploy時出現outofmemory的錯誤. 可以有以下幾個方面的原因: 
1,使用了proxool,因為proxool內部包含了一個老版本的cglib. 
2, log4j,最好不用,只用common-logging 
3, 老版本的cglib,快點更新到最新版。
4,更新到最新的hibernate3.2 3、

 

在tomcat配置文件server.xml中的配置中,和連接數相關的參數有:
minProcessors:最小空閑連接線程數,用於提高系統處理性能,默認值為75
maxProcessors:最大連接線程數,即:並發處理的最大請求數,默認值為200
acceptCount:允許的最大連接數,即等待隊列,指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。應大於等於maxProcessors,默認值為100,
enableLookups:是否反查域名,取值為:true或false。為了提高處理能力,應設置為false
connectionTimeout:網絡連接超時,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。
和最大連接數相關的參數為maxProcessors和acceptCount。如果要加大並發連接數應同時加大這兩個參數。

tomcat最大連接數取決於maxConnections(缺省是200)這個值加上acceptCount這個值,在連接數達到了maxConenctions之后,tomcat仍會保持住連接,但是不處理,等待其它請求處理完畢之后才會處理這個請求。
web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。

設置示例:

  1. <Connector port="8080" protocol="HTTP/1.1"   
  2.            connectionTimeout="20000"   
  3.            redirectPort="8443" acceptCount="500" maxThreads="400" /> 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM