为多个同时发生的SOAP请求配置Tomcat

时间:2012-02-27 16:31:01

标签: java tomcat soap

我非常喜欢Tomcat的新手,所以我猜这个问题的答案非常简单,但谷歌今天对我不友好。

我在Apache Tomcat上安装了一个Java Web应用程序。虽然应用程序有一个首页(用于诊断目的),但应用程序实际上都是关于SOAP接口的。没有客户需要查找服务器的网页。客户端将SOAP请求发送到服务器,服务器解析请求,然后在数据库中查找结果。然后通过SOAP将结果传递回客户端。

在默认配置中,Tomcat似乎将请求排队。我的实验包括在两台独立的机器上安装客户端,指向同一台服务器并在同一时间运行搜索(好吧,一个是0.11秒后,另一个,但你得到了图片)。

如何配置并发请求线程数? 我理想的配置是拥有X个请求线程,每个线程每隔Y分钟回收一次(即调用析构函数和构造函数并回收其内存分配),或者在Z请求之后,以较早者为准。我告诉人们可以配置IIS来执行此操作(虽然我也没有使用IIS的经验),但是如何使用Tomcat执行此操作?

我希望能够回收线程,因为Tomcat似乎在请求进入并且没有释放它时抓取内存,这意味着当我们遇到时,我偶尔会遇到(但不一致)Java堆空间错误接近内存限制(我已在2GB服务器上配置为1GB)。我不能100%确定这是因为我的应用程序中存在内存泄漏,还是我使用的工具使用了大量内存。

任何建议都将不胜感激。

谢谢, 瑞克

1 个答案:

答案 0 :(得分:1)

默认情况下,Tomcat最多可以处理150个并发HTTP请求 - 这是完全可配置的,显然会根据您的服务器规范和应用程序而有所不同。

但是,如果您的应用必须处理“突发”连接,我建议您查看Tomcat的最小和最大“备用”线程。这些是主动等待连接的线程。如果没有足够的等待线程,Tomcat必须分配更多(这会产生轻微的开销),因此您可能会看到延迟。

另外,请看一下我对这个问题的回答,其中包括如何配置连接器:

Tomcat HTTP Connector Threads

此外,请查看基本的JVM调优 - 尤其是与堆分配开销和GC暂停时间有关。