Loading... <p><span style="font-size: 14px">为什么不选择Apache/mod+resin?<br /> 前面一直使用该模式,</span><span style="font-size: 14px">mod_caucho暴露源码的bug</span><span style="font-size: 14px">一直未得到彻底的解决。因此切换到Nginx+resin平台。硬件上要求除了内存一定要足够大(建议>4G),无其它要求(当然也不能太破,呵呵</span><img src="//cto.wang/usr/uploads/2016/07/20160703180124-37.gif" border="0" alt="sweat" /><span style="font-size: 14px">)。操作系统强烈要求安装64位,32位操作系统jvm只能识别不到2G的内存,印象中是1.57G(单实例应用)。下面总结自己的一些调优方法及配置。</span></p> <p><strong>调优硬件环境</strong></p> <pre class="brush:python;toolbar:false">CPU:Intel Xeon*2(双核) MEM:8G SWAP:1G</pre> <p><strong>一、测试32系统所支持的最大可用内存</strong><br /><span style="font-size: 14px">java -XmxXXXXM -version<br />不断加大-Xmx的大小,截止到出现以下提示:<br />Could not create the Java virtual machine.</span></p> <p><strong>二、Nginx配置</strong></p> <pre class="brush:python;toolbar:false"> location / { root /var/www/app.cn; index index.jsp; proxy_pass http://localhost:8080; include /usr/local/nginx/conf/proxy.conf; } location ~* \.(jsp|do|shtml)$ { root /var/www/app.cn; index index.jsp; include /usr/local/nginx/conf/proxy.conf; proxy_pass http://localhost:8080; proxy_set_header X-Real-IP $remote_addr; }</pre> <p> 以代理的方式进行整合,静态文件继续由Nginx来解析,扩展名为jsp|do|shtml才丢给后端resin来处理。即使resin发现的故障,前端最多只会报500、502 time out的信息。<br /><strong>三、resin配置</strong></p> <p><span style="font-size: 14px">1、jvm的优化<br />#vi $resin_root/bin/httpd.sh</span></p> <pre class="brush:python;toolbar:false">view plainprint? args="-Xmx6048m -Xms6048m -Xmn2g -Xss128k -XX:NewSize=256m -XX:MaxPermSize=512m -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31 -Dsun.net.inetaddr.ttl=60"</pre> <p><span style="font-size: 14px"> 1.1、Xmx与Xms建议配置一致,避免每次垃圾回收完成后JVM 重新分配内存。预留2G左右的内存空间给Nginx与OS就差不多了。<br /> 1.2、Xmn配置成Xmx的1/3。<br /> 1.3、Dsun.net.inetaddr.ttl=60,java对DNS解析域名结果进行缓存,默认超时时间为-1(在重启JVM前永久缓存),如有涉及域名解析失效需修改该值。</span></p> <p><span style="font-size: 14px">2、resin并发数限制<br />免费的resin是没有pro的授权,并发连接数(默认512)配置参数不可见。因此通过修改源码达到突破限制的目的。<br />1、修改方法:<br /> 1.1、下载resin3.0.22源码;<br /> 1.2、修改resin-3.0.22/modules/resin/src/com/caucho/server/port/Port.java </span> </p> <pre class="brush:python;toolbar:false"> // default timeout private long _timeout = 65000L; private int _connectionMax = 512;修改成20480 private int _minSpareConnection = 16; private int _keepaliveMax = -1; private int _minSpareListen = 5; private int _maxSpareListen = 10;</pre> <p><span style="font-size: 14px"> 1.3、将编译后的Port.class覆盖原 /lib/resin.jar包。</span></p> <p><span style="font-size: 14px">2、可以从resin-status结果得到证实</span><br /><img src="//cto.wang/usr/uploads/2016/07/20160703180124-82.png" title="1427442073492229.png" alt="1.png" /><br /> <strong> [编译前]</strong><br />—————————————————————————————————————————<br /><img src="//cto.wang/usr/uploads/2016/07/20160703180124-25.png" title="1427442086109243.png" alt="6.png" /><br /> <strong> [编译后]</strong></p> <p><span style="font-size: 14px">3、resin.conf配置 </span></p> <pre class="brush:python;toolbar:false"><dependency-check-interval>-1</dependency-check-interval></pre> <p><span style="font-size: 14px">生产环境建议关闭自检查 ,原因是会消耗系统一定资源及部分更新会出现不可意料的错误。</span></p> <pre class="brush:python;toolbar:false"><!-- Maximum number of threads. --> <thread-max>20480</thread-max></pre> <p><span style="font-size: 14px">建议与private int _connectionMax参数保持一致。</span></p> <p><span style="font-size: 14px"> 其它参数需根据应用的具体情况来调整,如长链接超时等。以上为本人整理一些调优笔记,如有遗漏或纠正请与我联系。</span></p> <p><span style="font-size: 14px">如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:</span><span style="font-size: 14px">http://t.qq.com/yorkoliu</span></p> <p><span style="font-size: 14px">转自:</span><span style="font-size: 14px">http://blog.liuts.com/post/204/</span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信
2 条评论
1
1