2015-09-11 307 views
0

我与Tomcat的如下问题并发服务请求时:Tomcat服务器

我创建了一个模拟Web服务,我使用的Thread.sleep(时间)来定义模拟服务的执行时间。我将此服务部署到Tomcat。

我创建了一个客户端来同时向服务发送多个请求(50个请求)。

当我将执行时间设置为一个小数字(例如2000毫秒)时,50个请求被成功返回。但是,当我将执行时间设置为更大的数字(例如5000毫秒)时,某些请求会失败。执行时间越长,失败次数越多。

我一直在玩Tomcat的线程池配置,但目前为止没有帮助。我为我的Tomcat连接器当前的配置如下:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
    maxThreads="150" minSpareThreads="4"/> 
<Connector executor="tomcatThreadPool" 
      port="8080" 
      protocol="org.apache.coyote.http11.Http11NioProtocol" 
      connectionTimeout="2000000" 
      acceptCount="50" 
      redirectPort="8443"/> 

可能有人建议我一个解决方案来解决这个问题?

回答

0

奇怪,因为您有足够的并发线程(maxThreads=150)同时处理50个请求。然而,Executor可以与其他连接器共享,因此线程在其他地方使用的可能性很小。 更可能我会说这应该工作,也许上面的配置不活跃。如果您在Eclipse中对此进行了更改,是否执行了“发布”(在服务器视图中,右键单击tomcat服务器并选择“发布”)?然后重新启动tomcat。

+0

谢谢你的回答。 我也觉得这很奇怪。我已经检查过配置是否有效。 事情是,当我设置Thread.sleep(time)time = 2000时,它可以正常工作,但是当time = 5000时,某些请求会失败。 – trangmx

+0

睡眠时间越长意味着线程被占用的时间越长,因此它们可以服务于其他请求,可能会导致它们超时。如果你真的有50个线程,就不会发生这种情况。所以从外观上看,你的线程少或者超过150个并行请求。也许你可以发布整个server.xml吗?你如何发起请求? – geert3

+0

请在这里查看整个server.xml:[server.xml](https://github.com/trangmx/phdproject/blob/master/Tomcat/conf/server.xml)。 我将应用程序配置为只发送50个并发请求,您可以在此日志文件中看到服务器上的访问日志:[访问日志](https://github.com/trangmx/phdproject/blob/master/Tomcat/ logs/localhost_access_log.2015-09-11.txt) – trangmx