【问题标题】:JMeter SocketTimeout and OutofMemoryErrorsJMeter SocketTimeout 和 OutofMemoryErrors
【发布时间】:2020-09-30 11:05:16
【问题描述】:

我在 JSR223 Sampler 中有以下代码,运行此 jmeter 命令时出现以下错误。谁能告诉我我的代码是否有问题?我基本上是在读取图像并对其进行一些更改并发送 multipart/form-data POST 请求。

jmeter -n -Jthreads=20 -Jrampup=30 -Jduration=60 -Jiterations=-1 -t script.jmx

javax.script.ScriptException: java.net.SocketTimeoutException: 读取超时 未捕获的异常 java.lang.OutOfMemoryError: Java heap space in thread Thread[Thread Group 1-10,5,main]

import org.apache.http.HttpHeaders
import org.apache.http.client.config.RequestConfig
import org.apache.http.client.methods.HttpUriRequest
import org.apache.http.client.methods.RequestBuilder
import org.apache.http.conn.ssl.NoopHostnameVerifier
import org.apache.http.conn.ssl.SSLConnectionSocketFactory
import org.apache.http.conn.ssl.TrustStrategy
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClients
import org.apache.http.ssl.SSLContextBuilder
import org.apache.http.util.EntityUtils
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.HttpMultipartMode;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.awt.Graphics;
import java.io.ByteArrayOutputStream;
import org.apache.http.entity.ContentType;

import java.security.cert.CertificateException
import java.security.cert.X509Certificate

List<String> sendRequest(String url, String method, String body) {


RequestConfig requestConfig = RequestConfig.custom()
        .setConnectTimeout(2000)
        .setSocketTimeout(3000)
        .build();

BufferedImage image = ImageIO.read(new File("C:/Users/bd3249/Pictures/5.JPG"));
Graphics graphics = image.getGraphics();
graphics.setFont(graphics.getFont().deriveFont(16f));
graphics.drawString("User " + ctx.getThreadNum() + '-' + Math.random()  +"; iteration: " + ctx.getVariables().getIteration(), 50, 50);
graphics.dispose();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", bytes);

final MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
multipartEntity.setMode(HttpMultipartMode.STRICT);
multipartEntity.addBinaryBody("File", bytes.toByteArray(),ContentType.IMAGE_JPEG, "5.JPG");


HttpUriRequest request = RequestBuilder.create(method)
        .setConfig(requestConfig)
        .setUri(url)
        .setHeader("x-ibm-client-id","248a20f3-c39b-45d0-b26a-9019c26e9be8")
        .setHeader("X-Client-Id","2861D410-773B-4DD9-AE74-882116B08856")
        .setEntity(multipartEntity.build())
        .build();

String req = "REQUEST:" + "User " + ctx.getThreadNum() + "; iteration: " + ctx.getVariables().getIteration() + " " + request.getRequestLine() + "\n";

def builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustStrategy() {
    @Override
    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        return true;
    }
});
def trustAllFactory = new SSLConnectionSocketFactory(builder.build(), new NoopHostnameVerifier());

HttpClients.custom().setSSLSocketFactory(trustAllFactory).build().withCloseable { httpClient ->

    httpClient.execute(request).withCloseable { response ->

        String res = "RESPONSE:" + "User " + ctx.getThreadNum() + "; iteration: " + ctx.getVariables().getIteration() + " " + response.getStatusLine()  + (response.getEntity() != null ? EntityUtils.toString(response.getEntity()) : "") + "\n";

        log.info(req + "\n" + res);

        return Arrays.asList(req, res);
    }
  }
}

List test1 = sendRequest("https://test.com/upload", "POST", "");

【问题讨论】:

    标签: jmeter out-of-memory socket-timeout-exception


    【解决方案1】:

    您收到的错误清楚地表明您没有足够的Java Heap space,默认情况下JMeter 5.3 带有 1 GB 的堆,并且根据您的图像大小和响应大小,它可能不足以进行测试.

    使用 Active Threads Over Time 监听器查看错误发生时有多少虚拟用户在线,并按比例增加堆大小。

    更多信息:9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      相关资源
      最近更新 更多