2

我安装了 apache-tomcat-6.0.37 并创建了一个非常简单的 Web 应用程序。然后我创建了一个jsp如下:

<%@   page   contentType="text/html;   charset=GB2312"   %> 

<%

    System.out.println("begin" + Thread.currentThread().getName());

    System.out.println(Thread.currentThread().getName() +":" +  session.getId());

    Thread.sleep(30000);

    System.out.println("end" + Thread.currentThread().getName());
%>

我在 Firefox 上打开了多个标签。在每个选项卡上访问了这个jsp,但是只产生了两个线程来执行请求。

我的问题是为什么tomcat只产生两个线程来处理请求?如何提高并发性?

4

2 回答 2

0

非常简单:
Tomcat 使用线程池来服务每个请求,并且只有在池中没有线程来服务当前请求时才会创建线程。

所以如果线程池中有线程,tomcat不会创建新线程,会从线程池中使用。在您的情况下,可能是在第一个选项卡中为您的请求提供服务的线程可能已返回到池中,因此未创建新线程。

maxThreads您可以通过修改 的属性来增加将创建的最大线程数<Connector>。这是获取更多信息的好链接

此外,线程池中始终存在的线程数由minSpareThreadshttp 连接器的属性决定,Tomcat-7 的默认值为10.

要了解更多关于HTTP Connector配置的信息,有什么比官方文档更好的了。

于 2013-08-06T06:03:00.580 回答
0

让我们做一些实验
首先,您可以尝试以下我修改过的代码。

long begin = System.currentTimeMillis();
System.out.println("begin---" + Thread.currentThread().getName()+ "  "+begin);
System.out.println(Thread.currentThread().getName() +":" +  session.getId());
Thread.sleep(30000);
long end = System.currentTimeMillis() - begin;
System.out.println("end----" + Thread.currentThread().getName()+"  "+end);

你会发现tomcat延迟接收请求。
所以性能不是Tomcat关心的。

其次,我们更改了 url 并添加了一些参数。
访问这个jsp在每个选项卡上添加一些不同的参数(如/?param1/?param2),产生了许多线程来执行请求。

答:
如果从不同的窗口访问,某些浏览器会将请求序列化到相同的 URL。

解决方案?我知道你会看到的。

于 2013-08-06T06:03:47.240 回答