如何优化resin的配置
Resin配置优化
1.Resin安装及自启动设置
创建开机自动启动
cpcontrib/init.resin/etc/rc.d/init.d/resin
vi/etc/rc.d/init.d/resin
设置正确的路径
JAVA_HOME=/usr/local/jdk1.6.0_13
RESIN_HOME=/usr/local/resin-3.1.8
赋予可执行权限
chmod+x/etc/rc.d/init.d/resin
加为自启动服务:
chkconfig--addresin
chkconfig--level35resinon
serviceresinstart
解决启动服务错误:log_daemon_msg:commandnotfound
将该函数调用到的地方注释掉并用echo来代替。如:
log_daemon_msg“resinstart”
改为
echo“resinstart”
修改好后可以用serviceresinstart/stop/restart来执行相关的命令。
2.设置resin.conf参数及JVM设置
-Xmx4096m
-Xms4096m
-Xmn512M
-Xss50M
-XX:PermSize=768M
-XX:MaxPermSize=768M
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=7
-XX:GCTimeRatio=19
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=2
-XX:-CMSParallelRemarkEnabled
-XX:+DisableExplicitGC
-XX:CMSInitiatingOccupancyFraction=70
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-Xloggc:log/gc.log
-Xdebug
-Dcom.sun.management.jmxremote
内存设置配置:
5M
最大线程数
1024
65s
配置最活连接和超时时间
2048
keepalive-timeout>15s
3.配置jconsole监控JVM
$JAVA_HOME/jre/lib/management/jmxremote.password.template的文件是远程连接时的设置用户和密码的文件,
cp$JAVA_HOME/jre/lib/management/jmxremote.password.template$JAVA_HOME/jconsole/jmxremote.password
chmod600$JAVA_HOME/jconsole/jmxremote.password
vijmxremote.password
去掉#monitorRoleRED前的注释并将RED修改为你要设置的密码。在resin.conf加入以下配置,其中被监控主机的IP需要和主机IP一致
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.access.file=/usr/local/jdk1.6.0_13/jre/lib/management/jmxremote.access-Dcom.sun.management.jmxremote.password.file=/usr/local/jdk1.6.0_13/jre/lib/management/jmxremote.password
-Dcom.sun.management.jmxremote.authenticate=true
-Djava.rmi.server.hostname=192.168.100.9
在客户端基本不用怎么设置,在JDK安装目录中(/bin/jconsole.exe)启动jconsole.exe就可以打开主界面。输入192.168.100.9:12345用户名和密码即可看到监控界面中关于jvm的相关信息。操作
双击jconsole.exe启动连接对话框
4.配置Resin后台管理
<!--
-Administrationapplication/resin-admin-->
二.网络优化部分
1.减少TCP连接中的TIME-WAIT或CLOSE-WAIT包
Vim/etc/sysctl.conf加入以下配置
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_keepalive_intvl=15
配置属性说明:
net.ipv4.tcp_syncookies=1表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse=1表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle=1表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭。
tcp_syn_retries:INTEGER
默认值是5
对于一个新建连接,内核要发送多少个SYN连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1决定的)
tcp_synack_retries:INTEGER
默认值是5
对于远端的连接请求SYN,内核会发送SYN+ACK数据报,以确认收到上一个SYN连接请求包。这是所谓的三次握手(threewayhandshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的SYN+ACK数目。不应该大于255,默认值是5,对应于180秒左右时间。(可以根据上面的tcp_syn_retries来决定这个值)
tcp_keepalive_time:INTEGER
默认值是7200(2小时)
当keepalive打开的情况下,TCP发送keepalive消息的频率。(由于目前网络攻击等因素,造成了利用这个进行的攻击很频繁,曾经也有cu的朋友提到过,说如果2边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间是不是就是2小时,空连接攻击?tcp_keepalive_time就是预防此情形的.我个人在做nat服务的时候的修改值为1800秒)
tcp_keepalive_probes:INTEGER
默认值是9
TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)
tcp_keepalive_intvl:INTEGER
默认值为75
探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)
再执行以下命令,让修改结果立即生效:/sbin/sysctl-p
用以下语句看了一下服务器的TCP状态:
netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'
三.解决Toomanyopenfiles问题
Toomanyopenfiles问题出现有两种情况:
一种是在搜索的时候出现,多半是由于索引创建完毕之后被移动过,如果创建索引的时候不出现该错误,搜索的时候也一般是不会出现的。如果出现了有两种处理办法,一种是修改合并因子和最小合并因子,并且使用
IndexWriter.Optimize()优化索引,这样会将索引文件数量减少到文件系统限制之内;另外一种办法是修改操作系统的打开文件数量限制。方法如下:
按照最大打开文件数量的需求设置系统,并且通过检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。配置操作如下:
#cat/proc/sys/fs/file-max
如果设置值太小,修改文件/etc/sysctl.conf的变量到合适的值。这样会在每次重启之后生效。
#echo65535>/proc/sys/fs/file-max
编辑文件/etc/sysctl.conf,插入下行。
fs.file-max=65535
执行sysctl–p生效
设置ulimit–n65535
在/etc/security/limits.conf文件中设置最大打开文件数,下面是一行提示:
#
添加如下这行。
*-nofile65535
这行设置了每个用户的默认打开文件数为2048。注意nofile项有两个可能的限制措施。就是项下的hard和soft。要使修改过得最大打开文件数生效,必须对这两种限制进行设定。如果使用-字符设定,则hard和soft设定会同时被设定。
硬限制表明soft限制中所能设定的最大值。soft限制指的是当前系统生效的设置值。hard限制值可以被普通用户降低。但是不能增加。soft限制不能设置的比hard限制更高。只有root用户才能够增加hard限制值。
当增加文件限制描述,可以简单的把当前值双倍。例子如下如果你要提高默认值1024,最好提高到2048,如果还要继续增加,就需要设置成4096。
另外一种情况是在创建索引的时候,也有两种可能,一种是合并因子太小,导致创建文件数量超过操作系统限制,这时可以修改合并因子,也可以修改操作系统的打开文件数限制;另外一种是合并因子受虚拟机内存的限制,无法调整到更大,而需要索引的doc数量又非常的大,这个时候就只能通过修改操作系统的打开文件数限制来解决了。
在系统访问高峰时间以root用户执行以下的脚本,可能出现的结果如下:
#lsof-n|awk'{print$2}'|sort|uniq-c|sort-nr|more
13124204
5724244
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
ps-aef|grep24204
mysql24204241629916:15?00:24:25/usr/sbin/mysqld
系统默认程打开最多文件句柄数值1024。但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下以root用户运行以下命令:
ulimit-HSn4096以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,/etc/security/limits.conf
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