Resin学习

1.1 简介

Resin 是 CAUCHO 公司的产品,是一个非常流行的 application server,对 servlet 和 JSP 提供了良好
的支持,性能也比较优良,resin 自身采用 JAVA 语言开发。
版本区别:
resin 普通版本和 pro 版本主要区别是 pro 支持缓存和负载均衡,并且 pro 版本收费的。pro 因为有
强大的 cache 功能,独立作为 web 服务器处理静态页面性能都可以和 apache 有一比。但普通版本独
立作为 web 服务器性能就要差一些。当然可以使用 apache+resin 的方案借助 apache 的缓存功能提高
性能。 但负载均衡就是普通版不能比的了。

1.2 安装

1.2.1 配置 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

1.2.2 resin 安装:

 ./configure --prefix=/opt/apps/resin-4.0.40 --enable-64bit
 make;make install

1.2.3 resin4 的基本配置

1.2.3.1 1,Resin4 可以给不同的 Web app 分配不同的端口,也就是说 Resin4 可以同时开启多个端口

的服务。Resin4 配置文件发生了较大变化,分为:

- app-default.xml web 应用配置
- cluster-default.xml 专业版使用的集群配置
- resin.xml resin 主配置文件
- resin.properties 会被修改的变量
- health.xml 专业版使用的健康检查配置

1.2.3.2 2,删除/注释 resin 社区版本不支持的功能

1).health
修改 resin.xml, 删除:
- <resin:import path="${__DIR__}/health.xml"/>
2).LoadBalance
修改 resin.xml, 删除:
- <web-app id="">
- <resin:LoadBalance regexp="" cluster="app"/>
- </web-app>

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

其它的可以删除

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

1.2.3.4 3,resin 自定义端口

Resin 运行起来后,一般有这么几个端口
WatchDog 的端口,默认 6600
Server 监控端口,默认 6800
应用的 HTTP 端口,默认 8080

实例1-1 以下操作通过修改 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)
<server-multi id-prefix="app-" address-list="127.0.0.1" port="6801"> 
 <watchdog-port>6601</watchdog-port> 
 <http address="*" port="8081"/> 
</server-multi>

1.3 4).禁用 admin/doc/deploy 

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

web_admin_enable : false 
session_store : false (每个服务器是一个集群,不需要考虑 session 持久化) 
resin_doc : false 
dev_mode:false

1.3.1.2 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.4 自定义配置

1.4.1 默认在 resin.xml 中的配置,默认 host app 根目录配置如下:

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

1.5 虚拟目录配置:

1.5.1 在 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>

1.6 基于多 host 的配置:

1.6.1 例如通过域名 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"/>
</host>

1.7 防止避免 hash collision dos 攻击

1.7.1 在 web-app 中加指令 form-parameter-max 用来限制每次 post submit 的参数个数

<web-app id="/" root-directory="/data/www/cms"> 
 <form-parameter-max>100</form-parameter-max> 
</web-app>

1.8 自定义 web app 日志

1.8.1 设置 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"/>

1.9 resin 多端口的配置

1.9.1 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"/>
 </host>
 </cluster>
<cluster id="qd">
 <server-multi id-prefix="qd-0" address-list="127.0.0.1" port="6802">
 <http address="*" port="8082"/>
 </server-multi>
 <host id="" root-directory=".">
 <web-app id="/lee" root-directory="webapps/lee"/>
 </host>
 </cluster>

1.9.2 启动命令:

 bash resin.sh start -server qd-0
 bash resin.sh start -server app-0

1.9.2.1 注意事项:

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).

1.10 jvm 启动参数优化

1.10.1 在 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>

1.10.2 解释:

-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 的最大保持时间


打赏 支付宝打赏 微信打赏

最后编辑于:2017/09/06作者: 富华运维空间

相关推荐

发表评论

动态鼠标蜘蛛网特效