You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JMeter中监控分片上传的各部分耗时

监控JMeter文件上传分片耗时的方法

方法1:用内置变量+后置处理器计算分片耗时

  • 在每个分片上传的HTTP请求前置添加JSR223 PreProcessor,写入代码记录当前时间戳:
    def shardId = __counter(TRUE, "")
    vars.put("startTime_${shardId}", String.valueOf(System.currentTimeMillis()))
    
    用__counter生成唯一分片ID,避免变量冲突。
  • 在对应HTTP请求的后置添加JSR223 PostProcessor,计算并记录耗时:
    def shardId = vars.get("counter")
    def startTime = Long.parseLong(vars.get("startTime_" + shardId))
    def elapsed = System.currentTimeMillis() - startTime
    vars.put("shardElapsed_${shardId}", String.valueOf(elapsed))
    log.info("第${shardId}个分片耗时:${elapsed}ms")
    
  • 后续可通过View Results Tree查看单分片耗时,也能在jmeter.properties中配置sample_variables=shardElapsed_1,shardElapsed_2,...,将耗时数据导出到结果文件。

方法2:启用HTTP请求调试日志提取分片细节

  • 如果分片是在单个HTTP请求内部处理的(比如模拟分块上传的内置逻辑),修改jmeter.properties开启HTTP调试日志:
    log_level.jmeter.protocol.http=DEBUG
    
    运行测试后,在jmeter.log中会输出每个分片的发送时间、字节数等信息,从中提取分片的起止时间差得到耗时。
  • 若每个分片对应独立HTTP请求,直接查看Summary Report或View Results Tree中每个请求的Response Time字段,该值就是对应分片的上传耗时。

方法3:自定义JSR223取样器实现精准计时

  • 使用JSR223 Sampler完全自主实现分片上传逻辑,手动控制每个分片的发送和计时:
    def targetFile = new File("/path/to/upload/file")
    def chunkSize = 1024 * 1024 // 设置1MB分片大小
    def totalChunks = (targetFile.size() + chunkSize - 1).intdiv(chunkSize)
    
    for (int i = 0; i < totalChunks; i++) {
        def startByte = i * chunkSize
        def endByte = Math.min(startByte + chunkSize, targetFile.size())
        def chunkData = targetFile.bytes[startByte..<endByte]
    
        // 记录分片发送开始时间
        def start = System.currentTimeMillis()
        // 发送分片请求
        def httpClient = org.apache.http.impl.client.HttpClients.createDefault()
        def postRequest = new org.apache.http.client.methods.HttpPost("http://your-upload-api")
        postRequest.setEntity(new org.apache.http.entity.ByteArrayEntity(chunkData))
        def response = httpClient.execute(postRequest)
        // 计算耗时
        def cost = System.currentTimeMillis() - start
    
        log.info("第${i+1}个分片(字节范围${startByte}-${endByte})耗时:${cost}ms")
        vars.put("shard_${i+1}_cost", String.valueOf(cost))
    }
    
    这种方式能精准掌控每个分片的计时节点,还可根据需求调整上传逻辑。

内容的提问来源于stack exchange,提问作者Mani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:03:25