go net/http: BenchmarkClientServerParallelTLS64有时会报告错误

xcitsw88  于 5个月前  发布在  Go
关注(0)|答案(8)|浏览(65)

请在提交问题之前回答以下问题。谢谢!

您正在使用的 Go 版本是什么(go version)?

go version devel +cc155eb

这个问题是否在使用最新版本的发布中重现?

是的。

您正在使用的操作系统和处理器架构是什么(go env)?

GOARCH="arm64"
GOBIN=""
GOCACHE="/home/*/.cache/go-build"
GOEXE=""
GOHOSTARCH="arm64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/username/go"
GORACE=""
GOROOT="/home/username/go-temp"
GOTMPDIR=""
GOTOOLDIR="/home/username/go-temp/pkg/tool/linux_arm64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build212786936=/tmp/go-build -gno-record-gcc-switches"

您做了什么?

我在我们日常任务的日志中找到了这个错误(cd /src ; go test -count 3 -timeout 180m -run=^$ -bench=. ... )。
单独运行命令 "go test -bench BenchmarkClientServerParallelTLS64" 也可以重现此错误,但错误有时会出现,有时不会出现,您可能需要多次运行它。

您期望看到什么?

通过。

您看到了什么?

我看到了两种错误消息。当执行命令 "go test -bench BenchmarkClientServerParallelTLS64" 时,会出现以下错误信息:
goos: linux
goarch: arm64
pkg: net/http
BenchmarkClientServerParallel4-32 30000 37850 ns/op 12324 B/op 88 allocs/op
BenchmarkClientServerParallel64-32 10000 307570 ns/op 13278 B/op 96 allocs/op
BenchmarkClientServerParallelTLS4-32 20000 112708 ns/op 41859 B/op 433 allocs/op
BenchmarkClientServerParallelTLS64-32 2018/03/25 13:47:49 http: TLS handshake error from 127.0.0.1:58119: read tcp 127.0.0.1:34212->127.0.0.1:58119: use of closed network connection
20000 106537 ns/op 43259 B/op 454 allocs/op
通过。 ok net/http 47.081s
当运行所有基准测试( cd /src ; go test -count 3 -timeout 180m -run=^$ -bench=. ... )时,除了上述错误之外,还可能会发生另一个错误。即:
15:10:47 BenchmarkClientServerParallelTLS64-64 Build timed out (after 10 minutes). Marking the build as aborted.
15:20:47 Build was aborted
我不明白问题出在哪里。它是如何产生的?有人能向我解释一下吗,谢谢!

h79rfbju

h79rfbju1#

你好,有人知道这个问题吗?

mo49yndu

mo49yndu2#

我可以确认我的盒子里的这个bug
Linux hikey13 4.15-hikey #1 SMP PREEMPT Sat Mar 10 22:41:04 UTC 2018 aarch64 GNU/Linux

goos: linux                                                                         
goarch: arm64                                                                       
pkg: net/http                                                                       
BenchmarkClientServerParallelTLS64-8    2018/03/29 14:04:27 http: TLS handshake erro
r from 127.0.0.1:49120: read tcp 127.0.0.1:33467->127.0.0.1:49120: use of closed net
work connection                                                                     
2018/03/29 14:04:27 http: TLS handshake error from 127.0.0.1:49090: read tcp 127.0.0
.1:33467->127.0.0.1:49090: use of closed network connection                         
2018/03/29 14:04:27 http: TLS handshake error from 127.0.0.1:49180: read tcp 127.0.0
.1:33467->127.0.0.1:49180: use of closed network connection                         
2018/03/29 14:04:27 http: TLS handshake error from 127.0.0.1:49042: read tcp 127.0.0
.1:33467->127.0.0.1:49042: use of closed network connection                         
    2000            798913 ns/op           60430 B/op        604 allocs/op          
PASS                                                                                
ok      net/http        3.318s
vulvrdjw

vulvrdjw3#

是的,这个问题在x86架构上也存在。

dddzy1tm

dddzy1tm4#

我发现它与#9661有关。在基准测试后,许多TCP连接处于TIME_WAIT状态。如果TCP连接在没有SO_REUSEPORT或SO_REUSEADDR的情况下启动,将会导致此问题。

ni65a41a

ni65a41a5#

@mengzhuo我不确定,错误信息来自tlsConn.Handshake(),我不知道为什么在服务器关闭后在这个阶段还有连接。

kdfy810k

kdfy810k6#

你好,你知道这个问题的原因吗?我已经调查了一段时间,但仍然不明白。你能给我一些建议吗?谢谢!

7gcisfzg

7gcisfzg7#

这是一段Go语言的错误日志,主要涉及到网络通信和并发测试。从日志中可以看出,测试过程中出现了超时和连接错误的信息。具体来说,有以下几个问题:

  1. BenchmarkClientServerParallelTLS4-96 测试中,客户端和服务器之间的TLS握手出现错误,可能是由于网络连接不稳定导致的。
  2. 在 BenchmarkClientServerParallelTLS4-96 测试中,客户端和服务器之间的并发连接数达到了5000,这可能导致了系统资源的耗尽,从而引发性能下降。
  3. 在 BenchmarkClientServerParallelTLS64-96 测试中,客户端和服务器之间的并发连接数达到了5000,这同样可能导致了系统资源的耗尽,从而引发性能下降。
  4. 在 BenchmarkClientServerParallelTLS64-96 测试中,客户端和服务器之间的并发连接数在一段时间内没有明显变化,这可能是因为系统资源已经耗尽,导致新的连接无法建立。
  5. 在 main_test.go 文件的第140行,测试似乎泄漏了一个超时的拨号连接。这可能是由于代码实现中的某些问题导致的。
pgx2nnw8

pgx2nnw88#

看起来这仍然是一个问题。除了这个特定基准的错误之外,它还是一个轻微的烦恼,因为它会破坏标准库基准输出,因此它不会用标准工具正确解析( golang.org/x/perf/storage/benchfmt ) 。出于某种原因,错误日志也会输出到stdout而不是stderr。很容易解决,但如果我们能清理一下就更好了。

$x_1a^0b^1^x$

相关问题