lesismal / nbio

Pure Go 1000k+ connections solution, support tls/http1.x/websocket and basically compatible with net/http, with high-performance and low memory cost, non-blocking, event-driven, easy-to-use.
MIT License
2.11k stars 151 forks source link

1.5.6 仍可能存在潜在bug #419

Open suconghou opened 2 months ago

suconghou commented 2 months ago
github.com/lesismal/nbio.(*Conn).Execute.(*Conn).execute.func1.1.1()
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/conn.go:191 +0x6d
panic({0x790540?, 0xc0000b9dd0?})
    /usr/local/go/src/runtime/panic.go:770 +0x132
wsocket/wserve.onClose(0x47634a?, {0xb461c0?, 0x7ee5a0?})
    /go/src/app/wserve/server.go:153 +0xa5
github.com/lesismal/nbio/nbhttp/websocket.(*Conn).CloseAndClean(0xc0016bd380, {0x9043a0, 0xb406c0})
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/nbhttp/websocket/conn.go:687 +0x306
github.com/lesismal/nbio/nbhttp.NewEngine.func5.1()
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/nbhttp/engine.go:1077 +0x1ab
github.com/lesismal/nbio.(*Conn).Execute.(*Conn).execute.func1.1(0xb406c0?)
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/conn.go:198 +0x33
github.com/lesismal/nbio.(*Conn).Execute.(*Conn).execute.func1()
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/conn.go:199 +0x4d
github.com/lesismal/nbio/taskpool.New.func1(0xc000e0efd0?)
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/taskpool/taskpool.go:84 +0x33
github.com/lesismal/nbio/taskpool.(*TaskPool).fork.func1()
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/taskpool/taskpool.go:29 +0x64
created by github.com/lesismal/nbio/taskpool.(*TaskPool).fork in goroutine 65
    /go/pkg/mod/github.com/lesismal/nbio@v1.5.6/taskpool/taskpool.go:27 +0xc5

1.5.6 有 panic 同时,基于系统监控,统计出错误请求较之前增加许多(ws/http请求)。

suconghou commented 2 months ago

panic 的消息是 conn execute failed: interface conversion: interface {} is nil, not *myws.Conn

lesismal commented 2 months ago

感谢反馈!

这个panic看上去是你们应用层自己判断的,是websocket的session吧?做类型转换前需要判断下session是否为nil,非nil再进行转换,否则未经初始化的ws例如onopen里http参数校验失败没有设置session的被close了就可能这样了

另外,错误数量增多前后你们业务代码是否有这个错误相关的更新? 之前没有这个问题的nbio版本麻烦提供下,之前的版本是没发现这种错误还是错误比较少?

suconghou commented 2 months ago

之前线上比较稳定的版本是 v1.3.20 , 运行了半年之久,都没有panic的问题,也没有监控到很多报错。

关于panic

框架提供的session的写 SetSession,我代码只有一处用到,设置的值必然不为nil , 但是session的读,读取到nil了,这是问题,代码并没有修改,仅更新了依赖库。

关于错误率

一个明显和之前版本有错误的是,我们的程序提供ws和http连接,http接口返回的都是json,但是其他系统在请求http api时,有机率读取的不是json,造成一些json解析中的invalid character 'H' looking for beginning of value错误。

suconghou commented 2 months ago

之前的版本是没有发现错误的

lesismal commented 2 months ago

麻烦提供个初始化engine相关的简单例子,我看下设置的相关项,尝试下复现和定位

suconghou commented 2 months ago

大致代码如下


type routeInfo struct {
    Reg     *regexp.Regexp
    Handler func(http.ResponseWriter, *http.Request, []string) error
}

type WebsocketServer struct {
    routes []routeInfo
    *nbhttp.Server
}

func NewWsServer(addr string) *WebsocketServer {
    var mux = &http.ServeMux{}
    var s = &WebsocketServer{
        []routeInfo{},
        nbhttp.NewServer(nbhttp.Config{
            Name:                    "ws",
            Network:                 "tcp",
            Addrs:                   []string{addr},
            MaxLoad:                 10e4,
            ReadBufferSize:          4096,
            ReleaseWebsocketPayload: true,
            Handler:                 mux,
        }),
    }
    s.routes = []routeInfo{
        // 其他HTTP路由
        {regexp.MustCompile(`^/ws/([0-9a-zA-Z]{1,20})/(\d{1,15})$`), s.onWebsocket},
    }
    mux.HandleFunc("/", s.routeMatch)

    return s
}

func (ws *WebsocketServer) routeMatch(w http.ResponseWriter, r *http.Request) {
    for _, p := range ws.routes {
        if p.Reg.MatchString(r.URL.Path) {
            if err := p.Handler(w, r, p.Reg.FindStringSubmatch(r.URL.Path)); err != nil {
                util.Log.Print(err)
            }
            return
        }
    }
    http.NotFound(w, r)
}

