Jmeter性能优化方案

Jmeter性能优化方案_第1张图片

最近用jmeter测试并发出现了访问端口异常问题的排查及解决方案做一个归纳: 

背景:接口压测异常情况发生率达到了99%

Jmeter性能优化方案_第2张图片

        线上情况:Jmeter性能优化方案_第3张图片

错误情况展示:

        Jmeter性能优化方案_第4张图片

原因:

Jmeter里的http sample勾选了keep alive,导致会话一直保持,而windows本身的端口有限,导致端口被占用完后,无法分配新的端口,因此会产生java.net.BindException: Address already in use: connect 报错。

 Jmeter性能优化方案_第5张图片

 解决方案一:

        Jmeter性能优化方案_第6张图片

 解决方案二:

Jmeter性能优化方案_第7张图片

       解决方案: jmeter压测报:java.net.BindException: Address already in use: connect解决方法_菜菜de旺仔的博客-CSDN博客

 错误率直接降下来了:Jmeter性能优化方案_第8张图片

并发情况下,异常率还是存在,继续优化:

       网关出现了一些熔断造成了异常率: Jmeter性能优化方案_第9张图片


# hystrix 配置
hystrix:
  command:
    default: #default全局有效,service id指定应用有效
      execution:
        timeout:
          enabled: true
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 60000 #断路器超时时间,默认1000ms
    dataSqlConsoleHystrix: #sql工作台方法的超时时间 60s
      fallback:
        enabled: true
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 60000 #断路器超时时间,默认1000ms
    dataApiMappingHystrix: #api调用方法的超时时间 60s
      fallback:
        enabled: true
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 60000 #断路器超时时间,默认1000ms
  shareSecurityContext: true


# 请求处理的超时时间
# 建议hystrix的超时时间为:(1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout
ribbon:
  OkToRetryOnAllOperations: false #对所有操作请求都进行重试,默认false
  ReadTimeout: 10000 #负载均衡超时时间,默认值5000
  ConnectTimeout: 20000 #ribbon请求连接的超时时间,默认值2000
  MaxAutoRetries: 0 #对当前实例的重试次数,默认0
  MaxAutoRetriesNextServer: 3 #对切换实例的重试次数,默认1

解决方案:histrix熔断器timeoutInMilliseconds时间从10s调到了60s,ribbon最大重试次数调到3,异常错误为0

Jmeter性能优化方案_第10张图片

补充:在TCPTimedWaitDelay设置默认240s的时候存在问题,因为4分钟之内如果之前jmeter没跑完,那么端口还是被占用的状态,所以设置一个合理的值让其释放掉,30,60,可以再去测试一下

你可能感兴趣的:(jmeter,服务器,运维)