我有一个简单的Java程序,它向并行线程中的服务器发送10,000个HTTP请求。HttpURLConnection:发送10,000个请求给出“连接重置”
许多完成一个成功的200 OK响应代码,但一些请求失败,出现以下消息请求:
java.net.SocketException异常:连接重置在 java.net.SocketInputStream.read (SocketInputStream.java:196)at java.net.SocketInputStream.read(SocketInputStream.java:122)at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)at java.io.BufferedInputStream.read1(BufferedInputStream .java:275)at java.io.BufferedInputStream.read(BufferedInputStream.java:334)at sun.net.w ww.http.HttpClient.parseHTTPHeader(HttpClient.java:689)at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)at 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
既然这里的答案指向了这个fac t我的服务器正在中止传入的尝试,我想知道我需要做什么样的服务器调试,以便能够模拟10,000个传入请求。
我的服务器是在ubuntu,apache tomcat 7,30G RAM,4个CPU上运行的amazon ec2实例。
目标服务器是我的服务器 - 我负载测试与10K并行请求的服务器。我希望我的目标服务器能够为每个10K写入请求提供服务。我应该在该服务器上进行哪些调整,以便能够处理这些请求,而不是重置连接? – Ninja
我们对目标服务器一无所知。这是您需要在您的问题中提供的全部信息。如果问题是关于调整服务器以处理许多请求,为什么您的文章仅包含有关客户端测试工具的信息? –
我问了这个问题,作为您的回答的后续问题,该异常可能是由于Web服务器中止连接。 – Ninja