func (ws *WebsocketServer) onWebsocket(w http.ResponseWriter, r *http.Request, match []string) error {
    uid, err := strconv.ParseUint(match[2], 10, 64)
    if err != nil {
        return err
    }
    u := websocket.NewUpgrader()
    u.KeepaliveTime = time.Minute * 5
    u.CheckOrigin = func(r *http.Request) bool { return true }
    u.SetPongHandler(func(c *websocket.Conn, s string) { c.SetReadDeadline(time.Unix(util.Now, 0).Add(u.KeepaliveTime)) })
    u.OnMessage(onMessage)
    u.OnClose(onClose)
    wsConn, err := u.Upgrade(w, r, nil)
    if err != nil {
        if err == websocket.ErrUpgradeTokenNotFound {
            return nil
        }
        return err
    }
    var c = &wss.Conn{
        // 相关数据
    }
    wsConn.SetSession(c)
    // 业务处理

}

func onMessage(c *websocket.Conn, messageType websocket.MessageType, data []byte) {
    connCtx := c.Session().(*wss.Conn)

    // 业务处理

}

func onClose(c *websocket.Conn, err error) {
    connCtx := c.Session().(*wss.Conn)
    connCtx.Close()
    // 业务处理
}
lesismal commented 2 months ago

好的感谢。根据你描述的现象猜测可能是buffer pool释放乱了导致脏内存,但是不太确定,我先试试复现

lesismal commented 2 months ago

刚提交了个,应该可以修复http body解析json的问题: https://github.com/lesismal/nbio/commit/b836026204c5aa46f1c91049f7d76ce7ce72e261

image

nil session的我继续看

lesismal commented 2 months ago

我刚才复现出来一种通用情况,例如:client发送ws upgrade后不管是否server端回复ws握手成功,client都直接conn close,然后当server upgrade过程中这里commenResponse的时候,就写失败了: https://github.com/lesismal/nbio/blob/master/nbhttp/websocket/upgrader.go#470

然后导致onClose了,因为前面我已經设置了nbio.Conn.SetSession(wsConn),所以回调的时候能拿到这个ParserCloser的wsConn,就回调了ws的OnClose: https://github.com/lesismal/nbio/blob/master/nbhttp/engine.go#L1077

这个issue里的例子,如果upgrade失败也没有日志,所以可能没有发现这个问题

我看下把这块把 nbio.Conn.SetSession(wsConn) 挪到 commonResponse 成功后、或者如果失败就清理掉这个session,然后upgrade失败的就不回调OnClose了

但不确定这是否是你们更新nbio版本后遇到的频繁现象的原因

suconghou commented 2 months ago

upgrade失败,只有err == websocket.ErrUpgradeTokenNotFound 的情况没有日志,否则是能看到日志的,是不是 走了 err == websocket.ErrUpgradeTokenNotFound , 没有调用SetSession,后续走onclose,就会读到nil panic; 但是之前并没有问题,那么新版 是业务必须判断是否nil了吗,还是nbio要优化,处理这种情况,无需用户判断。

suconghou commented 2 months ago

更具日志时间判断,确实有 同一秒钟先后出现, use of closed network connectionpanic 错误, 大致推断出就是upgrade失败,后续就会panic

lesismal commented 2 months ago

刚提交了下,Upgrade如果失败会清理掉nbio.Conn的wsConn session,我本地测了下修复了上面说的那个通用的session nil的情况: https://github.com/lesismal/nbio/commit/30599841daffd8c81061a0cfc09fc8eb5aa9c154

如果Upgrade过程中失败,就不会回调websocket的OnClose了

暂时不确定这个是不是你提的这个问题的原因,我这两天再继续review下有没有其他可能,如果暂时发现不了其他的就先发个版本

lesismal commented 2 months ago

还是nbio要优化,处理这种情况,无需用户判断。

对,nbio自己应该优化,失败了就不应该再回调

suconghou commented 2 months ago

非常感谢!发新版以后我会线上部署测试,再来反馈结果。

lesismal commented 2 months ago

只有err == websocket.ErrUpgradeTokenNotFound 的情况没有日志

上面例子里的是Upgrade err后不管是不是 websocket.ErrUpgradeTokenNotFound 都 return 了、没有日志,所以应该是只要Upgrade失败就会有这个问题。 如果你们生产上代码 只有err == websocket.ErrUpgradeTokenNotFound 的情况没有日志、下面那个return err有日志,那可能就是ws握手的header不正确导致的了

lesismal commented 2 months ago

非常感谢!发新版以后我会线上部署测试,再来反馈结果。

不用客气,我应该非常感谢帮我发现和反馈这种比较难复现的临界bug才对

suconghou commented 2 months ago

onWebsocket 函数只要有return err!=nil 就会有日志的,看了日志这个函数只有use of closed network connection 的错误

lesismal commented 2 months ago

onWebsocket 函数只要有return err!=nil 就会有日志的,看了日志这个函数只有use of closed network connection 的错误

"use of closed network connection" 那估计就是我上面说的问题了 我现在先发个版本

lesismal commented 2 months ago

发了 https://github.com/lesismal/nbio/releases/tag/v1.5.8

可以更新试试,我也继续看有没有其他可能的问题

suconghou commented 2 months ago

真迅速!一会我试试

lesismal commented 2 months ago

真迅速!一会我试试

先更一个服务节点看看效果再全更

suconghou commented 2 months ago

已更新运行一天了,session nil 的问题没有了,但是json解析中的invalid character 'H' looking for beginning of value的错误还有

