zeromicro / go-zero

A cloud-native Go microservices framework with cli tool for productivity.
https://go-zero.dev
MIT License
29.31k stars 3.96k forks source link

rest engine TimeoutHandler did not working as expected #294

Closed abnerwei closed 3 years ago

abnerwei commented 3 years ago
kevwan commented 3 years ago

我怀疑 wrk 的问题哈,我用 hey 测试没问题,你也试试,我觉得如果 hey 这样测试没问题

$ hey -z 3s -c 20 http://127.0.0.1:8888/from/me -H 'Connection: close'

Summary:
  Total:    3.1803 secs
  Slowest:  0.4567 secs
  Fastest:  0.4508 secs
  Average:  0.4539 secs
  Requests/sec: 44.0215

  Total data:   1960 bytes
  Size/request: 14 bytes

Response time histogram:
  0.451 [1] |■
  0.451 [15]    |■■■■■■■■■■■■■■■■■■
  0.452 [8] |■■■■■■■■■
  0.453 [11]    |■■■■■■■■■■■■■
  0.453 [5] |■■■■■■
  0.454 [15]    |■■■■■■■■■■■■■■■■■■
  0.454 [19]    |■■■■■■■■■■■■■■■■■■■■■■
  0.455 [16]    |■■■■■■■■■■■■■■■■■■■
  0.456 [34]    |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.456 [6] |■■■■■■■
  0.457 [10]    |■■■■■■■■■■■■

Latency distribution:
  10% in 0.4512 secs
  25% in 0.4526 secs
  50% in 0.4542 secs
  75% in 0.4551 secs
  90% in 0.4557 secs
  95% in 0.4563 secs
  99% in 0.4567 secs

Details (average, fastest, slowest):
  DNS+dialup:   0.0001 secs, 0.4508 secs, 0.4567 secs
  DNS-lookup:   0.0000 secs, 0.0000 secs, 0.0000 secs
  req write:    0.0000 secs, 0.0000 secs, 0.0002 secs
  resp wait:    0.4535 secs, 0.4506 secs, 0.4566 secs
  resp read:    0.0001 secs, 0.0000 secs, 0.0005 secs

Status code distribution:
  [200] 140 responses
abnerwei commented 3 years ago

从测试结果看 wrk 基于 epoll(Linux)kqueue(MacOS)都复现了问题,其他工具 abheylocust都没有问题。初步判断是 wrk工具问题。

WireShark 抓包来看,是 wrk 客户端主动断开连接导致的 503错误,框架应该没有问题 😀

IMG10660

对了,研究过程中发现 core/logx/logs_test.go#245, wireConsole = false, 再次调用log.Close()会导致单元测试报错 ErrLogNotInitialized