gin
gin copied to clipboard
Connection reset by peer
Description
Connection reset by peer always occurred after benchmark.
How to reproduce
Refer to the source for wrk benchmark
https://github.com/PacktPublishing/Building-Distributed-Applications-in-Gin/tree/main/chapter07/api-without-db
Change this line gin.Default()
to gin.New()
go mod init gintest
go mod tidy
GIN_MODE=release ./e
Expectations
Benchmark should return no stack error
wrk -c 100 http://localhost:8080/recipes
Large JSON response will retrieve from /recipes
endpoint.
Actual result
Error stack will throw right after the benchmark finished.
2022/10/04 22:55:10 http: panic serving [::1]:57818: write tcp [::1]:8080->[::1]:57818: write: connection reset by peer
goroutine 30 [running]:
net/http.(*conn).serve.func1()
/usr/local/go/src/net/http/server.go:1850 +0xb0
panic({0x104c6a5c0, 0x14000530050})
/usr/local/go/src/runtime/panic.go:890 +0x258
github.com/gin-gonic/gin/render.JSON.Render(...)
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/render/json.go:58
github.com/gin-gonic/gin.(*Context).Render(0x14000513d00, 0xc8, {0x104cbe180, 0x140005060b0})
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:910 +0xf4
github.com/gin-gonic/gin.(*Context).JSON(...)
...
Environment
- go version: 1.19.1
- gin version (or commit ref): 1.8.1
- operating system: macOS Ventura
- hardware: Macbook Pro (M1)
So this caused panic: https://github.com/gin-gonic/gin/blob/master/render/json.go#L58
Any updates
so how to solve this problem······🤔
The problem was in nginx
The problem was in nginx
Are you referring to your setup and same codebase?
It's the problem with the panic, happen without nginx when you change to router.Run(":3000")
or random ports.
Test command:
wrk http://localhost:3000/recipes
For full info on errors:
[GIN-debug] Listening and serving HTTP on :3000
2022/10/18 19:52:34 http: panic serving [::1]:63713: write tcp [::1]:3000->[::1]:63713: write: connection reset by peer
goroutine 7 [running]:
net/http.(*conn).serve.func1()
/usr/local/go/src/net/http/server.go:1850 +0xb0
panic({0x104e32700, 0x1400018e140})
/usr/local/go/src/runtime/panic.go:890 +0x258
github.com/gin-gonic/gin/render.JSON.Render(...)
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/render/json.go:58
github.com/gin-gonic/gin.(*Context).Render(0x1400069c500, 0xc8, {0x104e86420, 0x14000094100})
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:910 +0xf4
github.com/gin-gonic/gin.(*Context).JSON(...)
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:953
main.ListRecipesHandler(0x12c79b8b8?)
/Users/s/Downloads/Building-Distributed-Applications-in-Gin-main/chapter07/api-without-db/main.go:55 +0x74
github.com/gin-gonic/gin.(*Context).Next(...)
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:173
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0x140000829c0, 0x1400069c500)
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:616 +0x554
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0x140000829c0, {0x104e86bd0?, 0x140004420e0}, 0x14000252000)
/Users/s/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:572 +0x1d4
net/http.serverHandler.ServeHTTP({0x14000090750?}, {0x104e86bd0, 0x140004420e0}, 0x14000252000)
/usr/local/go/src/net/http/server.go:2947 +0x2c4
net/http.(*conn).serve(0x140004b23c0, {0x104e87380, 0x14000090510})
/usr/local/go/src/net/http/server.go:1991 +0x560
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:3102 +0x444
@ElegantSoft also having this issue, using NGINX as well. were you able to fix it?