【发布时间】:2012-03-17 03:11:36
【问题描述】:
我是一个 Tomcat 新手,所以我猜这个问题的答案很简单,但 Google 今天对我并不友好。
我有一个安装在 Apache Tomcat 上的 Java Web 应用程序。虽然应用程序有一个首页(用于诊断目的),但该应用程序实际上都是关于 SOAP 接口的。没有客户端需要查找服务器的网页。客户端向服务器发送 SOAP 请求,服务器解析请求,然后在数据库中查找结果。然后将结果再次通过 SOAP 传递回客户端。
在其默认配置中,Tomcat 似乎对请求进行排队。我的实验包括将客户端安装在指向同一台服务器的两台不同的机器上,并在完全相同的时间运行搜索(嗯,一台比另一台晚 0.11 秒,但你明白了)。
如何配置并发请求线程数? 我的理想配置是有 X 个请求线程,每个请求线程每 Y 分钟或在 Z 个请求之后(以较早者为准)回收自身(即调用析构函数和构造函数并回收其内存分配)。有人告诉我可以配置 IIS 来执行此操作(尽管我也没有 IIS 经验),但是您将如何使用 Tomcat 来执行此操作?
我希望能够回收线程,因为当请求进入时 Tomcat 似乎在抓取内存而不释放它,这意味着当我们接近内存限制(我已经在 2GB 服务器上配置为 1GB)。我不能 100% 确定这是由于我的应用程序中的内存泄漏,还是我使用的工具占用了大量内存。
任何建议将不胜感激。
谢谢, 里克
【问题讨论】:
-
太奇怪了...... SOAP 请求最终是 HTTP 请求,而 Tomcat - 与任何 Web 容器一样 - 能够支持并发请求(无需排队)。你的 SOAP 引擎是什么(Axis、JAX-WS)?
-
我相信 JAX-WS。总是有可能我错了并且它没有排队,但即使是这样,我仍然希望能够配置它/了解配置是什么。
-
Tomcat 默认执行并发请求(没有它会有点用处!)。请发布您用于实现服务的 WS 框架。
-
您查看过您的数据库配置吗?也许数据源仅配置为接受单线程请求(在股票设置中很常见)?