EasyNVR日志中堆栈信息打印为字节代码排查及优化

Posted EasyNVR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EasyNVR日志中堆栈信息打印为字节代码排查及优化相关的知识,希望对你有一定的参考价值。

经常使用EasyNVR产品的用户都知道,作为音视频行业互联网直播产品,EasyNVR主要功能在于通过RTSP/ONVIF协议,接入前端音视频采集设备,通过EasyNVR软硬件产品将拉取过来的音视频流转化给适合全平台播放的RTMP、HTTP-FLV、HLS格式,极大的方便用户进行网页直播、微信直播及接入自身业务平台。

在测试期间,EasyNVR出现日志显示为数字的一段,无法看出是什么问题。

查看对应的代码为:

log.Printf("handle message failed, %v", p)
log.Println(debug.Stack())
其中 debug.Stack() 返回数据如下:
// Stack returns a formatted stack trace of the goroutine that calls it.
// It calls runtime.Stack with a large enough buffer to capture the entire trace.
func Stack() []byte {
   buf := make([]byte, 1024)
   for {
      n := runtime.Stack(buf, false)
      if n < len(buf) {
         return buf[:n]
      }
      buf = make([]byte, 2*len(buf))
   }
}

从代码中我们可以得知最终返回的数据是 []byte 类型,因此出现以上问题。

修改代码如下:

if p := recover(); p != nil {
   log.Printf("handle message failed, %v", p)
   log.Printf("debug stack : %v", string(debug.Stack()))
}

以上代码将返回的 []byte 转换为 string 类型,写入到日志中,即可解决该问题。

EasyNVR可以说已经成为国内视频互联网化基础建设的排头兵,几乎各个民生行业都已经有了EasyNVR视频能力输出的身影,EasyNVR多年服务于各行各业视频基础建设,EasyNVR的可靠性、完整性、稳定性已经受到了业界的广泛认可。同时为方便用户了解和使用EasyNVR,我们提供EasyNVR的试用版本,解压即用,欢迎测试。

以上是关于EasyNVR日志中堆栈信息打印为字节代码排查及优化的主要内容,如果未能解决你的问题,请参考以下文章

EasyNVR运行日志报错fatal error: concurrent map read and map write排查

Java服务问题快速排查指南

Java服务问题快速排查指南

jstat和jmap打印堆栈排查内存泄漏

jstat和jmap打印堆栈排查内存泄漏

Slf4j打印异常的堆栈信息