1. 安装jdk7与resin4
jdk7安装方式与6相同,解压并配置环境变量即可。
resin4与resin3略有区别,解压之后需要编译安装。
./configure --prefix=/opt/hermes/resin-4.0.40 --with-java-home=/opt/hermes/jdk1.7.0_67/ --enable-64bit
make
makeinstall
编译安装可避免出现以下错误:
Unable to find native library 'resin_os' for com.caucho.loader.ClassEntry. Resin expects to find this library in:
环境变量配置如下:
2. 简单配置resin
resin.xml配置如下,裁剪了冗余的原配置:
<!-- - Resin 4.0 configuration file. --> <resin xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <!-- property-based Resin configuration --> <resin:properties path="${__DIR__}/resin.properties" optional="true"/> <resin:properties path="cloud:/resin.properties" optional="true" recover="true"/> <resin:if test="${properties_import_url}"> <resin:properties path="${properties_import_url}" optional="true" recover="true"/> </resin:if> <log-handler name="" level="all" path="log/wapmail_handler.log" timestamp="[%y-%m-%d %H:%M:%S.%s]" rollover-period="1D"/> <stdout-log path="log/stdout.log" rollover-period="1D" timestamp="[%H:%M:%S.%s] "/> <!-- resin4的原始日志没有区分stdout和stderr 需要我们自己补充配置--> <!-- rollover-period="1D" 表示1天汇总一个日志文件 也可配置为1H--> <stderr-log path="log/stderr.log" rollover-period="1D" timestamp="[%H:%M:%S.%s] "/> <logger name="" level="${log_level?:'info'}"/> <logger name="com.caucho.java" level="config"/> <logger name="com.caucho.loader" level="config"/> <resin:import path="${__DIR__}/cluster-default.xml"/> <cluster-system-key>${cluster_system_key}</cluster-system-key> <dependency-check-interval>${dependency_check_interval?:'2s'}</dependency-check-interval> <home-cluster>${home_cluster}</home-cluster> <home-server>${home_server}</home-server> <elastic-server>${elastic_server}</elastic-server> <elastic-dns>${elastic_dns}</elastic-dns> <pre name="code" class="html"><!-- 服务配置 --> <cluster id="app"> <!-- JVM参数 --> <server-default> <!-- 服务器模式 --> <jvm-arg>-server</jvm-arg> <!-- JMX监控配置 --> <jvm-arg>-Djava.rmi.server.hostname=10.64.78.78</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.port=50000</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.authenticate=true</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.password.file=${resin.root}/conf/jmxremote.password</jvm-arg> <jvm-arg>-Dcom.sun.management.jmxremote.access.file=${resin.root}/conf/jmxremote.access</jvm-arg> <!-- JXM监控配置end --> <!-- 性能参数 --> <jvm-arg>-XX:+UnlockExperimentalVMOptions</jvm-arg> <jvm-arg>-XX:+UseG1GC</jvm-arg> <jvm-arg>-XX:MaxGCPauseMillis=50</jvm-arg> <jvm-arg>-XX:GCPauseIntervalMillis=200</jvm-arg> <jvm-arg>-XX:SurvivorRatio=6</jvm-arg> <jvm-arg>-Xmx2048m</jvm-arg> <jvm-arg>-Xms2048m</jvm-arg> <jvm-arg>-Xss1m</jvm-arg> <jvm-arg>-XX:MaxPermSize=512m</jvm-arg> <jvm-arg>-Xloggc:${resin.root}/log/jdk_gc.log</jvm-arg> <!-- 性能参数 end --> </server-default> <!--此cluster监控端口号位6800 --> <server-multi id-prefix="app-" address-list="${app_servers}" port="6800"/> <!-- 配置服务 --> <host id="wapmail3.XXX.cn" root-directory="."> <!-- access log 配置 --> <access-log path-format='log/access.log.%Y%m%d%H'> <rollover-period>1h</rollover-period> </access-log> <web-app id="/" root-directory="webapps/ROOT"> <!-- / 根目录下放着全局404页面 --> <error-page error-code="404" location="/404.html"/> <form-parameter-max>${form_parameter_max?:100}</form-parameter-max> </web-app> <web-app id="/wap2" root-directory="webapps/wap2"> <!-- 应用 --> <form-parameter-max>${form_parameter_max?:100}</form-parameter-max> <!--form-parameter-max 用来限制每次post submit的参数个数,避免hash collision dos --> </web-app> </host> </cluster> </resin>
web_admin_enable : false #生产机不需要web管理界面
session_store : false (每个服务器是一个集群,不需要考虑session 持久化)
resin_doc : false #生产机不需要resin doc
dev_mode:false #生产机开发者模式
在resin.properties添加:
form_parameter_max:100 #hash dos protection
修改cluster-default.xml
注释:
<!--
<port-default>
<port-thread-max>${port_thread_max}</port-thread-max>
<accept-thread-min>${accept_thread_min}</accept-thread-min>
<accept-thread-max>${accept_thread_max}</accept-thread-max>
<tcp-cork>${tcp_cork}</tcp-cork>
</port-default>
-->
port_thread_max: 每个端口最多可以有的活跃线程数,避免系统负载压力过大。这些参数目前不需要。以上参考:http://www.linuxidc.com/Linux/2012-04/58192.htm
3.配置多个独立端口的应用
resin4支持配置多个独立端口的应用。在resin.xml中一个cluster就代表一个端口应用,每个应用占用一个HTTP端口以及一个Server监控端口,可以独立启动停止。
假设有两个应用,我们事先分配好端口分别是:
Web1:8081(http),6801(监控)
Web2:8082(http),6802(监控)
下面是详细的配置:
上面的配置中,我们为每个应用分配一个唯一的 server id,分别是 web1 和 web2
要启动这两个应用,命令是
./resin.sh start -server web1
./resin.sh start -server web2
停止以及重启应用的方式也是一样。
4. 配置jmx远程监控
jmxremote.access和jmxremote.password文件可以在JDK的jre\lib\management目录下找到。copy到{resin_home}/conf/下。
jmxremote.access包含了登录用户的权限控制信息,jmxremote.password包含了用户名和登录密码信息,配置非常简单。
jmxremote.password文件需要进行文件系统的访问权限设置,设置为只有owner可读,否则会抛出错误信息:
错误: 必须限制口令文件读取访问: XXX
解决办法是修改jmx权限文件的访问权限:chmod 644 jmxremote.access jmxremote.password
完成一系列的配置之后,可以在jconsole或visualVM中远程监控服务的运行。在环境刚搭建时,启用监控可了解应用在新环境的运行状况。