Grails1.1和Groovy1.6的Java虛擬機器的記憶體設定和調整

hivon發表於2009-03-25

                       Grails1.1和Groovy1.6的Java虛擬機器的記憶體設定和調整

                                          作者:Frerk Meyer

                                          2009.3.21

 

 

 

在這篇文章中,我希望回答下列問題:

.Grails1.1和Groovy1.6的Java虛擬機器的記憶體設定和調整隱藏在哪裡,以及我們如何來改變它們?

.最新的版本和舊的版本之間有什麼不同?

.以上這些設定和調整在windows和linux之間的不同需要我們掌握嗎?

 

 

Grails1.1和Grails1.0.2的Java虛擬機器的記憶體設定

如果你執行grails命令,在linux/unix平臺,它是執行"$GRAILS_HOME/bin/startGrails"命令;而在windows平臺,是執行"$GRAILS_HOME/bin/startGrails.bat"的批處理。這些指令碼在linux和windows之間有不同的行為,並且在windows平臺上,不同版本之間的設定也不同。

.linux平臺的Grails 1.1:即使你設定"$JAVA_OPTS"為不同的數值,但是"server" JVM只有最大為"512 Mb"的堆空間。

. linux平臺的Grails 1.02:和上面的情況相同。

.windows平臺的Grails 1.1:如果沒有設定"$JAVA_OPTS"引數,那麼使用最大為"512 Mb"的堆空間,並且自動選擇Java虛擬機器引擎。

. windows平臺的Grails 1.02:如果沒有設定"$JAVA_OPTS"引數,那麼使用最大為"128 Mb"的堆空間,並且自動選擇Java虛擬機器引擎。

 

從我的觀點來看,windows平臺的Grails 1.1有著最好的體驗,應該被Linux/Unix平臺採納。如果我有很好的理由來設定"$JAVA_OPTS"引數,那麼我不希望它不能被修改。我不知道如果設定"-Xmx512m"和"-Xmx256m"引數,JVM到底會額外做些什麼。但是如果能夠使用前面的引數,那麼使用後面的引數會導致一個錯誤?

所以我在我的Linux系統裡改變了"startGrails"命令,如下:

# comment the old setting
# JAVA_OPTS="-server -Xmx512M $JAVA_OPTS"
# check for $JAVA_OPTS instead:
if [ "$JAVA_OPTS" == "" ]; then
    JAVA_OPTS="-server -Xmx512m"
fi

 

但是必須注意:如果你使用war包釋出你的Grails應用到一個應用伺服器上,那麼這些記憶體設定不再有效;取而代之的是,你必須為你的應用設定應用伺服器的記憶體設定。

 

Groovy1.6 Java虛擬機器的記憶體設定

如果你執行groovy命令,在Linux/Unix平臺會執行"$GROOVY_HOME/bin/startGroovy",在Windows平臺會執行"$GROOVY_HOME/bin/startGroovy.bat"。這些指令碼在Linux和Windows分別不同,但是在各自的平臺上,Groovy版本1.6和版本1.5.7卻是相同的。下面是這些不同:

.Linux平臺的Groovy1.6:如果設定了"$JAVA_OPTS"的話,就會起作用,JVM的預設設定只有在"$JAVA_OPTS"為空或者沒有設定的情況下起作用。

.Windows平臺的Groovy1.6:"$JAVA_OPTS"肯定起作用,如果"$JAVA_OPTS"為空或者沒有設定,那麼最大堆空間為128Mb。

 

你可以通過設定在"$HOME/.groovy/startup"檔案裡的"$JAVA_OPTS"更改所有的Groovy應用的記憶體設定,不受其他Java應用的影響,這個檔案會被startGroovy指令碼讀取,如果它存在的話,會被當做一個shell指令碼來執行。

 

在開源的Java應用伺服器裡設定JVM記憶體

Paul Gu在他的blog"6 Common Errors in Setting Java Heap Size"裡,不僅列出了在設定堆大小的時候的大量陷阱和錯誤,而且給出了很多關於怎麼找出堆大小和不同的Java應用包括很多開源的Java應用伺服器的"$JAVA_OPTS"設定的提示。很多提示都能幫助你在不同的系統釋出你的Grails應用,並且能夠調整你的JVM記憶體設定。

 

原文網址:http://www.groovygrails.de/blog/groovygrails/entry/grails_1_1_and_groovy

相關文章