2014年7月8日 星期二

JVM配置參數定義


一般測試 JVM 最大可用記憶體 可用此command
【java -Xmx***m -XX:PermSize=***m -version】
如果有超過 JVM 最大可用記憶體,則會有錯誤log,
如果正常,則是正常顯示JAVA相關資訊。
若是測試安裝於不同版本(不同目錄)的JAVA的,需要自行CD到該JAVA目錄執行command。
==================================================================

基本控制JVM內存的命令參數,一般來說配置這裡的參數,最為重要,其他的參數較屬於輔助優化型。
-Xms 初始Heap值
-Xmx 最大Heap值
MaxPermSize 永久保存區最大值

-Xms與-Xmx 這兩種參數設置相同會比較好,如此一來JVM不必再重新分配記憶體。

PermGen space的全稱是Permanent Generation space是指記憶體的永久保留區
這一部分用於存放Class和Meta的資訊,Class在Load時被放入PermGen space區域, 它和存放Instance的Heap區域不同, GC(Garbage Collection)不會在主程序運行期對PermGen space區域進行清理,如果APP會Load很多的Class的話,就很可能出現PermGen space錯誤。
這種錯誤常見在web服務器對JSP進行pre compile的時候。
例如 用了太多第三方 jar 檔。
參考(http://blog.xuite.net/keanuhome/blog/56035165Tomcat+%E7%94%A2%E7%94%9FOutOfMemoryError)

-Xms -Xmx =可假想作動態記憶體存放區
PermSize MaxPermSize =可假想作靜態記憶體存放區

PermSize 只會累積增加,不會減少。 預設初始約在32MB 最大64MB,如果要提高,約在128~512MB區間較為理想。
=====================================================

以下是可以調整JVM其他參數配置,以達到性能優化,皆是以針對GC(Garbage Collection)做設定。
JVM記憶體有分為兩區,舊空間(old Gen)、新空間(Young Gen),一般來說GC較頻繁在新空間活動。


NewSize, MaxNewSize: 新空間的初始大小、最大大小。

+UseParNewGC: 使GC運行在多個CPU,可增加程式的代謝。

+UseConcMarkSweepGC: 可縮短GC暫停的時間,提高效率。

SurvivorRatio: 控制生存空間與Eden的大小比例,預設為25,必要時可能需要調整。
指定生存空間比率,確保保留小空間給Eden。 Eden應該是指不被GC回收的安全區塊。

MaxTenuringThreshold: JDK1.6之後,設定值在0~15,表示一個物件記憶體在新空間被移動了0~15次,
還沒有被收回,就會轉入舊空間。

ParallelGCThreads: 這個設定,可根據CPU核心數來讓GC並行。ex:2、4、8

以上+的符號,我在猜是boolean值,有設定即可,至於其他設定的參數數值需要特別測試,才知道差別在哪,屬於比較進階的做法。
如果沒有設定以上這些參數,JVM會自己以較合適的方法做調整。


參考資料
https://www.liferay.com/zh/documentation/liferay-portal/6.1/user-guide/-/ai/performance-tuni-5 (此連結有Liferay JVM設定Sample)
http://13591787.blog.hexun.com.tw/45035890_d.html (此連結有他人測試多種組合參數結果)
http://docs.oracle.com/cd/E13209_01/wlcp/wlss30/configwlss/jvmgc.html
http://www.liferaysolution.com/2013/03/speedup-liferay-application.html
http://rritw.com/a/fuwuqiruanjian/Tomcat/20101104/60833.html

2014年7月1日 星期二

Liferay JBOSS 安裝

參考資料
http://www.liferay.com/zh/documentation/liferay-portal/6.2/user-guide/-/ai/installing-liferay-on-jboss-7-liferay-portal-6-2-user-guide-15-en


下載Liferay Portal + JBoss Bundle 6.2.1 CE GA版本
http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.2.1%20GA2/
解壓縮至自訂資料夾。

step1:
point: 更改資料庫設定 與 port 端口設定

打開{$JBOSS_HOME}\standalone\configuration\standalone.xml

原本預設資料庫設定是使用HSQL:
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>

可將HSQL的設定替換成MySQL。

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
            <datasources>
                <datasource jta="true" jndi-name="java:/jdbc/LiferayPool" pool-name="LiferayPool" enabled="true" use-java-context="true" use-ccm="true">
                    <connection-url>jdbc:mysql://localhost/lportal621jboss</connection-url>
                    <driver>mysql</driver>
                    <security>
                        <user-name>root</user-name>
                        <password>root</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="mysql" module="com.liferay.portal.main"/>
                </drivers>
            </datasources>
        </subsystem>

並提高 deploy 的時間,預設是120,可提高至240 or 400
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1">
            <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" deployment-timeout="400"/>
        </subsystem>

如果有需要更改port號碼,在文件的最下方找到

<socket-binding name="ajp" port="8009"/>
<socket-binding name="http" port="8080"/>
<socket-binding name="https" port="8443"/>
==============================================================

step2:
point: 加入portal-ext.properties檔案至
{$JBOSS_HOME}\standalone\deployments\ROOT.war\WEB-INF\classes

jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost/lportal621jboss?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=root
jdbc.default.password=root

==============================================================

step3:
point: 調整server memory大小

打開{$JBOSS_HOME}\bin\standalone.conf.bat

在文件的最下方
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true  -Duser.timezone=GMT+8 -Xmx1024m -XX:MaxPermSize=512m"

:JAVA_OPTS_SET

==============================================================

step4:
point: 執行{$JBOSS_HOME}\bin\standalone.bat

會在cmd視窗run。

如需要看log檔,可在{$JBOSS_HOME}\standalone\log\ 底下有
boot.log
server.log



結語 :
大致上與安裝Tomcat 所修改的重點差不多。
如果安裝上遇到狀況,也許是系統的環境變數設定有誤。
在此次安裝上,只有設定 JAVA_HOME = C:\Program Files\Java\jdk1.6.0_45
沒有設定JBOSS_HOME。
如果需設定的話,指到 jboss-version\就好
EX:  JBOSS_HOME = D:\dir\jboss-7.1.1

上面JBOSS-Standalone.xml裡面MySQL的設定,也許會跟portal-ext.properties裡面MySQL的設定衝到,如果衝到,直接以Portal-ext.properties的為準,Standalone.xml的部分就註解起來。