最近用jmeter测试并发出现了访问端口异常问题的排查及解决方案做一个归纳:
背景:接口压测异常情况发生率达到了99%
线上情况:
错误情况展示:
原因:
Jmeter里的http sample勾选了keep alive,导致会话一直保持,而windows本身的端口有限,导致端口被占用完后,无法分配新的端口,因此会产生java.net.BindException: Address already in use: connect 报错。
解决方案一:
解决方案二:
解决方案: jmeter压测报:java.net.BindException: Address already in use: connect解决方法_菜菜de旺仔的博客-CSDN博客
错误率直接降下来了:
并发情况下,异常率还是存在,继续优化:
网关出现了一些熔断造成了异常率:
# 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