2017-10-25 13 views
2

PART1

나는 서비스를 위해 HystrixCommand를 사용하는 동안 jmeter를 사용하여 높은 동시성 테스트를 수행합니다. 테스트 결과가 너무 나쁘다. 코드 ->높은 동시성 하에서 springcloud hystrix의 심각한 문제가 있습니까?

@HystrixCommand(fallbackMethod = "helloFallback") 
@RequestMapping(value="/hello", method=RequestMethod.GET) 
@ResponseBody 
public ResponseResult hello() throws Exception{ 
    ResponseResult responseResult = new ResponseResult(); 
    responseResult.setCode(200); 
    responseResult.setData("bank test ok"); 
    return responseResult; 
} 
public ResponseResult helloFallback(){ 
    ResponseResult responseResult = new ResponseResult(); 
    responseResult.setCode(400); 
    responseResult.setData("timeout error"); 
    return responseResult; 
} 

테스트 reuslt : jmeter_test1

PART2

내가 HystrixCommand 주석 경우, 시험 결과는 perfect.code->

// @HystrixCommand(fallbackMethod = "helloFallback") 
@RequestMapping(value="/hello", method=RequestMethod.GET) 
@ResponseBody 
public ResponseResult hello() throws Exception{ 
    ResponseResult responseResult = new ResponseResult(); 
    responseResult.setCode(200); 
    responseResult.setData("bank test ok"); 
    return responseResult; 
} 
public ResponseResult helloFallback(){ 
    ResponseResult responseResult = new ResponseResult(); 
    responseResult.setCode(400); 
    responseResult.setData("timeout error"); 
    return responseResult; 
} 

시험은 결과 ->jmeter_test2

팁 : 스레드 그림 jmeter_test3

서비스를 직접 전달하고 호출하는 데 zuul을 사용하면 테스트 결과가 동일합니다. 높은 동시성 또는 내 코드에 문제가있는 동안 springcloud hystrix 문제입니다. 모든 답장을 환영합니다!

답변

0

먼저 아래 속성을 조정 해보십시오.

hystrix.threadpool.default.coreSize 

기본 스레드 풀 크기는 단지 10이며 성능 테스트에는 매우 작습니다.

hystrix로 테스트 한 첫 번째 테스트에서 오류율은 31 %입니다. 기본 스레드 풀이 10이기 때문에 아마 많은 스레드 풀 거부가 발생할 수 있습니다.

아시다시피 Hystrix는 회로 차단기로 큰 격리를 제공하며이를 처리하는 데 약간의 비용이 필요합니다. 따라서 성능 저하를 피할 수는 없습니다. 그러나 시험 결과가 정상적으로 보이지 않습니다.

hystrix 구성에 대한 자세한 내용은 here

입니다.