我目前正在尝试加载测试服务器。由于我的控制以外的问题,我不能使用Jmeter进行测试。创建一组线程并让每个线程在同一时刻发送帖子或尽可能接近发送帖子的最佳方式是什么?在运行发送到POST到服务器的方法之前,我的当前实现创建了一些带有for循环的线程。但这根本不是同时发生的。如何发送并行POST请求Java
回答
我说你会想在群集中做到这一点,而不是在同一台机器上的多个线程,除非你有一台机器与几个网络接口卡(NIC)。你的瓶颈不是内核,它是你的网卡。您的网卡仍然会依次清空其缓冲区。
我会推荐的是有尽可能多的机器集群,你可以。在每台机器上,都有一对线程(只是为了确保NIC的缓冲区保持满)。不要麻烦同步集群同时发送请求,因为往返时间(RTT)将花费太长时间,并且会使您的负载测试无效。只需要将每个线程锤掉......从统计角度来讲,如果您的群集足够大,则必定会同时获得几个POST请求。
假设存在任何疯狂的原因,我不能使用预先存在的加载应用程序,这是我会用我将创建的应用程序做什么。将罐子放在尽可能多的机器上,并行运行。 – MadConan
一个网卡一次只能处理一个连接到主机的连接? – MadConan
一个网卡有一个缓冲区,你可以尽可能快地填充它,但它只能清空缓冲区才能顺序发送数据包。服务器通过拥有多个网卡来解决这个问题 - 不是我是一个服务器大师或其他任何东西 – searchengine27
我肯定会推荐使用一些负载测试应用程序框架。有很多可供选择的。
就这样说,你可以使用这样的事情开始。这将是我从哪里开始。您需要实施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);
}
}
你可能想使
- 默认的线程池的一些显着的改进是非常小的。它等于系统上的CPU核心数量。创建自己的
ForkJoinPool
实例将为您提供更好的控制。 - 移动到一个单独的类来启动和解析参数会好得多。
假设你的问题是关于同步你的线程,而不是创建/运行线程,那么我推荐CountDownLatch。链接中的示例非常棒。
- 1. JAVA发送POST http请求
- 2. 如何发送POST请求?
- 3. 发送POST请求
- 4. 发送POST请求
- 5. 发送POST请求
- 6. 发送POST请求
- 7. 如何发送POST HTTP请求的Java进行wit.ai音频
- 8. POST请求发送json数据java HttpUrlConnection
- 9. Java - 发送GET或POST请求
- 10. 如何使用nsurlconnection发送post请求
- 11. 如何让Ajax.ActionLink发送Http Post请求?
- 12. 如何使用django发送POST请求?
- 13. 了设备如何发送POST请求
- 14. Django的tastypie - 如何发送post请求
- 15. 如何在python中发送post请求?
- 16. 如何向OpsGenie发送POST请求?
- 17. Android,如何发送POST请求
- 18. 如何使用Volley发送POST请求
- 19. 如何通过telnet发送POST请求
- 20. 如何使用HTTPie发送POST请求?
- 21. 如何在RestSharp中发送POST请求?
- 22. 发送POST请求点击
- 23. C#POST请求被发送
- 24. 发送HTTP POST请求
- 25. 发送POST请求变身
- 26. 发送Rails中POST请求
- 27. 改造:发送POST请求
- 28. HttpsURLConnection - 发送POST请求
- 29. 发送POST请求JSP
- 30. PHP Post请求发送
我不明白jmeter与体系结构的关系 – njzk2
如果您从外部负载测试服务器(模拟HTTP流量),则应该如何生成流量。那么为什么JMeter没有这个问题呢? –
我不能具体说。但是我有一种处理jmeter不能做的数据的方法。这不是重要的部分。 – drpogue