Thanks Ron, I'm doing all the things you suggest already 1) Reusing a Session 2) bundling 20 files in 1 insertContent() 3) Checked netstat and there are no TIMED_WAIT connections on either client or server
I'm trying something different this time which is to use a thread pool to try to increase effeciency of sending the files. Maybe this will be worse on the system I dont know. Maybe there is some kind of maximum session open time ? The error occur about 2 hours into the transfer typically. I could try closing and reopening the session every hour ... -David Server: 4.1-4 on Fedorah fc 11 Client: XP/Pro SP3 and Windows 7 XCC: Latest from download -----Original Message----- From: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] On Behalf Of Ron Hitchens Sent: Monday, March 15, 2010 4:49 AM To: General Mark Logic Developer Discussion Subject: Re: [MarkLogic Dev General]ServerConnectionException-consistantly after about 20, 000 files You may be filling up your OS's file table. When a socket is closed, the OS holds onto it for a while (default usually about two minutes) to reliably detect any straggler packets. When you cycle a lot of connection quickly, this can max out internal data structures in the OS. If you do a netstat and see zillions of connections in TIME_WAIT state, that's probably what's happening. If you're connecting across a LAN, this delay is not really needed, because it's hard for packet to get rerouted anywhere else. You can tune the socket wait time down to 5 seconds or so and that will allow file table slots to be re-used more quickly. You can also insert multiple documents per request, all of which will be transferred together and result in fewer low-level sockets being opened. On Mar 14, 2010, at 9:28 PM, Lee, David wrote: > FYI, here's a stack trace from the same program but in this case its the query component under load. > This is very consistent as well after about 10 -20k requests > > > com.marklogic.xcc.exceptions.ServerConnectionException: Error parsing HTTP headers: Premature EOF, partial header line read: '' > [Session: user=DLEE, cb={default} [ContentSource: user=DLEE, cb={none} [provider: address=home/192.168.1.10:8011, pool=0/64]]] > at com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(Abs tractRequestController.java:99) > at com.marklogic.xcc.impl.SessionImpl.submitRequest(SessionImpl.java:280) > at org.xmlsh.marklogic.put.setChecksum(put.java:341) > at org.xmlsh.marklogic.put.flushContent(put.java:315) > at org.xmlsh.marklogic.put.putContent(put.java:288) > at org.xmlsh.marklogic.put.load(put.java:272) > at org.xmlsh.marklogic.put.load(put.java:266) > at org.xmlsh.marklogic.put.run(put.java:126) > at org.xmlsh.core.XCommand.run(XCommand.java:86) > at org.xmlsh.core.XCommand.run(XCommand.java:63) > at org.xmlsh.sh.core.SimpleCommand.exec(SimpleCommand.java:121) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.core.Pipeline.exec(Pipeline.java:124) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.shell.Shell.runScript(Shell.java:362) > at org.xmlsh.core.ScriptCommand.run(ScriptCommand.java:75) > at org.xmlsh.sh.core.SimpleCommand.exec(SimpleCommand.java:121) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.core.Pipeline.exec(Pipeline.java:124) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.shell.Shell.runScript(Shell.java:362) > at org.xmlsh.core.ScriptCommand.run(ScriptCommand.java:75) > at org.xmlsh.sh.core.SimpleCommand.exec(SimpleCommand.java:121) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.core.Pipeline.exec(Pipeline.java:124) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.shell.Shell.interactive(Shell.java:461) > at org.xmlsh.commands.builtin.xmlsh.run(xmlsh.java:82) > at org.xmlsh.core.BuiltinCommand.run(BuiltinCommand.java:54) > at org.xmlsh.sh.shell.Shell.main(Shell.java:690) > Caused by: java.io.IOException: Error parsing HTTP headers: Premature EOF, partial header line read: '' > at com.marklogic.http.HttpHeaders.nextHeaderLine(HttpHeaders.java:326) > at com.marklogic.http.HttpHeaders.parseResponseHeaders(HttpHeaders.java:287 ) > at com.marklogic.http.HttpChannel.parseHeaders(HttpChannel.java:323) > at com.marklogic.http.HttpChannel.receiveMode(HttpChannel.java:293) > at com.marklogic.http.HttpChannel.getResponseCode(HttpChannel.java:187) > at com.marklogic.xcc.impl.handlers.EvalRequestController.issueRequest(EvalR equestController.java:111) > at com.marklogic.xcc.impl.handlers.EvalRequestController.serverDialog(EvalR equestController.java:62) > at com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(Abs tractRequestController.java:72) > ... 29 more > > > > From: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] On Behalf Of Lee, David > Sent: Saturday, March 13, 2010 7:42 PM > To: General Mark Logic Developer Discussion > Subject: RE: [MarkLogic Dev General] ServerConnectionException-consistantly after about 20, 000 files > > Here's a full stack trace, including my code in the stack. > by "opening connections" I mean calling > > URI serverUri = new URI (connect); > ContentSource cs = ContentSourceFactory.newContentSource (serverUri); > > for ever file instead of reusing the ContentSource for all files. > Although that may be a red-herring ... when I do it that way (new Content Source for each file) I'm not aborting the push operation if one file fails so I may be missing these errors in that case. > > --------- Stack Trace > > > > 2010-03-13 16:17:13,748 12310138 ERROR [main] core.SimpleCommand - Exception running command: ml:put > com.marklogic.xcc.exceptions.ServerConnectionException: An established connection was aborted by the software in your host machine > [Session: user=DLEE, cb={default} [ContentSource: user=DLEE, cb={none} [provider: address=home/192.168.1.10:8011, pool=0/64]]] > at com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(Abs tractRequestController.java:99) > at com.marklogic.xcc.impl.SessionImpl.insertContent(SessionImpl.java:204) > at org.xmlsh.marklogic.put.load(put.java:180) > at org.xmlsh.marklogic.put.load(put.java:171) > at org.xmlsh.marklogic.put.run(put.java:99) > at org.xmlsh.core.XCommand.run(XCommand.java:86) > at org.xmlsh.core.XCommand.run(XCommand.java:63) > at org.xmlsh.sh.core.SimpleCommand.exec(SimpleCommand.java:121) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.core.Pipeline.exec(Pipeline.java:124) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.shell.Shell.runScript(Shell.java:362) > at org.xmlsh.core.ScriptCommand.run(ScriptCommand.java:75) > at org.xmlsh.sh.core.SimpleCommand.exec(SimpleCommand.java:121) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.core.Pipeline.exec(Pipeline.java:124) > at org.xmlsh.sh.shell.Shell.exec(Shell.java:560) > at org.xmlsh.sh.shell.Shell.interactive(Shell.java:461) > at org.xmlsh.commands.builtin.xmlsh.run(xmlsh.java:82) > at org.xmlsh.core.BuiltinCommand.run(BuiltinCommand.java:54) > at org.xmlsh.sh.shell.Shell.main(Shell.java:690) > Caused by: java.io.IOException: An established connection was aborted by the software in your host machine > at sun.nio.ch.SocketDispatcher.write0(Native Method) > at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33) > at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104) > at sun.nio.ch.IOUtil.write(IOUtil.java:60) > at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:334) > at com.marklogic.http.HttpChannel.writeBuffer(HttpChannel.java:373) > at com.marklogic.http.HttpChannel.writeBody(HttpChannel.java:353) > at com.marklogic.http.HttpChannel.flushRequest(HttpChannel.java:346) > at com.marklogic.http.HttpChannel.write(HttpChannel.java:134) > at com.marklogic.xcc.impl.handlers.ContentInsertController.writeChunkHeader (ContentInsertController.java:299) > at com.marklogic.xcc.impl.handlers.ContentInsertController.issueRequest(Con tentInsertController.java:210) > at com.marklogic.xcc.impl.handlers.ContentInsertController.serverDialog(Con tentInsertController.java:112) > at com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(Abs tractRequestController.java:72) > ... 20 more > > > > > > From: general-boun...@developer.marklogic.com [mailto:general-boun...@developer.marklogic.com] On Behalf Of Sam Neth > Sent: Saturday, March 13, 2010 6:08 PM > To: General Mark Logic Developer Discussion > Subject: Re: [MarkLogic Dev General] ServerConnectionException -consistantly after about 20, 000 files > > Could you post a stack trace? > > What version of XCC are you using? > > What specifically are you referring to when you talk about "opening connections"? > > On Mar 13, 2010, at 2:33 PM, Lee, David wrote: > > > If I use XCC to iteratively insert a large set of documents I consistently get this error > > com.marklogic.xcc.exceptions.ServerConnectionException: An established connectin was aborted by the software in your host machine [Session: user=DLEE, cb={default} [ContentSource: user=DLEE, cb={none} [providr: address=home/192.168.1.10:8011, pool=0/64]]] > > > This occurs after about 20,000 files and aborts the program. > I'm thinking of implementing a exception handler to retry but I dont want to be retrying after more serious errors. > The server log doesnt show any problems, and this is on a dedicated 1GB wired LAN so I dont think its internet problems. > > If instead of using the same connection I open the connection for each file it often gets around this problem, but not always, > I think its getting around it because I'm not aborting on error in that case (just going to the next file). > > I'm using this code snippet to create the content in bulks of 1-20 ( files in a directory ) > > Content content= ContentFactory.newContent (uri, file, mCreateOptions); > contents.add(content); > ... > > if( ! contents.isEmpty() ) > session.insertContent (contents.toArray(new Content[ contents.size()])); > > > > Any suggestions ? > > > > ---------------------------------------- > David A. Lee > Senior Principal Software Engineer > Epocrates, Inc. > d...@epocrates.com > 812-482-5224 > > _______________________________________________ > General mailing list > General@developer.marklogic.com > http://xqzone.com/mailman/listinfo/general > > _______________________________________________ > General mailing list > General@developer.marklogic.com > http://xqzone.com/mailman/listinfo/general --- Ron Hitchens {mailto:r...@ronsoft.com} Ronsoft Technologies (650) 766-2355 (Home Office) http://www.ronsoft.com (707) 924-3878 (fax) Bit Twiddling At Its Finest "No amount of belief establishes any fact." -Unknown _______________________________________________ General mailing list General@developer.marklogic.com http://xqzone.com/mailman/listinfo/general _______________________________________________ General mailing list General@developer.marklogic.com http://xqzone.com/mailman/listinfo/general