Sockets are files too. Each HTTP connection you make will require a socket unless you reuse that the client and it has HTTP/1.1 support. Each socket opened will remain open for a bit before the kernel closes it which leads to sockets exhausting the serveres file descriptor limit.
On Fri, Aug 26, 2011 at 9:17 AM, Dias, Cliff, VF-Group <[email protected]> wrote: > Hi, > I am trying to run a load test on a couch db instance. I am peforming an > http post to insert the data to the DB, but I get an emfile error. > > I have read the FAQ and I understand that I have to increase the file > descriptor limit. > > I would like to understand why I need to do this ? I am writing to a > single database, so I would expect couch DB to recycle the connection. > > Here is the method I use to write. It is a simple method called 10000 > times. > > > public void doAdd(Data data) throws HttpException, IOException > { > PostMethod method; > > HttpClient client = new HttpClient(); > > String url = baseURL; > > method = new PostMethod(url); > > > > > Gson gson = new > GsonBuilder().setPrettyPrinting().create(); > > > String jsonOutput = gson.toJson(data); > > method.setRequestBody(jsonOutput); > method.setRequestHeader( "content-type", > "application/json"); > > long t1 = System.currentTimeMillis(); > > client.executeMethod(method); > > String response = method.getResponseBodyAsString(); > > long t2 = System.currentTimeMillis(); > > System.out.println("response = " + response); > System.out.println("Time = " + (t2-t1)); > > > method.releaseConnection(); > > } > > > Kind regards, > Cliff >
