天天看點

resin學習随筆

Resin是CAUCHO公司的産品,是一個非常流行的application server,對servlet和JSP提供了良好的支援,性能也比較優良,resin自身采用JAVA語言開發。

版本差別:

resin 普通版本和pro版本主要差別是 pro支援緩存和負載均衡,并且pro版本收費的。pro因為有強大的cache功能,獨立作為web伺服器處理靜态頁面性能都可以和apache有一比。但普通版本獨立作為web伺服器性能就要差一些。當然可以使用apache+resin的方案借助apache的緩存功能提高性能。 但負載均衡就是普通版不能比的了。

一,安裝

配置jdk環境變量:

export JAVA_HOME=/opt/soft/jdk1.7.0_55/

export JRE_HOME=/opt/soft/jdk1.7.0_55/jre

export PATH=$PATH:/opt/soft/jdk1.7.0_55/bin

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib

resin安裝:

# ./configure --prefix=/opt/apps/resin-4.0.40 --enable-64bit

# make;make install

二,resin4的基本配置

1,Resin4可以給不同的Web app配置設定不同的端口,也就是說Resin4可以同時開啟多個端口的服務。Resin4配置檔案發生了較大變化,分為:

- app-default.xml  web應用配置

- cluster-default.xml  專業版使用的叢集配置

- resin.xml             resin主配置檔案

- resin.properties  會被修改的變量

- health.xml           專業版使用的健康檢查配置

2,删除/注釋resin社群版本不支援的功能

1).health

修改resin.xml, 删除:

- <resin:import path="${__DIR__}/health.xml"/>

2).LoadBalance

- <web-app id="">

-    <resin:LoadBalance regexp="" cluster="app"/>

- </web-app>

3).僅需要保留自己使用的cluster,

其它的可以删除

修改resin.xml, 删除cluster id="web", cluster id="memcached"

3,resin自定義端口 

Resin 運作起來後,一般有這麼幾個端口 

WatchDog 的端口,預設6600

Server 監控端口,預設6800

應用的HTTP端口,預設8080

以下操作通過修改resin.xml配置檔案完成:

1).修改Server端口6800(會覆寫resin.properties中app_servers的配置)

把<server-multi id-prefix="app-" address-list="${app_servers}" port="6800"/>改成:

<server-multi id-prefix="app-" address-list="127.0.0.1" port="6801"/>  

2).修改WatchDog端口6600 

<server-multi id-prefix="app-" address-list="127.0.0.1" port="6801">  

    <watchdog-port>6601</watchdog-port>  

</server-multi>  

3).修改應用端口8080(不會覆寫resin.properties中app.http的配置,會新監聽一個端口8081)

    <http address="*" port="8081"/>  

4,禁用admin/doc/deploy 

1).修改resin.properties,配置如下:

web_admin_enable : false  

session_store : false (每個伺服器是一個叢集,不需要考慮session 持久化)  

resin_doc : false  

dev_mode:false  

2).修改resin.xml,删除resin doc相關配置 

  <resin:if test="${resin_doc}">  

    <web-app id="/resin-doc" root-directory="${resin.root}/doc/resin-doc"/>  

  </resin:if>  

三,自定義配置

1,預設在resin.xml中的配置,預設host app根目錄配置如下:

<web-app id="/" root-directory="webapps/ROOT"/>

2,虛拟目錄配置:

在webapps/lee目錄中建立index.html檔案,需要通過http://domainname/index/index.html通路到該檔案:

    <host id="" root-directory=".">

      <web-app id="/" root-directory="webapps/ROOT"/>

      <web-app id="/index" root-directory="webapps/lee"/>

    </host>

3,基于多host的配置:

例如通過域名http://www.test1.com通路webapps/test1目錄内容,而http://www.test2.com通路webapps/test2中内容:

<host id="www.test1.com" root-directory=".">

<web-app id="/" root-directory="webapps/test1"/>

</host>

<host id="www.test2.com" root-directory=".">

<web-app id="/" root-directory="webapps/test2"/>

4.防止避免hash collision dos攻擊 

在web-app中加指令form-parameter-max 用來限制每次post submit的參數個數 

<web-app id="/" root-directory="/data/www/cms">  

    <form-parameter-max>100</form-parameter-max>                         

</web-app>  

5.自定義web app日志 

設定log切割時間為1天:

<web-app id="/" root-directory="webapps/ROOT">

  <form-parameter-max>100</form-parameter-max>

  <stdout-log path="log/stdout.log" rollover-period="1D" timestamp="[%H:%M:%S.%s] "/>

  <stderr-log path="log/stderr.log" rollover-period="1D" timestamp="[%H:%M:%S.%s] "/>

  <access-log path="/opt/access.log"

             archive-format="access-%Y%m%d.log.gz"

             format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'

             rollover-size="10mb"

             rollover-period="1D"/>

</web-app>

也可以把access-log設定成每小時切割一次,配置如下:

<access-log path-format="/opt/access.log.%Y%m%d_%H" rollover-period="1h"/>

6,resin多端口的配置

Resin4可以同時開啟多個端口的服務,在resin.xml中一個cluster就代表一個端口應用,故想要多端口隻要在resin域中配置多個cluster就行了,核心配置如下:(以開啟2個端口為例)

  <cluster id="app">

    <server-multi id-prefix="app-0" address-list="127.0.0.1" port="6801">

      <http address="*" port="8081"/>

    </server-multi>

    <host id="" root-directory=".">

      <web-app id="/lee" root-directory="webapps/lee"/>

  </cluster>

<cluster id="qd">

   <server-multi id-prefix="qd-0" address-list="127.0.0.1" port="6802">

    <http address="*" port="8082"/>

   </server-multi>

           <web-app id="/lee" root-directory="webapps/lee"/>

啟動指令:

# bash resin.sh start -server qd-0

# bash resin.sh start -server app-0

注意事項:

1),http port和server port必須不同。可以在resin.xml或者resin.properties中配置,resin.xml的配置如上案例。

2),當使用指令# bash resin.sh start -server app或者# bash resin.sh start啟動時,會出現以下報錯:

Resin/4.0.40: server 'qd' does not match a unique <server> or <server-multi>

in /opt/apps/resin-4.0.40/conf/resin.xml

server ids: app0, qd0.

啟動時-server的參數必須是id-prefix的值,當id-prefix和cluster的id值相同時,-server的參數預設是app0(如果cluster id是app).

7,jvm啟動參數優化

在cluster域中加入類似如下:

<server-default>

      <jvm-arg>-Xmx4096m</jvm-arg>

      <jvm-arg>-Xms4096m</jvm-arg>

      <jvm-arg>-Xss128k</jvm-arg>

      <jvm-arg>-XX:MaxPermSize=256m</jvm-arg>

      <jvm-arg>-XX:NewSize=768m</jvm-arg>

      <jvm-arg>-XX:SurvivorRatio=4</jvm-arg>

      <jvm-arg>-XX:+UseParNewGC</jvm-arg>

      <jvm-arg>-XX:+UseConcMarkSweepGC</jvm-arg>

      <jvm-arg>-XX:CMSFullGCsBeforeCompaction=10</jvm-arg>

      <jvm-arg>-XX:-CMSParallelRemarkEnabled</jvm-arg>

      <jvm-arg>-XX:CMSInitiatingOccupancyFraction=75</jvm-arg>

      <jvm-arg>-XX:+UseCMSCompactAtFullCollection</jvm-arg>

      <memory-free-min>1M</memory-free-min>

      <thread-max>1024</thread-max>

      <socket-timeout>65s</socket-timeout>

      <keepalive-max>128</keepalive-max>

      <keepalive-timeout>15s</keepalive-timeout>

    </server-default>

解釋:

-Xmx:jvm最大可用記憶體

-Xms:jvm啟動時,初始記憶體大小。此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新配置設定記憶體。

-Xss:設定每個線程的堆棧大小。在相同實體記憶體下,減小這個值能生成更多的線程。但是作業系統對一個程序内的線程數還是有限制的

-XX:PermSize:JVM初始配置設定的非堆記憶體

-XX:MaxPermSize:非堆記憶體的最大值。(PermSize和MaxPermSize指明虛拟機為java永久生成對象(Permanate generation)如,class對象、方法對象這些可反射(reflective)對象配置設定記憶體限制,這些記憶體不包括在Heap(堆記憶體)區之中。)

-XX:NewSize:設定新生代記憶體大小

-XX:SurvivorRatio:年輕代中Eden區與兩個Survivor區的比值。注意Survivor區有兩個。如:3,表示Eden:Survivor=3:2,一個Survivor區占整個年輕代的1/5

-XX:+UseParNewGC:設定年輕代為并行收集。

-XX:+UseConcMarkSweepGC:設定年老代為并發收集。

-XX:CMSFullGCsBeforeCompaction:由于并發收集器不對記憶體空間進行壓縮、整理,是以運作一段時間以後會産生“碎片”,使得運作效率降低。此值設定運作多少次GC以後對記憶體空間進行壓縮、整理。

-XX:-CMSParallelRemarkEnabled:降低标記停頓

-XX:CMSInitiatingOccupancyFraction=75:CMS堆上, 使用70%後開始CMS收集

-XX:+UseCMSCompactAtFullCollection:打開對年老代的壓縮。可能會影響性能,但是可以消除碎片

memory-free-min:強制resin重新開機時的最小空閑記憶體

thread-max:resin最大線程數

socket-timeout:套接字最大等待時間

keepalive-max:keepalived連接配接的最大數量,對網絡性能有影響

keepalive-timeout:keepalived的最大保持時間

本文轉自 leejia1989 51CTO部落格,原文連結:http://blog.51cto.com/leejia/1416895,如需轉載請自行聯系原作者