-1

我被这个问题困住了,我的应用程序可以同时被大约 1000 个用户访问。虽然它在 600 个用户之后给出以下异常。

 java.net.ConnectException: Connection refused: connect
     at java.net.PlainSocketImpl.socketConnect(Native Method)
     at java.net.PlainSocketImpl.doConnect(Unknown Source)
     at java.net.PlainSocketImpl.connectToAddress(Unknown Source)

在 server.xml 中,设置了 maxThreads = 200(默认)值。我不想增加这个来运行更多的用户,因为它会导致大量的内存使用。

如果一个用户一次访问服务器,所有的 http 请求都需要 10 - 60 毫秒。有人可以指导我如何进行分析,看看是否可以通过某种方式改进应用程序。

4

2 回答 2

0

除了提高 maxThreads 之外,我没有看到其他解决方案。这正是它的用途。请记住,它不会立即创建 1000 个线程,它只是在接收许多传入连接时使用的最大值。

如果您希望线程在“风暴之后”被销毁,请使用 maxSpareThreads 参数确保并非所有 1000 个线程都保留在池中

于 2013-06-17T10:24:17.363 回答
0

我假设您使用的是 Tomcat,maxThreads并且server.xml您正在使用 Tomcat。

查看 Tomcat 文档http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

服务器允许为新请求创建额外的线程,直到maxThreads达到。除此之外,它将请求添加到队列中。队列的最大大小由acceptCount连接器上的 定义。此时你的服务器中acceptCount的值是多少?

你也不能任意地继续增加acceptCount,尽管此时你可能确实有一些灵活性。

从长远来看,更明智的做法是调整内存使用情况,以便您可以在同一台服务器上运行更多线程。如果您还使用网络服务器(如 Apache httpd),您也应该检查它的配置。

于 2013-06-17T10:25:16.690 回答