`

在resin.conf中设置最大值 threadmax

阅读更多
<!--S 头部开始-->

在resin.conf中设置最大值 threadmax

2007年11月07日 评论(0)|浏览(7) 点击查看原文

以下方案我是在Intel xeon(至强) 3.2G 2个双核物理CPU+2G内存(Ecc)上进行:

resin版本为resin-pro-3.0.21,JVM为Jrockit 1.5_06, resin java 启动参数 -Xms256m -Xmx512m

1. 以下为resin.conf配置

 

 

<!--

- Resin 3.0 configuration file.

-->

<resin xmlns="http://caucho.com/ns/resin"

xmlns:resin="http://caucho.com/ns/resin/core">

<!--

- Logging configuration for the JDK logging API.

-->

<log name="" level="all" path="stdout:" timestamp="[%H:%M:%S.%s] "/>

 

<logger name="com.caucho.java" level="config"/>

<logger name="com.caucho.loader" level="config"/>

 

<dependency-check-interval>600s</dependency-check-interval>

 

<javac compiler="internal" args=""/>

 

<thread-pool>

<thread-max>10240</thread-max>

<spare-thread-min>50</spare-thread-min>

</thread-pool>

 

<min-free-memory>5M</min-free-memory>

 

<server>

<class-loader>

<tree-loader path="${resin.home}/lib"/>

<tree-loader path="${server.root}/lib"/>

</class-loader>

 

<keepalive-max>1024</keepalive-max>

<keepalive-timeout>60s</keepalive-timeout>

 

<resin:if test="${resin.isProfessional()}">

<select-manager enable="true"/>

</resin:if>

 

<bind-ports-after-start/>

 

<http server-id="" host="*" port="80"/>

 

<cluster>

<srun server-id="" host="127.0.0.1" port="6802"/>

</cluster>

 

<resin:if test="${resin.isProfessional()}">

<persistent-store type="cluster">

<init path="session"/>

</persistent-store>

</resin:if>

 

<ignore-client-disconnect>true</ignore-client-disconnect>

 

<resin:if test="${isResinProfessional}">

<cache path="cache" memory-size="20M"/>

</resin:if>

 

<web-app-default>

<class-loader>

<tree-loader path="${server.root}/ext-webapp"/>

</class-loader>

 

<cache-mapping url-pattern="/" expires="60s"/>

<cache-mapping url-pattern="*.gif" expires="600s"/>

<cache-mapping url-pattern="*.jpg" expires="600s"/>

 

<servlet servlet-name="directory"

servlet-class="com.caucho.servlets.DirectoryServlet">

<init enable="false"/>

</servlet>

 

<allow-servlet-el/>

 

<session-config>

<enable-url-rewriting>false</enable-url-rewriting>

</session-config>

 

</web-app-default>

 

<host-default>

<class-loader>

<compiling-loader path="webapps/WEB-INF/classes"/>

<library-loader path="webapps/WEB-INF/lib"/>

</class-loader>

 

<!--access-log path="logs/access.log"

format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'

rollover-period="1W"/-->

 

<web-app-deploy path="webapps"/>

 

<ear-deploy path="deploy">

<ear-default>

<!-- Configure this for the ejb server

-

- <ejb-server>

- <config-directory>WEB-INF</config-directory>

- <data-source>jdbc/test</data-source>

- </ejb-server>

-->

</ear-default>

</ear-deploy>

 

<resource-deploy path="deploy"/>

 

<web-app-deploy path="deploy"/>

</host-default>

 

<resin:import path="${resin.home}/conf/app-default.xml"/>

 

<host-deploy path="hosts">

<host-default>

<resin:import path="host.xml" optional="true"/>

</host-default>

</host-deploy>

 

<host id="" root-directory=".">

<web-app id="/" document-directory="d:\website\chat">

</web-app>

</host>

 

</server>

</resin>

 

2. 在应用的web.xml中加入resin status查看servlet映射

1

2

3

4

 

<servlet-mapping servlet-class='com.caucho.servlets.ResinStatusServlet'>

<url-pattern>/resin-status</url-pattern>

<init enable="read"/>

</servlet-mapping>

3. 启动resin,确认应用正常启动。

4. 写访问测试程序

 

 

import java.io.InputStream;

import java.net.URL;

 

 

public class TestURL

{

public static void main(String[] args) throws Exception

{

long a = System.currentTimeMillis();

System.out.println("Starting request url:");

for(int i = 0; i < 10000; i++){

URL url = new URL("http://192.168.1.200/main.jsp");

 

InputStream is = url.openStream();

is.close();

System.out.println("Starting request url:"+i);

}

System.out.println("request url end.take "+(System.currentTimeMillis()-a)+"ms");

}

 

}

5. 在Jbuilder中执行TestURL

在执行过程中,一边刷新http://192.168.1.200/resin-status,查看resin状态,在http://*:80 中的 Active Threads 和 Total,会一直增长,当长到512的时候不再增长,这时再刷新resin-status页面时,会发现打开很慢。原因是服务器已经达到最大连接数,在等待前面连接的释放而不能接受新的连接。

于是下载Resin 3.0.21源码,搜索 512,发现com.caucho.server.port.Port类中有以下代码:

 

 

// default timeout

private long _timeout = 65000;

 

private int _connectionMax = 512;//就是这行,查找resin所有源码后,发现没有对这个值进行设置

private int _minSpareConnection = 16;

 

private int _keepaliveMax = -1;

 

private int _minSpareListen = 5;

private int _maxSpareListen = 10;

将_connectionMax 改为 20480,然后重新编译并替换resin.jar中的Port类。

6. 重新启动Resin,再次运行TestURL进行测试,这次你会发现Threads Active 和 Total 一直变大,且可以超过512一直增大,在测试程序运行过程中刷新页面,页面响应性能还是不错的.

另,测试过程中Resin会打印出 1-3次 强制执行GC的信息,属于正常。

7.待测试完毕,Threads Active 和 Total 马上降为1.Idle为9,总内存为536.87Meg 空闲内存为480.33M

再经多次测试,结果一致,内存回收正常,表明当前 resin 稳定性和响应性可靠。

本文由 Java开发者(Chinajavaworld.com)享有版权,转载请注明出自 JAVA开发者(http://www.chinajavaworld.com)

 

 

> 在resin.conf中设置最大值。

>

> hread-pool>

> <!-- Maximum number of threads. -->

> <thread-max>128</thread-max>

>

> <!-- Minimum number of spare connection threads.

> -->

> <spare-thread-min>25</spare-thread-min>

> /thread-pool>

>

> 需要考虑的是,每个线程需要一个stack。

> 高压力服务,内存才是瓶颈。

> 在32位系统中,resin只能使用2G内存。

>

> 其实128已经足够用了:)

引用Resin的文档

Stack size

Each thread in the VM get's a stack. The stack size will limit the number of threads that you can have, too big of a stack size and you will run out of memory as each thread is allocated more memory than it needs.

The Resin startup scripts (httpd.exe on Windows, wrapper.pl on Unix) will set the stack size to 2048k, unless it is specified explicity. 2048k is an appropriate value for most situations.

JVM option passed to Resin Meaning

-Xss the stack size for each thread

-Xss determines the size of the stack: -Xss1024k. If the stack space is too small, eventually you will see an exception class java.lang.StackOverflowError .

Some people have reported that it is necessary to change stack size settings at the OS level for Linux. A call to ulimit may be necessary, and is usually done with a command in /etc/profile:

Limit thread stack size on Linux

1

 

ulimit -s 2048

-Xss=1M可以指定stack为1M,理论上计算128线程就用了128M,但实际上的占用还要少得多,我在2G的内存机器上(经过TCP优化)进行高负载测试,最高跑到了4000多个线程。

分享到:
评论

相关推荐

    xorg.conf配置详解(图形显示).doc

    在本文中,我们将详细介绍 xorg.conf 文件的配置详解,包括其目录结构、section 类型、选项名称和选项值等。 目录结构 -------- 在 Linux 系统中,Xorg.conf 文件所在的目录结构是非常重要的。下面是 X11R7 中的...

    play frameword application.conf

    play frameword application.conf

    Linux系统中xorg.conf文件详细介绍

    在Linux系统中,`xorg.conf` 文件是配置X Window系统的核心配置文件之一。它控制着图形界面的显示方式,包括分辨率、颜色深度、键盘鼠标等输入设备的设置等。本文将深入探讨`xorg.conf`文件的具体内容及其在Linux...

    DNS配置文件named.conf详解

    // generated by named-bootconf.pl options { directory "/var/named"; // 如果防火墙存在且需要与特定的名字服务器通信,则可能需要取消注释以下query-source指令。 // BIND8.1 默认使用未特权限端口,而之前的...

    解决Cent0S 6.7直接在/etc/resolv.conf文件下修改DNS地址重启不生效问题

    在Linux系统中,尤其是CentOS 6.7版本,配置网络连接时,有时会遇到一些问题,例如在`/etc/resolv.conf`文件中修改DNS地址后,重启系统或网络服务,这些更改不会生效。这个问题通常与网络服务的管理方式有关,特别是...

    wm8960驱动文件及asound.conf配置

    如果需要调整音量、静音状态或其他参数,可以在`asound.conf`中添加相应的控制条目。 在实际应用中,为了使WM8960正常工作,可能还需要进行以下步骤: 1. **内核配置**:确保在内核配置中选中了对WM8960的支持。 2....

    sysctl.conf中文参数指南[收集].pdf

    这个参数设置用户时钟的最大频率。建议将其添加到系统启动脚本中。 7. debug.exception-trace = 1 这个参数可以开启或关闭segfault的默认开启。如果设置为0,将关闭segfault。 8. net.unix.max_dgram_qlen = 10 ...

    redis.conf Redis配置文件下载

    redis.conf Redis配置文件 下载 redis.conf 配置详解 Redis配置文件redis.conf 详解1.基本配置内存单位的表示# 1k =&gt; 1000 bytes# ...Redis 的详细介绍Redis 的下载地址

    snmp.conf配置文件

    snmpd.conf配置文件 送给同学 用在nagios上面

    nginx.conf下载

    nginx.conf配置文件,反向代理,负载均衡--轮询、权重、IPHASH等

    linux vhost.conf配置

    vhost.conf apache主机的配置 centos7服务器的配置,

    redis配置文件redis.conf

    redis配置文件redis.conf

    redis.conf-6.0

    redis.conf 6.0版本配置文件

    ubuntu网络重启后或主机重启后,_etc_resolv.conf恢复原样的解决办法 - 正风三才的博客 - CSDN博客1

    **方法一** 是通过创建一个名为 `/etc/resolvconf/resolv.conf.d/tail` 的文件来保持DNS设置。首先,需要使用命令 `sudo vi /etc/resolvconf/resolv.conf.d/tail` 创建并编辑这个文件。然后,在这个文件中添加你需要...

    nginx.conf配置文件下载

    nginx.conf配置文件下载

    default.conf

    1. 把default.conf放入codeblocks目录中;这里的codeblock目录不是安装包文件夹,而是C盘下的,…AppData\Roaming\CodeBlocks。 2. 注意把原来的配置文件打包一份,防止配置错误导致codeblock无法使用; 3. 把配置好...

    中文说明worldserver.conf

    魔兽世界单机中文说明worldserver

    redis.conf配置文件下载

    redis.conf配置文件下载

    httpd-ssl.conf 配置文件

    httpd-ssl.conf

    smb.conf中文范例

    在 smb.conf 文件中,我们还可以使用一些高级参数来控制 Samba 的行为,例如我们可以使用 "security" 参数来设置 Samba 的安全级别,我们可以使用 "browseable" 参数来设置共享目录的浏览权限等。 smb.conf 文件是 ...

Global site tag (gtag.js) - Google Analytics