Nginx+resin调优文档[原创]

为什么不选择Apache/mod+resin?
       前面一直使用该模式,
mod_caucho暴露源码的bug一直未得到彻底的解决。因此切换到Nginx+resin平台。硬件上要求除了内存一定要足够大(建议>4G),无其它要求(当然也不能太破,呵呵sweat)。操作系统强烈要求安装64位,32位操作系统jvm只能识别不到2G的内存,印象中是1.57G(单实例应用)。下面总结自己的一些调优方法及配置。

调优硬件环境

CPU:Intel Xeon*2(双核)
MEM:8G
SWAP:1G

一、测试32系统所支持的最大可用内存
java -XmxXXXXM -version
不断加大-Xmx的大小,截止到出现以下提示:
Could not create the Java virtual machine.

二、Nginx配置

   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;
   }

      以代理的方式进行整合,静态文件继续由Nginx来解析,扩展名为jsp|do|shtml才丢给后端resin来处理。即使resin发现的故障,前端最多只会报500、502 time out的信息。
三、resin配置

1、jvm的优化
#vi $resin_root/bin/httpd.sh

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"

    1.1、Xmx与Xms建议配置一致,避免每次垃圾回收完成后JVM 重新分配内存。预留2G左右的内存空间给Nginx与OS就差不多了。
    1.2、Xmn配置成Xmx的1/3。
    1.3、Dsun.net.inetaddr.ttl=60,java对DNS解析域名结果进行缓存,默认超时时间为-1(在重启JVM前永久缓存),如有涉及域名解析失效需修改该值。

2、resin并发数限制
免费的resin是没有pro的授权,并发连接数(默认512)配置参数不可见。因此通过修改源码达到突破限制的目的。
1、修改方法:
    1.1、下载resin3.0.22源码;
    1.2、修改resin-3.0.22/modules/resin/src/com/caucho/server/port/Port.java 
 

  // 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;

    1.3、将编译后的Port.class覆盖原 /lib/resin.jar包。

2、可以从resin-status结果得到证实
1.png
                                                       [编译前]
—————————————————————————————————————————
6.png
                                                       [编译后]

3、resin.conf配置 

<dependency-check-interval>-1</dependency-check-interval>

生产环境建议关闭自检查 ,原因是会消耗系统一定资源及部分更新会出现不可意料的错误。

<!-- Maximum number of threads. -->  
<thread-max>20480</thread-max>

建议与private int _connectionMax参数保持一致。

       其它参数需根据应用的具体情况来调整,如长链接超时等。以上为本人整理一些调优笔记,如有遗漏或纠正请与我联系。

如大家有什么疑问或感兴趣的话题可以通过weibo与我交流:http://t.qq.com/yorkoliu

转自:http://blog.liuts.com/post/204/

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/1757

(0)
s19930811s19930811
上一篇 2015-03-27 18:00
下一篇 2015-03-27 18:04

相关推荐

  • systemd及awk

    1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理
    2、描述awk命令用法及示例(至少3例)
    3、描述awk函数示例(至少3例)

    Linux干货 2018-01-17
  • Linux下vim编辑器的使用

    vim编辑器 概括 vim,是vi的升级版本,它不仅兼容vi的所有指令,还有一些新的特性在里面。 使用vi和vim的三种主要模式 vim在工作过程当中有三种模式,编辑模式(命令模式)、输入模式、末行模式     1、编辑模式:也叫命令模式,键盘操作常被理解为编辑命令;     2…

    Linux干货 2016-08-10
  • Linux用户、组和权限管理

    知识框架图 学习笔记 用户和组 UID root:0 系统用户:1-499、1-999 普通用户:500+、1000+ GID 管理员组:0 系统组:1-499、1-999 普通组:500+、1000+ 安全上下文 进程:运行中的程序 进程所能访问资源的权限取决于进程运行用户本身 组的类别 主要组 用户有且只能有一个主要组 组名=用户名,组中只能有一个用户 …

    2018-03-17
  • linux 记忆命令心得

    新开始学linux,要记住很多的命令,毕竟这是linux的根本,没有这些命令,连操作都没办法进行。所以我写这个的目的是我自己记忆,也是想帮助一下一同学习linux的同学们,提供自己记忆这些的方法,抛砖引玉,大家共同讨论一下。 我的记忆方法就是分类,把命令分成输出类,名词累,操作类。 输出类就是说的例如w,who,whoami,echo,ifcogfig,wh…

    Linux干货 2017-07-15
  • shell脚本之 select 循环菜单及 函数

    select 循环与菜单 select variable in list    do      循环体命令   done select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入 用户输入菜单列表中的某个数字,执行相应的命令…

    Linux干货 2016-08-22
  • mysql备份与恢复

    1、mysqldump进行mysqll数据库的备份与还原 命令说明: Schema和数据存储一起、巨大的SQL语句、单个巨大的备份文件 mysqldump: 客户端,通过mysql协议连接至mysqld; mysqldump [options] [db_name [tbl_name …]] shell> mysqldump [options] db…

    Linux干货 2017-03-27