1. 程式人生 > >Tomcat啟動失敗,視窗一閃而過

Tomcat啟動失敗,視窗一閃而過

昨天遇到一個問題,配置了https/ssl的tomcat在windows作業系統上啟動,視窗一閃而過,剛開始以為環境變數有問題,檢查後並沒有問題,但是在命令列執行java命令時提示

Error occurred during initialization of VM
Could not reserve enough space for object heap

網上搜了下是JVM記憶體溢位,這臺伺服器上已經部署了四個Tomcat,猜測可能是由於JVM記憶體不足導致,真正原因還在探索中。

找到一個可行的方法,我是通過第二個解決的。

使用Java程式從資料庫中查詢大量的資料時出現異常:java.lang.OutOfMemoryError: Java heap space
在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將丟擲此異常資訊。

JVM堆的設定是指java程式執行過程中JVM可以調配使用的記憶體空間的設定.JVM在啟動的時候會自動設定Heap size的值,其初始空間(即-Xms)是實體記憶體的1/64,最大空間(-Xmx)是實體記憶體的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設定。
例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar
如果Heap Size設定偏小,除了這些異常資訊外,還會發現程式的響應速度變慢了。GC佔用了更多的時間,而應用分配到的執行時間較少。
Heap Size 最大不要超過可用實體記憶體的80%,一般的要將-Xms和-Xmx選項設定為相同,而-Xmn為1/4的-Xmx值。

Heap size的 -Xms -Xmn 設定不要超出實體記憶體的大小。否則會提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。
這個問題的根源是jvm虛擬機器的預設Heap大小是64M,可以通過設定其最大和最小值來實現.設定的方法主要是幾個.

1.可以在windows 更改系統環境變數加上JAVA_OPTS=-Xms64m -Xmx512m

2,如果用的tomcat,在windows下,可以在C:\tomcat5.5.9\bin\catalina.bat 中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined 這行的下面加合適.

3.如果是linux系統
Linux 在{tomcat_home}/bin/catalina.sh的前面,加 set JAVA_OPTS=’-Xms64 -Xmx512’

還有找到一篇有用的文章

windows系統為例,問題追蹤:
開啟tomcat/bin/startup.bat
1、在檔案最後新增一行,輸入 pause
2、找到 call “%EXECUTABLE%” start %CMD_LINE_ARGS% 改為
call “%EXECUTABLE%” run %CMD_LINE_ARGS%
儲存,重新執行。

常見錯誤分析:
1、
錯誤資訊:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
問題原因:JAVA_HOME和the JRE_HOME的環境變數沒有定義或設定有誤。
解決方式:
可以再系統的“環境變數”中設定一下JAVA_HOME即可.
或者:預設情況下,startup.bat呼叫catalina.bat,catalina.bat呼叫setclasspath.bat,
因此可以在其中一個檔案頭裡設定一下JAVA_HOME:set JAVA_HOME=”D:\jdk\jdk1.6”

2、
錯誤資訊:Error occurred during initialization of VM Could not reserve enough space for object heap
問題原因:記憶體設定過大,導致JVM沒有起來
解決方式:
在catalina.bat中設定JAVA_OPTS為合理值,如
set JAVA_OPTS=-server -Xms512m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=256m