让我们采用一个非常简单的jmeter脚本,它在HTTP请求(GET)中下载128MB的文件。目的是强调被测服务器,因此不需要将文件存储在本地或存储在jvm的内存中以备将来使用。该文件应该完全下载,因为它与服务器保持连接。
情境: 10个或更多线程同时运行,起步时间为5秒。假设网络带宽不受限制。
档案位置:https://storage.googleapis.com/videos12/dummy.txt
问题是 - 你为jmeter的jvm的堆大小设置了多少内存,这样你就不会得到java OOM错误?什么是进行基本计算的方法?
$watch
- >这可以在jmeter.bat文件中设置。
答案 0 :(得分:3)
答案好:不要问或猜测,测量它。使用ie JVisualVM:
正确答案:如果您不关心响应,请不要使用HTTP请求采样器,而是转而使用JSR223 Sampler。示例代码:
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
HttpClient client = HttpClientBuilder.create().build();
HttpGet get = new HttpGet("https://storage.googleapis.com/videos12/dummy.txt");
HttpResponse response = client.execute(get);
SampleResult.setResponseCode(String.valueOf(response.getStatusLine().getStatusCode()));
SampleResult.setResponseMessage(response.getStatusLine().getReasonPhrase());
HttpEntity entity = response.getEntity();
SampleResult.setBodySize(Math.round(entity.getContentLength()));
EntityUtils.consume(entity);
非常重要的一点:
groovy
Cache compiled script if available
框EntityUtils.consume(entity);
行 - 它会完成所有魔法为了更好地理解“正确答案”,请参阅解释的Apache HTTP Components API的HttpClient Tutorial和脚本最佳实践的Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!文章。
答案 1 :(得分:0)
新的 Apache JMeter 3.1 解决了这个问题并很好地处理了大的响应。
http://jmeter.apache.org/changes.html#Improvements
错误53039 - HTTP请求:能够处理大小的响应 超过2147483647字节(即2GB)
JMeter现在能够处理大于的指标响应 2GB,限制已增加到9223372 TB。处理这么大 响应,它现在也可以截断部分响应以避免 过度记忆。请参阅httpsampler.max_bytes_to_store_per_request 属性。