我目前正在尝试加载测试服务器。由于我无法控制的问题,我无法使用jmeter进行测试。什么是创建一组线程的最佳方法,让每个线程在同一时刻发送帖子,或者尽可能接近它?我的当前实现在运行发送到服务器的POST的方法之前创建了许多带有for循环的线程。但这根本不是并发的。
答案 0 :(得分:3)
我想你会想要在群集中执行此操作,而不是在同一台计算机上的多个线程中执行此操作,除非您的计算机具有多个网络接口卡(NIC)。你的瓶颈不是核心,而是你的网卡。您的NIC仍将按顺序清空其缓冲区。
我建议您拥有尽可能多的机器群集。在每台机器上,有一些线程(只是为了确保NIC的缓冲区保持满)。不要打扰同步群集以同时发送请求,因为往返时间(RTT)将花费太长时间,它将使您的负载测试无效。让每个Thread锤走了......从统计学上讲,只要你的集群足够大,你就必须同时获得几个POST请求。
答案 1 :(得分:1)
假设这个问题只是同步你的线程,而不是创建/运行线程,那么我建议CountDownLatch。链接中的示例很棒。
答案 2 :(得分:0)
我肯定会建议使用一些负载测试应用程序框架。有很多可供选择。
话虽如此,你可以使用这样的东西开始。这将是我从哪里开始的。您需要实现libraries
方法。至少可以说,这不是很强大。没有记录,没有报告没有错误处理 - 所有这些都是“免费”(对于“免费”的某些定义)和负载测试应用程序。
performRequest
您可能想要做出的一些值得注意的改进
public class HttpClient {
enum RequestType{
POST,GET
}
private RequestType type;
private String url;
public HttpClient(RequestType rt, String url){
type = rt;
this.url = url;
}
public void performRequest(){
// your code here.
}
public static void main(String[] args){
List<HttpClient> clients = new ArrayList<>();
int clientCount = Integer.parseInt(args[0]);
String url = args[1];
for(int i=0; i<clientCount; i++){
clients.add(new HttpClient(RequestType.POST,url));
}
clients.parallelStream().forEach(HttpClient::performRequest);
}
}
实例可以让您获得更大的控制权。