protobuf 异常死锁分析

protobuf 异常死锁分析

最近在开发中,有个模块在测试时偶尔会出现卡死现象,进程状态处于futex状态。网络搜索发现这种状态下,进程大概率发生了死锁。最近的代码修改不涉及到锁的使用,可能是其它方面引入的问题。

在日常开发中,死锁并不陌生。只要能有堆栈就很容易解决。使用stace 命令发现进程处于FUTEX_WAIT_PRIVATE 状态,明确发生了死锁。

stace -p + 进程ID

接下来要需要gdb分析进程的堆栈,明确出现死锁的原因。可以使用gdb attach + 命令。

中间有个插曲,一开始用gdb分析时,提[……]

继续阅读

客户端抓包与日志分析方法

客户端抓包与日志分析方法

作为工程师,检测应用是否有收发包常见的方法就是抓包。linux平台下可以通过tcpdump命令进行抓包,windows 和Mac 平台也有Wireshark工具,对于终端如何进行抓包与日志分析。

终端抓包方法

苹果的生态很封闭,但开发工具很完美。将手机与Mac相连后,通过xcode就可以查看手机设备信息,获取到设备的udid 信息。

在通过命令 rvictl 创建一张虚拟网卡,此后手机的数据就会通过这个虚拟网卡进行收发。

rvictl -s 设备udid

在 Mac电脑上,打开wireshark 软件就可以看到这张虚拟的网卡,选中这张虚拟的网卡,开始抓手机[……]

继续阅读

奇异果熟了

奇异果熟了

老家在陕西,秦岭大山深处。经过1年风雨的洗礼,今年的猕猴桃格外肉肥汁多,清香鲜美,酸甜可口。

一颗猕猴桃能提供一个人一日维生素C需求量的两倍多,被誉为“水果之王”。如果觉得橙子难剥皮、樱桃又要洗、香蕉容易坏,那就吃猕猴桃吧。

猕猴桃含有丰富的维生素A、C、E及钾、镁、纤维素等,还含有其他水果比较少见的营养成分:叶酸、胡萝卜素、钙、黄体素、氨基酸、天然肌醇等。它还能稳定情绪、降胆固醇、帮助消化、预防便秘,还有止渴利尿和保护心脏的作用。

猕猴桃还有一个最大的功效,修复口腔溃疡。每到夏天,经常复发口腔溃疡,疼到不能吃饭。我试过、下火茶、西瓜霜、唯有猕猴桃的修复能力最强,[……]

继续阅读

自适应ARQ算法实践

自适应ARQ算法实践

在实时音视频领域,数据传输强调实时性,通常选择UDP协议可靠性就会降低。数据包发生丢包,就会引起解码失败,导致接收端发生卡顿影响用户体验。

抗丢包技术综述

实时音视频类应用需要保证数据传输的可靠性,需要应用自身实现抗丢包、抗抖动、抗拥塞算法。本文重点介绍抗丢包技术,下图为业界主要的抗丢包技术。

从图中可以看出,网络层弱网优化主要的技术包括前向纠错FEC、ARQ。FEC 恢复延时低,但会带来带宽消耗的增长。ARQ 恢复延时较大,带宽消耗下。在低延时场景下,可以充分利用ARQ 进行丢包恢复。

ARQ算法介绍

ARQ 是通过重传关键数据包来纠错的信道保护算法,包括三[……]

继续阅读

音频质量评估POLQA算法介绍

音频质量评估POLQA算法介绍

随着VoIP技术的不断发展,VoIP的语音质量越来越得到大家的关注。如何评价音频质量,也逐渐成为大家讨论的热点问题。关于如何进行测试请关注音频质量PESQ得分评估原理与步骤这篇文章,本篇文章重点介绍POLQA算法。