suconghou commented 2 months ago

这个错误我猜测是在解析JSON时,第一个字符是H,很可能收到的数据是 HTTP/1.1 200 OK 之类的响应行,不知道怎么弄到body里了

suconghou commented 2 months ago

我需要说明一下以免混淆,是另一个节点(也是基于nbio)定时通过net/http调用本nbio(ws/http)的接口,根据接口json做数据统计时的报错,bug(如果是nbio的问题的话)可能是在nbio的响应逻辑里

lesismal commented 2 months ago

我继续看下json这个

lesismal commented 2 months ago

我需要说明一下以免混淆,是另一个节点(也是基于nbio)定时通过net/http调用本nbio(ws/http)的接口,根据接口json做数据统计时的报错,bug(如果是nbio的问题的话)可能是在nbio的响应逻辑里

另一个节点通过标准库http client请求nbio server对吗?这个nbio server是只内网访问、还是也对公网开放的? 是nbio接收请求的时候解析json失败, 还是标准库http client请求收到响应解析json失败?

suconghou commented 2 months ago

另一个节点通过标准库http client请求nbio server对吗?

是的

这个nbio server是只内网访问、还是也对公网开放的?

对公网开放,即提供ws,也提供http, ws请求占多数

是nbio接收请求的时候解析json失败, 还是标准库http client请求收到响应解析json失败?

是标准库http client请求收到响应解析json失败

lesismal commented 2 months ago

另一个节点通过标准库http client请求nbio server对吗?

是的

这个nbio server是只内网访问、还是也对公网开放的?

对公网开放,即提供ws,也提供http, ws请求占多数

是nbio接收请求的时候解析json失败, 还是标准库http client请求收到响应解析json失败?

是标准库http client请求收到响应解析json失败

http,Client请求得到的状态码是200不,可以在报错的时候打印出包体不,可以只打一部分包体比如前几十个字节,免得打印全部包体可能过大

suconghou commented 2 months ago

昨夜修改记录了日志,确实如我推想的那般,HTTP状态被解析到body里了,并且json数据的开头部分也不完整。状态码均为200,日志是由标准库 http.client请求,io.ReadAll读取,日志使用[[]]来包裹一个响应body

