关于tomcat4并发处理的思考

关于tomcat4并发处理的思考:

1、  首先看一下server.xml文件关于并发的配置

<Connector className="org.apache.catalina.connector.http.HttpConnector"

      port="8080" minProcessors="5" maxProcessors="10"

      enableLookups="true" redirectPort="8443"

          acceptCount="2" debug="3"/>

Tomcat默认打开的并不是这个连接器,所以如果想要使用HttpConnector这个连接器需要把这个注释打开,并且端口号不要发生冲突。

这几个参数简单介绍一下:

 

 

 

 

 

Connector(表示客户端和service之间的连接)

port

指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求

minProcessors

服务器启动时创建的处理请求的线程数

maxProcessors

最大可以创建的处理请求的线程数

enableLookups

如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址

redirectPort

指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号

acceptCount

指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

connectionTimeout

指定超时的时间数(以毫秒为单位)

对于这几个参数在程序中的表现,下面一一进行列举:

1、  minProcessors 和maxProcessors

服务器启动时,首先会创建minProcessors个处理请求的线程,供客户端发送请求进行使用。

while (curProcessors < minProcessors) {

            if ((maxProcessors > 0) && (curProcessors >= maxProcessors))

                break;

            HttpProcessor processor = newProcessor();

            recycle(processor);

        }

将创建出来的线程放到Stack的数据结构里。

 

 

private HttpProcessor createProcessor() {

 

        synchronized (processors) {

            if (processors.size() > 0) {

                // if (debug >= 2)

                // log("createProcessor: Reusing existing processor");

                return ((HttpProcessor) processors.pop());

            }

            if ((maxProcessors > 0) && (curProcessors < maxProcessors)) {

                // if (debug >= 2)

                // log("createProcessor: Creating new processor");

                return (newProcessor());

            } else {

                if (maxProcessors < 0) {

                    // if (debug >= 2)

                    // log("createProcessor: Creating new processor");

                    return (newProcessor());

                } else {

                    // if (debug >= 2)

                    // log("createProcessor: Cannot create new processor");

                    return (null);

                }

            }

        }

 

    }

 

2、  acceptCount

factory.createSocket(port, acceptCount)

 

public ServerSocket createSocket (int port, int backlog)

    throws IOException, KeyStoreException, NoSuchAlgorithmException,

           CertificateException, UnrecoverableKeyException,

           KeyManagementException {

 

        return (new ServerSocket(port, backlog));

 

    }

3、  connectionTimeout

if (connectionTimeout > 0)

     socket.setSoTimeout(connectionTimeout);

         socket.setTcpNoDelay(tcpNoDelay);

   刚开始server.xml中minProcessors=”5”,maxProcessors=”10”,acceptCount=”2”

   从客户端发送请求,对请求数进行统计:

 

请求数

为处理请求创建线程数

23

10

13

6

 看了一周有关acceptCount与maxProcessors,越看越迷,并发处理和我想的与配置出来的总是不一样啊,为什么呢?先记录一下

  

  

  

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值