A connection refused can be for multiple reasons, e.g. a webserver can refuse connections if the number of concurrent sockets passes a threshold. Your bind exception which explicitly states that the port is in use should be a different problem. regards deepak
On Wed, Jul 29, 2009 at 1:20 PM, shaoxianyang <[email protected]> wrote: > > I think this might be jmeter's bug. Here is why: > > The exception shows > > <httpSample t="1002" s="false" rc="Non HTTP response code: > java.net.ConnectException" rm="Non HTTP response message: Connection > refused: connect" tn="getAllCategoryGroup 1-508" sc="1" ec="1" ng="115" > na="115"> > <responseData class="java.lang.String">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) > at java.net.PlainSocketImpl.connect(Unknown Source) > at java.net.SocksSocketImpl.connect(Unknown Source) > at java.net.Socket.connect(Unknown Source) > at java.net.Socket.connect(Unknown Source) > at sun.net.NetworkClient.doConnect(Unknown Source) > at sun.net.www.http.HttpClient.openServer(Unknown Source) > at sun.net.www.http.HttpClient.openServer(Unknown Source) > at sun.net.www.http.HttpClient.<init>(Unknown Source) > at sun.net.www.http.HttpClient.New(Unknown Source) > at sun.net.www.http.HttpClient.New(Unknown Source) > at > sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown > Source) > at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown > Source) > at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown > Source) > at > > org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:490) > at > > org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1037) > at > > org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1023) > at > > org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:346) > at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243) > at java.lang.Thread.run(Unknown Source) > > > Then I check out the JMeter's code HttpSampler.java at line 490: > > for (retry = 0; retry <= MAX_CONN_RETRIES; retry++) { > try { > conn = setupConnection(url, method, res); > // Attempt the connection: > savedConn = conn; > conn.connect(); (======= Line 490 =====) > break; > } catch (BindException e) { > if (retry >= MAX_CONN_RETRIES) { > log.error("Can't connect after "+retry+" retries, > "+e); > throw e; > } > > protected HttpURLConnection setupConnection(URL u, String method, > HTTPSampleResult res) throws IOException { > ...} > > > Their SetupConnection just open a HttpURLConnection, here is the exerpt: > > conn = (HttpURLConnection) url.openConnection(); > conn.setRequestMethod("GET"); //whatever the http method is > > This is the very high level what setupConnection is doing. Usually, (by > my > limited java net programming knowledge...), you are ready to get response, > but instead, in the calling method at line 490, it immediately calls > URLConnection.connect (out of that HttpURLConnection instance. It is like > in a short time, you are making two connection out of that socket. After > that logic, then it will eventually pull out the response logic. Why is > that? > > I wrote a small program to simulate late, and I also get Connection refused > exception, here is the code: > > > package com.sezmi.middleware.pcs.core; > > import java.net.HttpURLConnection; > import java.net.URL; > > public class HttpUrlConnectionTest { > > public static void main(String[] args) { > int total = 5000; > ConnectionThread[] ts = new ConnectionThread[total]; > for (int i=0; i<total;i++) { > ts[i] = new ConnectionThread(); > } > > for (int i=0; i<total; i++) { > ts[i].start(); > } > > System.out.println("all threads are done..."); > > > } > > > > public static class ConnectionThread extends Thread { > public void run() { > try { > URL url = new > URL(" > http://localhost:8080/TestPodCast/TestPodCastServlet?test=testAllCategory > "); > HttpURLConnection conn = > (HttpURLConnection)url.openConnection(); > conn.setRequestMethod("GET"); > conn.setRequestProperty("Connection", > "keep-alive"); > conn.connect(); // With this line, I am > getting that Connection > Refused exception. Without this line, the request went ok. > > } catch (Exception ex) { > ex.printStackTrace(); > } > > } > } > } > > > > > > > > Can someone let me know if this is truely the jmeter source problem, please > do explain why the second connect method call is necessary. > > > Thanks. > > > > Shaoxian Yang > -- > View this message in context: > http://www.nabble.com/java.net.BindException-returned-from-http-sampler-tp24716020p24726791.html > Sent from the JMeter - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >

