Resin中对日志的设置主要有如下参数:log、logger、access-log、stdout-log和stderr-log。
前两个放 在标签,也就是主标签下面,可以输出jdk、resin初始化加载之类的信息;
后面三个*-log放在或下面,access用于HTTP输 出,stdout用于标准输出(System.out),stderr用于错误输出(System.err,对应log4j中的log.error)
例如:
全局配置
name 是指定对各个层次应用进行debug,name 设定有几种情况,如:
Name=’’ name为空,这对所有应用、包括端口全面进行调试记载日志
Name=’com.caucho.jsp’ 指定只对jsp进行调试记载日志
Name=’com.caucho.java’ 指定只对java类进行调试
Name=’com.caucho.server.port’ 指定只对端口、线程进行调试
Name=’com.caucho.server.port.AcceptPool 指定只对端口线程的创建和释放进行debug
level 的级别一般有::
Off Severe info config fine finer finest all 这几中配置级别;
Off 关闭日志输出
Severe 只输出些严重的出错信息
Info 输出一般的综合信息
Config 输出配置信息
Fine 输出resin的跟踪信息
Finer 输出详细的跟踪信息
Finest 输出比Finer更详细的跟踪消息、细节问题
All 输出所有的访问输出消息
path: 输出文件路径指向,可以形式如 path=’stdout:’ 注意后面有冒号;或指定绝对路径path=’/usr/local/resin-3.0.7/log/stdout.log’
Timestamp : 完整的输出日期格式[%Y/%m/%d %H:%M:%S.%s];
一般设置日志文件一周轮循一次,即 rollover-period=’1M’ 或 rollover-period=’7D’ , 当满一周,系统会自动生成新日志记录文件,格式如: stderr.log.20041201 stderr.log.20041208
rollover-period=’D’ 天
rollover-period=’h’ 小时
rollover-period=’W’ 周
rollover-period=’M’ 月
host log配置
archive-format="stdout-%Y%m%d.log.gz"
timestamp="[%Y.%m.%d %H:%M:%S.%s]"
rollover-size="10mb"
rollover-period="1D"/>
archive-format="stderr-%Y%m%d.log.gz"
timestamp="[%Y.%m.%d %H:%M:%S.%s]"
rollover-size="10mb"
rollover-period="1D"/>
format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'
rollover-period="1W"/>
path: 用于设定日志文件的路径,非常有意思的是它支持所谓的El Variables and Functions, 也就是resin中的变量,比如${host.name}就是虚拟站点的id名称,所以如果将它放在<</span>host-default>下面的话,将path设置为 logs/${host.name}/access.log的话可以将不同站点的日志存放在不同的目录下面。
archive-format: 这个参数可以设置日志归档的格式,如设置为access-%Y%m%d.log可以在归档的时候自动按日期进行归档命名。另外还有一个特性需要说明的 是,resin竟然支持自动压缩log文件,而且设置的方法非常简单,只要后缀名是gz就可以了,如access-%Y%m%d.log.gz,这样归档 的时候会自动压缩,而且支持windows和linux系统。
format: 用于设置每条日志输出的格式,这个非常简单,而且通常使用系统内置的格式就可以了。
rollover-size: 用来设置归档日志文件的最小尺寸,单位可以设置成kb、mb等等,默认为1mb
rollover-period: 用来设置归档日志文件的周期,单位可以是1D(一天)、1W(一周)、1M(一个月)等
2、安全性配置
在webapp标签下,可以有很多种安全性配置,下面介绍ip限制、用户米密码限制两种。
2.1 ip限制
在正常访问的web-app标签下,增加一个security-constrain标签即可,如下:
id="test.com" root-directory=".">
id="/solr" document-directory="/home/server/solr" archive-path="/home/resin/webapps/solr.war"character-encoding="utf-8">
/*
192.168.0.0/16
10.0.0.0/8
61.135.255.86
url-pattern是过滤的url
allow标签表示允许访问的ip地址,默认是允许所有的。
还可以配置标签,以拒绝特定的ip。
这里的ip地址格式可以查看wiki : http://zh.wikipedia.org/wiki/IPv4 ,比如:
10.0.0.0/8 专用网络
(私有网络)
192.168.0.0/16 专用网络
xxx.0/16表示这个网段的掩码,前面是16个1,即11111111.11111111.00000000.00000000
即所有192.168开头的私网地址
除了为内网开放ip权限,还可以为外网开放,比如为某个ip开放,61.135.25.3
2.2 用户名密码限制
在正常访问的web-app标签下,增加authenticator、login-config、security-constraint就可以配置用户名密码
id="slave.pic.solr.ws.netease.com" root-directory=".">
id="/solr" document-directory="/home/server/solrslave" archive-path="/home/resin/webapps/solr.war" character-encoding="utf-8"> type="com.caucho.server.security.XmlAuthenticator"> user:pass:cms none auth-method='basic'/> url-pattern='/*' role-name='cms'/>
3、内存
默认的jvm内存是64M.在许多应用中,该内存太小,不足以支持应用.jvm的内存大小可以在执行java程序时由-X参数来修改.
比如:java -Xss1m -Xms1m -Xmx256m ,java的参数很多,如下:
1、 heap size
a: -Xmx
指定 jvm 的最大 heap 大小,如:-Xmx=2g
b: -Xms
指定 jvm 的最小 heap 大小,如:-Xms=2g,高并发应用建议和-Xmx一样,防止因为内存收缩/突然增大带来的性能影响。
c: -Xmn
指定 jvm 中 New Generation 的大小,如:-Xmn256m。 这个参数很影响性能,如果你的程序需要比较多的临时内存,建议设置到512M,如果用的少,尽量降低这个数值,一般来说128/256足以使用了。
d: -XX:PermSize=
指定 jvm 中 Perm Generation 的最小值,如:-XX:PermSize=32m。 这个参数需要看你的实际情况,可以通过jmap 命令看看到底需要多少。
e: -XX:MaxPermSize=
指定 Perm Generation 的最大值,如:-XX:MaxPermSize=64m
f: -Xss
指定线程桟大小,如:-Xss128k,一般来说,webx框架下的应用需要256K。 如果你的程序有大规模的递归行为,请考虑设置到512K/1M。 这个需要全面的测试才能知道。不过,256K已经很大了。 这个参数对性能的影响比较大的。
g: -XX:NewRatio=
指定 jvm 中 Old Generation heap size 与 New Generation 的比例,在使用 CMS GC 的情况下此参数失效,如:-XX:NewRatio=2
h: -XX:SurvivorRatio=
指定 New Generation 中 Eden Space 与一个 Survivor Space 的 heap size 比例,-XX:SurvivorRatio=8,那么在总共New Generation为10m 的情况下,Eden Space为8m
i: -XX:MinHeapFreeRatio=
指定 jvm heap在使用率小 n的情况下,heap进行收缩,Xmx==Xms 的情况下无效,如:-XX:MinHeapFreeRatio=30
j: -XX:MaxHeapFreeRatio=
指定 jvm heap在使用率大于n的情况下,heap进行扩张,Xmx==Xms 的情况下无效,如:-XX:MaxHeapFreeRatio=70
k: -XX:LargePageSizeInBytes=
指定 Java heap 的分页页面大小,如:-XX:LargePageSizeInBytes=128m
2: garbage collector
a: -XX:+UseParallelGC
指 定在 New Generation 使用 parallel collector,并行收集,暂停app threads,同时启动多个垃圾回收thread,不能和 CMS gc 一起使用。系统吨吐量优先,但是会有较长长时间的app pause,后台系统任务可以使用此gc
b: -XX:ParallelGCThreads=
指定 parallel collection 时启动的 thread 个数,默认是物理 processor 的个数。
c: -XX:+UseParallelOldGC
指定在 Old Generation 使用 parallel collector。
d: -XX:+UseParNewGC
指定在 New Generation 使用 parallel collector,是 UseParallelGC 的 gc 的升级版本,有更好的性能或者优点,可以和 CMS gc 一起使用。
e: -XX:+CMSParallelRemarkEnabled
在使用 UseParNewGC 的情况下,尽量减少 mark 的时间。
f: -XX:+UseConcMarkSweepGC
指 定在 Old Generation 使用 concurrent cmark sweep gc,gc thread 和 app thread 并行 ( 在 init-mark 和 remark 时 pause app thread)。app pause 时间较短,适合交互性强的系统,如 web server。
g: -XX:+UseCMSCompactAtFullCollection
在使用 concurrent gc 的情况下,防止 memory fragmention,对 live object 进行整理,使 memory 碎片减少。
h: -XX:CMSInitiatingOccupancyFraction=
指示在 old generation 在使用了 n% 的比例后,启动 concurrent collector,默认值是 68,如:-XX:CMSInitiatingOccupancyFraction=70。
i: -XX:+UseCMSInitiatingOccupancyOnly
指示只有在 old generation 在使用了初始化的比例后 concurrent collector 启动收集。
3、others
a: -XX:MaxTenuringThreshold=
指 定一个 object 在经历了 n 次 young gc 后转移到 old generation 区,在 linux64 的 java6 下默认值是 15,此参数对于 throughput collector 无效,如:-XX:MaxTenuringThreshold=31。
b: -XX:+DisableExplicitGC
禁止 java 程序中的 full gc,如 System.gc() 的调用. 最好加上么,防止程序在代码里误用了。对性能造成冲击。
c: -XX:+UseFastAccessorMethods
get,set 方法转成本地代码。
d: -XX:+PrintGCDetails
打应垃圾收集的情况如:
[GC 15610.466: [ParNew: 229689K->20221K(235968K),0.0194460 secs] 1159829K->953935K(2070976K),0.0196420 secs]。
e: -XX:+PrintGCTimeStamps
打应垃圾收集的时间情况,如:
[Times: user=0.09 sys=0.00,real=0.02 secs]。
f: -XX:+PrintGCApplicationStoppedTime
打应垃圾收集时,系统的停顿时间,如:
Total time for which application threads were stopped: 0.0225920 seconds。
resin的内存也可以用这个-X参数来设置,可以在http.sh或者wrapper.pl中,或者在resin.conf中,下面给出在http.sh中的方法:
打开bin/wrapper.pl后找到$JAVA_ARGS一行,默认是空字符串,这里改为
$JAVA_ARGS=="-Xms2560m -Xmx2560m -XX:PermSize=256M -Xmn256m
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:log/gc.log
"
如果要在bin/httpd.sh中加args,则需要把-XX变成-J-XX,在该文件中有说明。
这样就修改了它使用的内存大小,这些参数可以根据需要修改。
然后ps -ef|grep java 这样就看到启动参数已经改变了。
另外可以在虚拟机中运行一下这俩查看内存的句子哦。
System.out.println("peak_memory=" + Runtime.getRuntime().totalMemory()/1024/1024 + "M");
System.out.println(", max_memory=" + Runtime.getRuntime().maxMemory()/1024/1024 + "M");
四、resin优化
下面拷贝一些resin.conf的优化配置
1、优化JVM参数 (这个和第三点说的效果一样,但是resin.conf在linux和windows通用的,但是修改wrapper.pl的方式更方便)
修改resin.conf文件,在节点下增加配置 JVM参数的子节点。 -Xmx和-Xms的值需要根据服务器内存的大小调整,对于多数应用来说,-Xmx配置成1024M,完全能满足使用要求。通常将-Xms与-Xmx选项 的值设置为相同。
-Xms1024m
-Xmx1024m
-Xmn256m
-XX:PermSize=128m
-XX:MaxPermSize=256m
-Dcom.sun.management.jmxremote
2、调整图片Cache图片文件的时间
3、调整线程池的最大线程数
1024
4、日志输出
如果不配置stdout-log,那么resin会把System.out输出的信息,自动输出到${resinHome}/log/jvm-default.log文件中,且这个文件不会按天存储,随着时间推移,这个文件会越来越大,最后影响系统效率。
5、resin-server TIME_WAIT 过多的处理
thread-max指定了最大连接数,socket-timeout是socket超时时间
keepalive-max指定了长连接的数量,这是可以重复使用的连接,netstat -an时系统可以看到响应数量的ESTABLISHED状态
设定keepalive-max和把keepalive-timeout调小可以减少TIME_WAIT的数量。
在节点下增加配置
10000
30s
512
60s
6、调整检查程序更新时间间隔的配置
Resin 会在一个指定的周期内,检查一下web-app目录下的classes、jsp、jar以及配置文件是否更新,并且根据检查的情况,确定是否重新装载这些 文件。对于生产系统来说,不会经常更新文件,时间间隔应该加长,提高系统的效率。文本框中配置的时间间隔为20分钟。
1200s