POLQA算法是新一代语音质量评估标准,适用于固网、移动通信网络和IP 网 络 中 的 语 音 质 量 评 估 。 POLQA 被ITU-T(International Telecommunication Union)确定为推荐规范P.863,可用于高清语音、 3G、4G/VoLTE、5G 网络语音质量评估。它用以替代和升级2001 年发布的 PESQ(ITU-TRecom[……]

继续阅读

前向纠错FEC算法实现原理

前向纠错FEC算法实现原理

前向纠错算法介绍

前向纠错(FEC)算法被广泛使用在实时音视频领域提升音视频的弱网抗性,只要收到FEC分组内的冗余包和一定数量的数据包,就能根据FEC算法恢复出对应的冗余包。常见的FEC实现包括M+1系列的异或算法、M+N系列的RS矩阵算法,这2种实现算法各有优缺点。

异或算法实现相对简单,将M个数据包逐字节进行异或计算,计算得到的结果即为冗余包。这种算法只需要进行异常运算,复杂度低。但是抗丢包能力弱,例如 4+1算法,5个包里面最多只能丢1个包,否则就无法恢复。

在实时音视频领域主要采用M+N系列的CRS矩阵算法。

CRS矩阵运算原理

CRS矩阵算法,RS编码只[……]

继续阅读

C++智能指针使用的那些事

C++智能指针使用的那些事

指针指针的由来

在C/C++里面,内存管理由开发者自己管理。指针变量总是指向一片内存空间,这片内存空间可以是局部变量、也可以是通过malloc、new申请的。如果申请的内存没有释放,就会导致内存泄漏。最终因为内存耗尽,服务被操作系统OM掉

为了解决内存泄漏的问题,Java提出了虚拟机来管理内存,降低程序开发难度。C++则提出了智能指针,auto_ptr、shared_ptr、weak_ptr, unique_ptr,通过智能指针管理分配的内存单元,利用C++类对象的生命周期管理智能指针的生命周期结束后,会调用析构函数释放分配的内存。下面介绍这几个智能指针的使用方法。

a[……]

继续阅读

一次内存异常引发半夜加班带来的思考

一次内存异常引发半夜加班带来的思考

最近有个relay模块在线上进行紧急发布,一共600台机器半天之内发布完成。晚上6点开始手机就开始持续震动,realy模块信令都出现异常,用户进房间失败率突增。监控曲线上跑出了一个凹字形。赶紧回退realy模块恢复业务,同时开始紧急定位问题原因。

后台服务采用特定框架进行开发,在回退的过程中发现有部分进程出现coredump导致进程没有被拉起来属于回退失败。分析coredump文件发现,是core在一个共享内存初始化的地方,这次变更并没有修改这个地方的代码。因此,这里不是根本原因,只是表面现象。

现在主要是尽快恢复业务,把进程拉起来。既然是共享内存初始化失败,如果把共享内存[……]

继续阅读

为什么互联网行业总要加班 ?

为什么互联网行业总要加班 ?

最近在做一个领导比较重视的项目,由我和另外一个同事一起完成。期间发生了一些事情,让我想要聊聊互联网加班的一些事情。

工作三年,我发现身边90%以上的同事每天都要加班到很晚才回去,我也不例外。其实仔细思考来,加班主要是因为三点。

  • 需求太多、代码不熟,开发者评估时间不合理。
  • 缺乏对需求的深入理解,没有把需求想清楚就开工,导致大量无用功。
  • 再有就是因为团队协作出现问题,导致项目延期。

需求多,开发时间评估不合理,在互联网公司开发排期一般都是根据上线计划倒推编码、联调、测试时间。为了避免紧急情况,通常也需要预留buff时间以防延期,通常1周视项目大小而定。那么开发者就需要按照上述流程,评[……]

继续阅读

实时音视频网络质量统计方法

实时音视频网络质量统计方法

网络质量指标重要性

在实时音视频领域,VoIP通话对于网络质量要求很高,系统必须能实时感知到网络质量变化,供上层应用及时调整码率,降低网络质量进一步恶化的风险。衡量用户的网络质量可以通过丢包、延时、抖动、带宽、吞吐量这些指标。本文重点介绍丢包、延时、和抖动的统计方法。

丢包率的含义与计算方式

音视频数据从发送端A经过网络到达接收端B,数据包在网络中可能由于链路波动、路由器缓存队列积压、Wi-Fi信号不好导致丢包。周期总共丢了多少个包与理论应收包个数的比值就是丢包率。

在实际开发中,发送端通过seq标识每个数据包,接收端根据包头的seq号判断是否有丢包周期性计算丢包率[……]

继续阅读