2012-02-06 149 views
1

下接我上运行新的Windows 2008 64位机品牌负载测试。 加载程序是一个Java Applet,它使用HttpURLConnection将请求发送到在ServerSocket.accept()上侦听的服务器,加载程序和服务器都在同一台计算机上运行。java.net.ConnectException:连接被拒绝:负载

在我的旧的Windows 2003服务器,我能够加载在使用这种配置的1000个用户。 然而,随着新的服务器,装载大约400个会话时加载程序开始抛出以下异常:

java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 
at java.net.Socket.connect(Socket.java:579) 
at java.net.Socket.connect(Socket.java:528) 
at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:388) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:483) 
at sun.net.www.http.HttpClient.<init>(HttpClient.java:213) 
at sun.net.www.http.HttpClient.New(HttpClient.java:300) 
at sun.net.www.http.HttpClient.New(HttpClient.java:316) 
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:992) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:928) 
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:846) 
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1087) 
... 

看起来好像服务器或机器运行了一些资源。 ServerSocket积压被设置为256,它看起来好像没有被耗尽。 机器cpu利用率低于10%,并且服务器有足够的可用内存。 使用Visual VM观察客户端和服务器时,它看起来在问题发生时都处于正常运行状态。 任何想法?

+0

更新:最终我计算过,一个64位Windows服务器上运行的32位Java虚拟机时的可扩展性是通过减少约50%。看起来好像Java在64位计算机上使用的资源相比32位计算机的内存大约是内存的两倍。在发生此问题时,我仍然没有准确确定哪些资源已耗尽。最终我们移植了我们的代码以使用64位Java VM运行,并解决了这个问题。 – lyaffe 2012-10-15 08:40:39

+0

Update2:最后发现这个问题的根本原因是服务器进程停留在冗长的垃圾回收循环中,从而导致客户端连接失败。 – lyaffe 2013-09-24 08:34:42

回答

0

也许服务器拒绝连接由于缺乏一些其他的资源?每个HTTP请求将需要打开TCP连接,在Linux下使用'文件'(我不是Linux专家,所以如果我错了,请纠正我)。所以有时CPU和内存很低,但HTTP服务器打开数百个文件,最终导致失败,并且任何进一步的请求都会被拒绝。

我不知道这是否适用于Windows和,但给它一个镜头。

相关问题