У меня есть простая java-программа, которая отправляет 10 000 HTTP-запросов серверу в параллельных потоках.HttpURLConnection: Отправка 10 000 запросов дает «Connection reset»
Многие из запросов в комплекте с успешным 200 OK кода ответа, но некоторые из запросов терпят неудачу со следующим сообщением:
java.net.SocketException: сброс подключения на java.net.SocketInputStream.read (SocketInputStream.java:196) в java.net.SocketInputStream.read (SocketInputStream.java:122) в java.io.BufferedInputStream.fill (BufferedInputStream.java:235) в java.io.BufferedInputStream.read1 (BufferedInputStream .java: 275) at java.io.BufferedInputStream.read (BufferedInputStream.java:334) в sun.net.w ww.http.HttpClient.parseHTTPHeader (HttpClient.java:689) в sun.net.www.http.HttpClient.parseHTTP (HttpClient.java:633) в sun.net.www.http.HttpClient.parseHTTP (HttpClient. Java: 660) в sun.net.www.protocol.http.HttpURLConnection.getInputStream (HttpURLConnection.java:1324)
Мой код:
import java.io.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.*;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;
import java.io.OutputStreamWriter;
import java.io.DataOutputStream;
public class CreateUsers {
public static void main(String[] args){
System.out.println(Thread.currentThread().getName());
for(int i=0; i<10000; i++){
final int cnt = i;
new Thread("" + i){
public void run(){
try {
String url = "http://myurl.com"; //I use my actual server url here
URL object=new URL(url);
HttpURLConnection con = (HttpURLConnection) object.openConnection();
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
JSONObject parent=new JSONObject();
JSONObject all_users=new JSONObject();
all_users.put("user_name", "abc");
all_users.put("email", "test"+cnt+"@test.com");
JSONArray users = new JSONArray();
users.put(all_users);
parent.put("users", users);
OutputStream os = con.getOutputStream();
os.write(parent.toString().getBytes("UTF-8"));
os.close();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
con.disconnect();
}
catch (Exception e) {e.printStackTrace();}
}
}.start();
}
}
}
UPDATE
Поскольку ответы здесь указывают на факс t, что мой сервер прерывает входящие попытки, я хотел бы знать, какие настройки сервера мне нужно сделать, чтобы смоделировать 10 000 входящих запросов.
Мой сервер представляет собой экземпляр ecazon ec2, работающий на ubuntu, apache tomcat 7, 30G RAM, 4 процессора.
Целевой сервер - это мой сервер. Я загружаю сервер с помощью 10K параллельных запросов. Я хочу, чтобы мой целевой сервер мог обслуживать каждый из 10K запросов на запись. Какие настройки следует делать на этом сервере, чтобы выполнять эти запросы, а не сбросить соединение? – Ninja
Мы ничего не знаем о целевом сервере. Это целый класс информации, которую вы должны предоставить в своем вопросе. Если речь идет о настройке сервера для обработки многих запросов, почему ваш пост будет включать только информацию о тестовом инструменте клиента? –
Я задал этот вопрос в качестве ответа на ваш ответ, что исключение, скорее всего, связано с прерыванием соединений с сервером. – Ninja