2024-05-16T03:15:41.604339228Z [[HTTP/1.1 200 OK
2024-05-16T03:15:41.604366598Z Content-Length: 4389
2024-05-16T03:15:41.604370782Z Date: Thu, 16 May 2024 03:15:41 GMT
2024-05-16T03:15:41.604374727Z Content-Type: application/json; charset=utf-8
2024-05-16T03:15:41.604379038Z 
2024-05-16T05:07:20.484448401Z weblive":1},"events":{"slive-activity:102951":1,"slive-activity:103168":1,"slive-activity:72318":1,"userId-11342164":1,"userId-13783536":1,"userId-15699313":1,"userId-16663074":1,"userId-18530732":1,"userId-19231667":3,"userId-24252961":1,"userId-2483962":1,"userId-26323834":1,"userId-31619516":1,"userId-32259761":1,"userId-33285536":1,"userId-33302546":2,"userId-35217984":1,"userId-35224582":1,"userId-35441448":1,"userId-4995677":1,"userId-5202492":1,"userId-5824750":1,"userId-666665":1,"userId-7202432":1,"userId-9319621":1,"v1-activity:1117292":1,"v1-activity:2275202":1,"v1-activity:2287491":1,"v1-activity:2342349":1,"v1-activity:2364906":1,"v1-activity:2393764":2,"v1-activity:2578077":1,"v1-activity:2679949":1,"v1-activity:2878734":1,"v1-activity:3061392":1,"v1-activity:3099677":1,"v1-activity:3195520":1,"v1-activity:3252267":1,"v1-activity:3271363":1,"v1-activity:3298029":1,"v1-activity:3317617":2,"v1-activity:3329309":1,"v1-activity:3342954":1,"v1-activity:3369116":1,"v1-activity:3411890":1,"v1-activity:3419975":1,"v1-activity:3429295":1,"v1-activity:3492149":12,"v1-activity:3503576":12,"v1-activity:3530510":1,"v1-activity:3558980":1,"v1-activity:3659953":1,"v1-activity:3681285":2,"v1-activity:3681312":1,"v1-activity:3686267":1,"v1-activity:3714497":1,"v1-activity:3720971":1,"v1-activity:3724088":1,"v1-activity:3733152":1,"v1-activity:3749":1,"v1-activity:3758934":1,"v1-activity:3758951":1,"v1-activity:3785877":99,"v1-activity:3787290":1,"v1-activity:3791238":1,"v1-activity:3792377":1,"v1-activity:3798881":1,"v1-activity:3804237":1,"v1-activity:3821090":3,"v1-activity:3823124":1,"v1-activity:3826387":1,"v1-activity:3826437":1,"v1-activity:3827042":9,"v1-activity:3828193":36,"v1-activity:3828829":1,"v1-activity:3829496":2,"v1-activity:3832822":2,"v1-activity:3839048":1,"v1-activity:3843445":3,"v1-activity:3845572":1,"v1-activity:3848172":1,"v1-activity:3850045":1,"v1-activity:3855936":1,"v1-activity:3856076":3,"v1-activity:3856909":1,"v1-activity:3856920":2,"v1-activity:3857043":1,"v1-activity:3857324":1,"v1-activity:3858432":2,"v1-activity:3860443":1,"v1-activity:3861213":2,"v1-activity:3861313":1,"v1-activity:3862453":1,"v1-activity:3862735":1,"v1-activity:3863533":1,"v1-activity:3863765":1,"v1-activity:3863968":1,"v1-activity:3864195":1,"v1-activity:3864325":1,"v1-activity:3865327":9,"v1-activity:3865707":1,"v1-activity:3865745":1,"v1-activity:3866317":1,"v1-activity:3866622":5,"v1-activity:3866901":1,"v1-activity:3867937":1,"v1-activity:3867947":3,"v1-activity:3868894":3,"v1-activity:3869964":3,"v1-activity:3869983":1,"v1-activity:3870348":2,"v1-activity:3870453":1,"v1-activity:3871178":1,"v1-activity:3871354":1,"v1-activity:3872113":1,"v1-activity:3872364":46,"v1-activity:3872690":1,"v1-activity:3872731":1,"v1-activity:3873211":5,"v1-activity:3873874":1,"v1-activity:3873902":1,"v1-activity:3874001":1,"v1-activity:3874396":1,"v1-activity:3876458":1,"v1-activity:3876478":2,"v1-activity:3876531":1,"v1-activity:3876897":1,"v1-activity:3877314":1,"v1-activity:3877842":1,"v1-activity:3877891":1,"v1-activity:3877961":2,"v1-activity:3878331":1,"v1-activity:3878456":1,"v1-activity:3878697":1,"v1-activity:3879047":1,"v1-activity:3879511":1,"v1-activity:3879615":1,"v1-activity:3879956":2,"v1-activity:3880248":1,"v1-activity:3880259":50,"v1-activity:3880366":2,"v1-activity:3880513":1,"v1-activity:3880781":1,"v1-activity:3881620":3,"v1-activity:3881681":2,"v1-activity:3881716":2,"v1-activity:3881849":1,"v1-activity:3882215":1,"v1-activity:3882250":1,"v1-activity:3882343":1,"v1-activity:3882475":1,"v1-activity:3882746":1,"v1-activity:3882884":1,"v1-activity:3883203":1,"v1-activity:3883317":1,"v1-activity:3883388":1,"v1-activity:3883443":1,"v1-activity:3883843":1,"v1-activity:3883957":7,"v1-activity:3884741":1,"v1-activity:3885399":5,"v1-activity:3885943":1,"v1-activity:3886278":1,"v1-activity:3886398":1,"v1-activity:3886416":5,"v1-activity:3886436":1,"v1-activity:3887161":1,"v1-activity:3887247":1,"v1-activity:3887346":2,"v1-activity:3887379":1,"v1-activity:3887430":1,"v1-activity:3887441":1,"v1-activity:3887552":2,"v1-activity:3887738":1,"v1-activity:4043":1,"v1-activity:5517":1,"v1-activity:620769":5,"v1-activity:6275":1,"v1-activity:6304":1,"v1-activity:709109":1,"v1-activity:744494":1}}]][[HTTP/1.1 200 OK
2024-05-16T05:07:20.484527540Z Content-Length: 3629
2024-05-16T05:07:20.484532570Z Date: Thu, 16 May 2024 05:07:20 GMT
2024-05-16T05:07:20.484535905Z Content-Type: application/json; charset=utf-8
2024-05-16T05:07:20.484539219Z 
2024-05-16T05:53:24.126491200Z vents":{"slive-activity:102951":1,"slive-activity:103168":1,"slive-activity:72318":1,"slive-activity:99792":1,"userId-13783536":1,"userId-18530732":1,"userId-19231667":3,"userId-24252961":2,"userId-32259761":1,"userId-33285536":1,"userId-35217984":1,"userId-5202492":1,"userId-5818822":1,"userId-5824750":1,"userId-7202432":1,"userId-9319621":1,"v1-activity:2275202":1,"v1-activity:2287491":1,"v1-activity:2364906":1,"v1-activity:2381725":1,"v1-activity:2393764":1,"v1-activity:2578077":1,"v1-activity:2679949":1,"v1-activity:2809813":1,"v1-activity:2826215":2,"v1-activity:2945284":1,"v1-activity:3023583":1,"v1-activity:3061392":1,"v1-activity:3099677":1,"v1-activity:3157930":1,"v1-activity:3217718":1,"v1-activity:3252267":1,"v1-activity:3298029":1,"v1-activity:3317617":3,"v1-activity:3369116":1,"v1-activity:3492149":4,"v1-activity:3503576":6,"v1-activity:3515874":1,"v1-activity:3528711":1,"v1-activity:3558980":1,"v1-activity:3681285":2,"v1-activity:3720971":1,"v1-activity:3749":1,"v1-activity:3785877":3,"v1-activity:3787290":1,"v1-activity:3792377":1,"v1-activity:3805257":1,"v1-activity:3821090":2,"v1-activity:3822567":1,"v1-activity:3823124":1,"v1-activity:3823727":1,"v1-activity:3826387":1,"v1-activity:3826437":1,"v1-activity:3827042":3,"v1-activity:3828193":7,"v1-activity:3828829":1,"v1-activity:3829496":3,"v1-activity:3832822":1,"v1-activity:3838638":1,"v1-activity:3838670":1,"v1-activity:3839048":1,"v1-activity:3844557":1,"v1-activity:3848172":1,"v1-activity:3848796":2,"v1-activity:3849828":1,"v1-activity:3850045":1,"v1-activity:3855936":1,"v1-activity:3856076":4,"v1-activity:3856920":14,"v1-activity:3857043":1,"v1-activity:3858420":1,"v1-activity:3858432":1,"v1-activity:3860443":1,"v1-activity:3861797":1,"v1-activity:3862031":1,"v1-activity:3862453":1,"v1-activity:3863765":1,"v1-activity:3863968":1,"v1-activity:3864195":1,"v1-activity:3864325":2,"v1-activity:3865327":6,"v1-activity:3865707":1,"v1-activity:3866622":1,"v1-activity:3866901":1,"v1-activity:3866992":1,"v1-activity:3867911":2,"v1-activity:3867947":4,"v1-activity:3868568":1,"v1-activity:3868859":1,"v1-activity:3868894":1,"v1-activity:3869964":1,"v1-activity:3869983":1,"v1-activity:3870348":1,"v1-activity:3870453":1,"v1-activity:3870543":1,"v1-activity:3871178":4,"v1-activity:3871743":2,"v1-activity:3872364":8,"v1-activity:3873211":3,"v1-activity:3874396":1,"v1-activity:3876478":1,"v1-activity:3876897":1,"v1-activity:3877314":1,"v1-activity:3877471":1,"v1-activity:3877961":2,"v1-activity:3879047":1,"v1-activity:3880259":7,"v1-activity:3880366":3,"v1-activity:3880466":6,"v1-activity:3880781":1,"v1-activity:3880813":1,"v1-activity:3881620":3,"v1-activity:3881681":2,"v1-activity:3881849":1,"v1-activity:3882250":1,"v1-activity:3882343":1,"v1-activity:3882475":1,"v1-activity:3882746":2,"v1-activity:3883202":1,"v1-activity:3883429":2,"v1-activity:3883443":1,"v1-activity:3883466":1,"v1-activity:3883671":6,"v1-activity:3883911":1,"v1-activity:3883957":1,"v1-activity:3883967":1,"v1-activity:3884027":1,"v1-activity:3884162":1,"v1-activity:3885031":1,"v1-activity:3885189":1,"v1-activity:3885399":7,"v1-activity:3886017":2,"v1-activity:3886398":1,"v1-activity:3886416":1,"v1-activity:3886436":1,"v1-activity:3887247":1,"v1-activity:3887430":1,"v1-activity:3887441":1,"v1-activity:3887552":2,"v1-activity:3887659":1,"v1-activity:3887738":1,"v1-activity:3887789":1,"v1-activity:3887879":1,"v1-activity:3887956":1,"v1-activity:4043":1,"v1-activity:5517":1,"v1-activity:620769":4,"v1-activity:744494":1}}]][[HTTP/1.1 200 OK
2024-05-16T05:53:24.126599225Z Content-Length: 3733
2024-05-16T05:53:24.126606788Z Date: Thu, 16 May 2024 05:53:24 GMT
2024-05-16T05:53:24.126638228Z Content-Type: application/json; charset=utf-8
2024-05-16T05:53:24.126641633Z 
2024-05-16T05:54:24.187044176Z ,"slivepc":1,"weblive":2},"events":{"event-activity:59687":1,"slive-activity:103168":1,"slive-activity:103229":1,"userId-11559815":1,"userId-15699313":2,"userId-18571700":1,"userId-19231667":1,"userId-20693312":1,"userId-20890820":1,"userId-22902473":1,"userId-23372277":1,"userId-24252961":1,"userId-2483962":1,"userId-24843661":1,"userId-26415630":1,"userId-3257":1,"userId-33285536":1,"userId-33302546":1,"userId-33745548":1,"userId-35442807":1,"userId-482920":1,"userId-4850757":1,"userId-4995677":1,"userId-5088355":1,"userId-5202492":1,"userId-5651741":1,"userId-7055680":1,"userId-7415523":1,"userId-7423148":1,"userId-8272202":1,"userId-9319621":1,"v1-activity:1454508":1,"v1-activity:1454527":1,"v1-activity:2020955":1,"v1-activity:2263287":1,"v1-activity:2485907":1,"v1-activity:2679949":17,"v1-activity:2704469":1,"v1-activity:2750308":1,"v1-activity:2798831":1,"v1-activity:2803860":1,"v1-activity:2979330":1,"v1-activity:3023583":1,"v1-activity:3156127":1,"v1-activity:3156263":1,"v1-activity:3226903":1,"v1-activity:3261504":1,"v1-activity:3275691":1,"v1-activity:3285308":1,"v1-activity:3329309":1,"v1-activity:3378452":1,"v1-activity:3457007":1,"v1-activity:3492149":1,"v1-activity:3503576":2,"v1-activity:3507766":1,"v1-activity:3540676":1,"v1-activity:3573854":1,"v1-activity:3580595":1,"v1-activity:3605683":1,"v1-activity:3646950":1,"v1-activity:3724392":1,"v1-activity:3727324":1,"v1-activity:3785877":3,"v1-activity:3821090":1,"v1-activity:3826420":1,"v1-activity:3827042":1,"v1-activity:3828120":1,"v1-activity:3828193":7,"v1-activity:3833794":2,"v1-activity:3834632":1,"v1-activity:3836279":1,"v1-activity:3841932":1,"v1-activity:3842614":1,"v1-activity:3842643":1,"v1-activity:3842692":1,"v1-activity:3843445":1,"v1-activity:3845375":1,"v1-activity:3845630":1,"v1-activity:3852340":1,"v1-activity:3856076":1,"v1-activity:3856920":3,"v1-activity:3857237":1,"v1-activity:3858420":1,"v1-activity:3861546":1,"v1-activity:3861780":3,"v1-activity:3862735":1,"v1-activity:3864195":1,"v1-activity:3864325":1,"v1-activity:3864493":1,"v1-activity:3864918":1,"v1-activity:3865327":2,"v1-activity:3866883":1,"v1-activity:3866992":1,"v1-activity:3867911":1,"v1-activity:3867947":4,"v1-activity:3868462":4,"v1-activity:3868568":1,"v1-activity:3868894":1,"v1-activity:3869359":1,"v1-activity:3869964":1,"v1-activity:3869983":1,"v1-activity:3870453":1,"v1-activity:3870938":1,"v1-activity:3870953":1,"v1-activity:3871178":1,"v1-activity:3872364":5,"v1-activity:3873011":1,"v1-activity:3873211":1,"v1-activity:3876679":1,"v1-activity:3876897":2,"v1-activity:3877314":1,"v1-activity:3877375":1,"v1-activity:3877555":1,"v1-activity:3877811":1,"v1-activity:3877861":1,"v1-activity:3878204":1,"v1-activity:3879081":1,"v1-activity:3879127":1,"v1-activity:3879634":1,"v1-activity:3879810":1,"v1-activity:3879857":1,"v1-activity:3879928":1,"v1-activity:3880259":6,"v1-activity:3880466":4,"v1-activity:3881106":1,"v1-activity:3881620":1,"v1-activity:3881681":1,"v1-activity:3881716":2,"v1-activity:3881849":1,"v1-activity:3882746":1,"v1-activity:3882984":2,"v1-activity:3883126":1,"v1-activity:3883203":1,"v1-activity:3883317":2,"v1-activity:3883388":1,"v1-activity:3883466":2,"v1-activity:3883671":2,"v1-activity:3885189":1,"v1-activity:3885253":2,"v1-activity:3885399":4,"v1-activity:3885506":1,"v1-activity:3885871":2,"v1-activity:3886681":1,"v1-activity:3887230":1,"v1-activity:3887246":1,"v1-activity:3887456":1,"v1-activity:3887552":1,"v1-activity:3887683":1,"v1-activity:3887897":1,"v1-activity:3888084":120,"v1-activity:3888121":6,"v1-activity:3888132":1,"v1-activity:620769":2,"v1-activity:6291":1}}]][[HTTP/1.1 200 OK
2024-05-16T05:54:24.187105229Z Content-Length: 3760
2024-05-16T05:54:24.187109557Z Date: Thu, 16 May 2024 05:54:24 GMT
2024-05-16T05:54:24.187112829Z Content-Type: application/json; charset=utf-8
2024-05-16T05:54:24.187115855Z 
2024-05-16T05:54:54.221531804Z ,"slivepc":1,"weblive":2},"events":{"event-activity:59687":1,"slive-activity:103168":1,"slive-activity:103229":1,"userId-11559815":1,"userId-15699313":2,"userId-18571700":1,"userId-19231667":1,"userId-20890820":1,"userId-22902473":1,"userId-23372277":1,"userId-24252961":1,"userId-2483962":1,"userId-24843661":1,"userId-26415630":1,"userId-3257":1,"userId-33285536":1,"userId-33302546":1,"userId-33745548":1,"userId-35442807":1,"userId-482920":1,"userId-4850757":1,"userId-4995677":1,"userId-5088355":1,"userId-5202492":1,"userId-5651741":1,"userId-7055680":1,"userId-7415523":1,"userId-7423148":1,"userId-8272202":1,"userId-9319621":1,"v1-activity:196579":1,"v1-activity:2020955":1,"v1-activity:2263287":1,"v1-activity:2485907":1,"v1-activity:2679949":17,"v1-activity:2704469":1,"v1-activity:2750308":1,"v1-activity:2798831":1,"v1-activity:2803860":1,"v1-activity:2979330":1,"v1-activity:3023583":1,"v1-activity:3156127":1,"v1-activity:3156263":1,"v1-activity:3226903":1,"v1-activity:3261504":1,"v1-activity:3275691":1,"v1-activity:3285308":1,"v1-activity:3317617":1,"v1-activity:3329309":1,"v1-activity:3378452":1,"v1-activity:3457007":1,"v1-activity:3492149":1,"v1-activity:3503576":2,"v1-activity:3507766":1,"v1-activity:3540676":1,"v1-activity:3573854":1,"v1-activity:3580595":1,"v1-activity:3605683":1,"v1-activity:3646950":1,"v1-activity:3724392":1,"v1-activity:3785877":3,"v1-activity:3821090":1,"v1-activity:3826420":1,"v1-activity:3827042":1,"v1-activity:3828120":1,"v1-activity:3828193":7,"v1-activity:3833794":2,"v1-activity:3834632":1,"v1-activity:3836279":1,"v1-activity:3841932":1,"v1-activity:3842614":1,"v1-activity:3842643":1,"v1-activity:3842692":1,"v1-activity:3843445":1,"v1-activity:3845375":1,"v1-activity:3845630":1,"v1-activity:3852340":1,"v1-activity:3856076":2,"v1-activity:3856920":3,"v1-activity:3857237":1,"v1-activity:3858420":1,"v1-activity:3861546":1,"v1-activity:3861780":3,"v1-activity:3862735":1,"v1-activity:3863533":1,"v1-activity:3864195":1,"v1-activity:3864325":2,"v1-activity:3864493":1,"v1-activity:3864918":1,"v1-activity:3865327":2,"v1-activity:3866883":1,"v1-activity:3866992":1,"v1-activity:3867911":3,"v1-activity:3867947":4,"v1-activity:3868462":4,"v1-activity:3868568":1,"v1-activity:3868894":1,"v1-activity:3869359":1,"v1-activity:3869964":1,"v1-activity:3869983":1,"v1-activity:3870453":1,"v1-activity:3870938":1,"v1-activity:3870953":1,"v1-activity:3871178":1,"v1-activity:3871743":1,"v1-activity:3872364":4,"v1-activity:3873011":1,"v1-activity:3873211":1,"v1-activity:3876679":1,"v1-activity:3876897":1,"v1-activity:3877314":1,"v1-activity:3877375":1,"v1-activity:3877555":1,"v1-activity:3877811":1,"v1-activity:3877861":1,"v1-activity:3877961":1,"v1-activity:3878204":1,"v1-activity:3879081":1,"v1-activity:3879127":1,"v1-activity:3879634":1,"v1-activity:3879810":1,"v1-activity:3879857":1,"v1-activity:3879928":1,"v1-activity:3880259":6,"v1-activity:3880466":4,"v1-activity:3881106":1,"v1-activity:3881620":1,"v1-activity:3881681":1,"v1-activity:3881716":2,"v1-activity:3881849":1,"v1-activity:3882746":1,"v1-activity:3882984":2,"v1-activity:3883126":1,"v1-activity:3883203":1,"v1-activity:3883317":2,"v1-activity:3883388":1,"v1-activity:3883466":2,"v1-activity:3883671":2,"v1-activity:3885189":1,"v1-activity:3885253":2,"v1-activity:3885399":4,"v1-activity:3885506":1,"v1-activity:3885871":1,"v1-activity:3886681":1,"v1-activity:3887230":1,"v1-activity:3887246":1,"v1-activity:3887456":1,"v1-activity:3887552":2,"v1-activity:3887683":1,"v1-activity:3887897":1,"v1-activity:3888084":118,"v1-activity:3888121":5,"v1-activity:3888132":1,"v1-activity:620769":2,"v1-activity:6291":1}}]][[HTTP/1.1 200 OK
2024-05-16T05:54:54.221626146Z Content-Length: 3737
2024-05-16T05:54:54.221631733Z Date: Thu, 16 May 2024 05:54:54 GMT
2024-05-16T05:54:54.221635069Z Content-Type: application/json; charset=utf-8
2024-05-16T05:54:54.221638180Z 
2024-05-16T06:00:24.670435800Z ,"slivepc":1,"weblive":2},"events":{"event-activity:59687":1,"slive-activity:103168":1,"slive-activity:103229":1,"userId-11559815":1,"userId-15699313":2,"userId-18571700":1,"userId-19231667":1,"userId-20890820":1,"userId-22902473":1,"userId-23372277":1,"userId-24252961":1,"userId-2483962":1,"userId-24843661":1,"userId-26415630":1,"userId-3257":1,"userId-33285536":1,"userId-33302546":1,"userId-33745548":1,"userId-35442807":1,"userId-482920":1,"userId-4850757":1,"userId-4995677":1,"userId-5088355":1,"userId-5202492":1,"userId-5651741":1,"userId-7055680":1,"userId-7415523":1,"userId-7423148":1,"userId-8272202":1,"userId-9319621":1,"v1-activity:2020955":1,"v1-activity:2263287":1,"v1-activity:2485907":1,"v1-activity:2679949":18,"v1-activity:2704469":1,"v1-activity:2750308":1,"v1-activity:2798831":1,"v1-activity:2803860":1,"v1-activity:2979330":1,"v1-activity:3023583":1,"v1-activity:3156127":1,"v1-activity:3156263":1,"v1-activity:3226903":1,"v1-activity:3261504":1,"v1-activity:3275691":1,"v1-activity:3285308":1,"v1-activity:3317617":1,"v1-activity:3329309":1,"v1-activity:3378452":1,"v1-activity:3457007":1,"v1-activity:3492149":1,"v1-activity:3503576":2,"v1-activity:3507766":1,"v1-activity:3540676":1,"v1-activity:3573854":1,"v1-activity:3580595":1,"v1-activity:3605683":1,"v1-activity:3646950":1,"v1-activity:3785877":3,"v1-activity:3821090":1,"v1-activity:3826420":1,"v1-activity:3827042":1,"v1-activity:3828120":1,"v1-activity:3828193":7,"v1-activity:3833794":2,"v1-activity:3834632":1,"v1-activity:3836279":1,"v1-activity:3841932":1,"v1-activity:3842614":1,"v1-activity:3842643":1,"v1-activity:3842692":1,"v1-activity:3843445":1,"v1-activity:3845375":1,"v1-activity:3845630":1,"v1-activity:3852340":1,"v1-activity:3856076":2,"v1-activity:3856920":3,"v1-activity:3857237":1,"v1-activity:3858420":1,"v1-activity:3861546":1,"v1-activity:3861780":3,"v1-activity:3861797":1,"v1-activity:3862735":1,"v1-activity:3863533":1,"v1-activity:3864195":1,"v1-activity:3864325":2,"v1-activity:3864493":1,"v1-activity:3864918":1,"v1-activity:3865327":2,"v1-activity:3866622":1,"v1-activity:3866883":1,"v1-activity:3866992":1,"v1-activity:3867911":3,"v1-activity:3867947":8,"v1-activity:3868462":4,"v1-activity:3868568":1,"v1-activity:3868894":1,"v1-activity:3869359":1,"v1-activity:3869964":1,"v1-activity:3869983":1,"v1-activity:3870453":1,"v1-activity:3870543":1,"v1-activity:3870953":1,"v1-activity:3871178":1,"v1-activity:3871743":1,"v1-activity:3872364":5,"v1-activity:3873011":1,"v1-activity:3873211":1,"v1-activity:3876679":1,"v1-activity:3876897":1,"v1-activity:3877314":1,"v1-activity:3877375":1,"v1-activity:3877555":1,"v1-activity:3877811":1,"v1-activity:3877861":1,"v1-activity:3877961":1,"v1-activity:3878204":1,"v1-activity:3879081":1,"v1-activity:3879127":1,"v1-activity:3879634":1,"v1-activity:3879810":1,"v1-activity:3879857":1,"v1-activity:3879928":1,"v1-activity:3880259":5,"v1-activity:3880466":4,"v1-activity:3881106":1,"v1-activity:3881620":1,"v1-activity:3881681":1,"v1-activity:3881716":2,"v1-activity:3881849":1,"v1-activity:3882746":1,"v1-activity:3882984":2,"v1-activity:3883126":1,"v1-activity:3883203":1,"v1-activity:3883317":1,"v1-activity:3883388":1,"v1-activity:3883466":2,"v1-activity:3883671":2,"v1-activity:3885189":1,"v1-activity:3885253":1,"v1-activity:3885399":4,"v1-activity:3885506":1,"v1-activity:3886681":1,"v1-activity:3887230":1,"v1-activity:3887246":1,"v1-activity:3887456":1,"v1-activity:3887552":1,"v1-activity:3887683":1,"v1-activity:3887897":1,"v1-activity:3888084":120,"v1-activity:3888121":6,"v1-activity:3888132":1,"v1-activity:620769":2,"v1-activity:6291":1}}]][[HTTP/1.1 200 OK
2024-05-16T06:00:24.670499273Z Content-Length: 4016
2024-05-16T06:00:24.670505893Z Date: Thu, 16 May 2024 06:00:24 GMT
2024-05-16T06:00:24.670510704Z Content-Type: application/json; charset=utf-8
2024-05-16T06:00:24.670514366Z 
lesismal commented 1 month ago
func onMessage(c *websocket.Conn, messageType websocket.MessageType, data []byte) {
    connCtx := c.Session().(*wss.Conn)

    // 业务处理
}

onMessage里处理完data不会继续在持有吧?例如传给其他地方留着用或者异步处理

suconghou commented 1 month ago

这个data唯一使用的就是gjson.ParseBytes(data),后续都是获取json里的字段了,这些字段会存储到队列,整个过程应该是不涉及data的后续引用。

nneesshh commented 1 month ago

请教各位大佬,这个 bug 到底意味着什么?是说 nbio 不能在生产环境使用吗?

lesismal commented 1 month ago

@suconghou 可以升级到 v1.5.9试试, flush那块简化了挨个buffer write, 不用Writev了. 上次大版本改动巨大, 主要涉及4层flush, http body和ws的加锁/解析等相关的, 先排除法把flush这个简化掉, 如果还有问题, 我继续再挨个简化排除试试

lesismal commented 1 month ago

请教各位大佬,这个 bug 到底意味着什么?是说 nbio 不能在生产环境使用吗?

1.3.21 没发现有这个问题, 1.5.6有bug, 1.5.9 我暂时还没有复现出来

suconghou commented 1 month ago

@lesismal 1.5.9 问题仍然存在