写的一个爬虫工具,多次因为抛出这样的异常而退出。
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)
at java.util.Timer.<init>(Timer.java:154)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.<init>(MultiThreadedHttpConnectionManager.java:255)
。。。。
后来终于明白,
每抓一次网页就新建一个MultiThreadedHttpConnectionManager对象,如此的低级错误,这个bug太严重了!!每回都三次握手。。。
实在不该啊!!!只需要新建一个MultiThreadedHttpConnectionManager对象就可以了。
HttpState initialState = new HttpState();
MultiThreadedHttpConnectionManager connectionManager;
connectionManager = new MultiThreadedHttpConnectionManager();
//handshake 3 times
connectionManager.getParams().setMaxTotalConnections(1000);
connectionManager.getParams().setConnectionTimeout(5 * 3 * 1000);
connectionManager.getParams().setSoTimeout(15 * 1000);
connectionManager.getParams().setSendBufferSize(16 * 1024);
connectionManager.getParams().setReceiveBufferSize(1024 * 512);
hc = new HttpClient(connectionManager);
hc.setState(initialState);
// set agent string
hc.getParams().setParameter(HttpClientParams.USER_AGENT, ApiConst.AGENT_STRING);
// use compatibility cookie mode because the world is a cruel place
hc.getParams().setParameter(HttpClientParams.COOKIE_POLICY,
"COMPATIBILITY");
hc.getParams().makeLenient();
// no need to process retry
hc.getParams().setParameter(HttpClientParams.RETRY_HANDLER,
null);