このプログラムは、ファイルを読み取り、各行を http として送信するために使用されます。ファイルのすべての行が URL です。
例 http: //localhost:8080/?a=1&b=2
PoolingClientConnectionManager pcm = new PoolingClientConnectionManager();
pcm.setMaxTotal(200);
pcm.setDefaultMaxPerRoute(20);
HttpClient client = new DefaultHttpClient(pcm);
ExecutorService executorService = Executors.newFixedThreadPool(10);
try (BufferedReader bfrDataSource = new BufferedReader(new FileReader(path))) {
while((line=bfrDataSource.readLine()) != null){
executorService.execute(new SendTask(line, client));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
executorService.shutdown();
client.getConnectionManager().shutdown();
SendTask.java
public class SendTask implements Runnable {
private String url;
private final HttpClient client;
public SendTask(String url, HttpClient client){
this.url = url;
this.client = client;
}
@Override
public void run() {
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse response = client.execute(httpGet);
response.getEntity().getContent().close();
} catch (ClientProtocolException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally{
httpGet.abort();
}
}
}
500,000 行のファイルを送信すると、機能します。しかし、100,000 行を送信すると、1 つのエラーが発生しました: java.lang.OutOfMemoryError: GC オーバーヘッド制限を超えました。
- 少なくとも 100 万行を送信できるようにプログラムを変更するにはどうすればよいですか? ありがとう!