-
Notifications
You must be signed in to change notification settings - Fork 2k
Open
Description
关于“packet queue max!!!”相关问题的解法
2025-03-26 22:25 备注:如果官方更新了相关bug的修正,那本issus自动删除。
快速解决方法
将以下的所有代码替换到protocol\httpflv\writer.go中。
GitHub不允许直接传输.go文件,所以换了一下。
错误日志(有点长)
nohup: ignoring input
time="2025-03-25T22:25:48+08:00" level=info msg="\n _ _ ____ \n | | (_)_ _____ / ___| ___ \n | | | \\ \\ / / _ \\ | _ / _ \\ \n | |___| |\\ V / __/ |_| | (_) |\n |_____|_| \\_/ \\___|\\____|\\___/ \n version: 0.0.20\n\t"
time="2025-03-25T22:25:48+08:00" level=info msg="HLS server enable...."
time="2025-03-25T22:25:48+08:00" level=info msg="RTMP Listen On :1935"
time="2025-03-25T22:25:48+08:00" level=info msg="HTTP-API listen On :8090"
time="2025-03-25T22:25:48+08:00" level=info msg="HTTP-FLV listen On :7001"
time="2025-03-25T22:25:48+08:00" level=info msg="HLS listen On :7002"
time="2025-03-25T23:30:40+08:00" level=warning msg="[<key: live/movie, URL: /live/movie.flv, UID: Lg1MYudHQhK3ugtm, Inter: true>] packet queue max!!!"
(省略34条packet queue max!!!)
time="2025-03-25T23:38:42+08:00" level=warning msg="[<key: live/movie, URL: /live/movie.flv, UID: Lg1MYudHQhK3ugtm, Inter: true>] packet queue max!!!"
time="2025-03-25T23:38:45+08:00" level=info msg="write timeout remove"
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x63aaa5]
goroutine 264 [running]:
bufio.(*Writer).Flush(0xc0001e0f80)
/usr/lib/golang/src/bufio/bufio.go:639 +0x45
bufio.(*Writer).Write(0xc0001e0f80, {0xc0008fdcdf?, 0x7bd6a0?, 0x1?})
/usr/lib/golang/src/bufio/bufio.go:683 +0xcd
net/http.(*response).write(0xc0001d61c0, 0x27d, {0xc0008fdcdf, 0x27d, 0x67321}, {0x0, 0x0})
/usr/lib/golang/src/net/http/server.go:1658 +0x2fe
net/http.(*response).Write(0xc0001540d0?, {0xc0008fdcdf?, 0x7ce46?, 0x3?})
/usr/lib/golang/src/net/http/server.go:1616 +0x2a
github.com/gwuhaolin/livego/protocol/httpflv.(*FLVWriter).SendPacket(0xc0001540c0)
/root/testzhibo/livego/protocol/httpflv/writer.go:151 +0x1c8
github.com/gwuhaolin/livego/protocol/httpflv.NewFLVWriter.func1()
/root/testzhibo/livego/protocol/httpflv/writer.go:55 +0x25
created by github.com/gwuhaolin/livego/protocol/httpflv.NewFLVWriter in goroutine 275
/root/testzhibo/livego/protocol/httpflv/writer.go:54 +0x3dc
错误原因分析
直播服务器在2025年3月25日23时38分发生严重崩溃。系统在处理视频流推送时,出现内存地址异常导致程序中止。事件起源于视频数据包队列积压超过警戒线,触发紧急丢包机制。
系统在处理"live/movie"频道的FLV直播流时,客户端通过/live/movie.flv拉流。当数据队列达到1024上限后,系统在保留关键帧和音频的同时持续丢弃普通视频帧达3秒,期间突发致命崩溃。
崩溃源于无效内存访问:底层网络组件在通过HTTP发送缓存数据时异常失效。日志显示此时bufio.Writer内部状态已损坏,执行数据刷新操作时因空指针错误导致系统崩溃。
该问题暴露三处缺陷:
--1.客户端断开后未及时终止数据推送
--2.队列关闭后仍有协程进行读写操作
--3.失效网络组件仍被调用且无内存监控
系统因核心模块访问无效内存崩溃,同时暴露高并发场景下连接管理及异常处理机制存在漏洞,最终导致直播中断。
解决方案:
--1.资源管理锁:新增互斥锁保护流处理结构体,关闭操作前强制加锁,新增IsClosed状态检测方法
--2.智能超时控制:数据清理环节设置强制超时机制,规避流量突增导致的阻塞
--3.双重关闭保障:发送数据时同步监听关闭信号通道,增加网络连接实时检测,实现异常即时熔断
--4.标准化关闭流程:三步安全退出:加锁→关闭通道→标记终止状态,避免重复关闭风险
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels