onvif server端集成到BOA服务器后不定时出现closewait问题
关于closewait的原因不再细述,可自行百度。下面重点介绍原因现象和解决办法
Boa 80端口出现closewait问题现象:
1.不定时的出现80端口closewait的现象,经实验发现在重启NVR的时候容易出现。
2.设备加入NVR后,使用TCP方式单独向设备发送不完整报文,设备的80端口不出现closewait。
3.设备不加入NVR,使用TCP方式单独向设备发送与1同样的不完整报文,设备的80端口立马出现closewait。
两台设备同时使用同样的boa。并将接收到的数据包打印出来。一个加入NVR 一个不加入NVR
原因:
在soap框架中用于onvif进行数据处理的soap.buf的大小定义为65535 ,而我这边定义的ONVIF_BUFFER的数组大小是1024*20
在从Boa的socket获取到数据之后,将此数据使用strcpy复制到ONVIF_BUFFER中,然后交由ONVIF进行处理,ONVIF在处理数据时候
使用memecpy直接将ONVIF_BUFFER的首地址起始的65535个内存都复制给ONVIF进行使用。
在接入onvif后,由于在代码中每次清空ONVIF_BUFFER的时候只是清空1024,与NVR连接之后会收到大于1024大小的数据包,此时有包截至符
存储在以ONVIF_BUFFER为起始地址的后续65535个内存中,ONVIF在处理的时候就能够跳出死循环。
解决办法:
1.将原来按照BOA的BUFFER大小设计的BUFFER改为根据ONVIF的BUFFER大小设计
2.在BOA读取header的时候(或者再boa接收完数据并且判断完是onvif报文之后),加入onvif的包完整性检测代码----即判断是否在包结尾收到":Envelope>"
3.在进入onvif之前加入判断<?和?>是否配对成功,如果成功再交由onvif进行处理。
--------------------收到这样的字符则说明包接收完成,交由ONVIF进行后续处理,否则直接舍弃这个包,并断开socket。
4.修改onvif框架使其在判断xml格式正确与否的时候,在读取完数据的时候直接跳出死循环,另外
-------------------------------------------
解决onvif收到错误包,截断包的情况引起onvif框架内部死循环导致的closewait
这个问题郁闷了好久期间也查过了boa的代码发现其在对于closewiat问题的检测上做的还可以,一个偶然发现发送格式不正确的xml格式的报文给boa,就会出现这个问题。最终定位问题是onvif自己的xml解析的问题,在boa和onvif整合后,使用一个BUFFER将从boa获取的数据转交给onvif进行处理,在onvif处理这些数据包的过程的时候,是通过判断xml文档中的<? 和?>是否配对, </>是否都一一匹配来进行检测的,如果检查出来不匹配则onvif会一直在死循环去读取BUFFER去获取数据,从而造成boa的cpu利用率高,产生closewait的问题。
我的解决办法是在接受到onvif数据后,在boa代码中先进行一次xml格式的筛查,如果筛查没问题交给onvif进行处理。
目前采用这样的办法是可以解决问题还需要后续继续填坑!!!
201708018傍晚
onvif server端集成到BOA服务器后不定时出现closewait问题相关推荐
- windows server 2008R2服务端上安装流媒体服务器
服务器配置: 什么是流媒体服务呢. 所谓流媒体是指采用流式传输的方式在Internet播放的媒体格式, 与需要将整个视频文件全部下载之后才能观看的传统方式相比, 流媒体技术是通过将视频文件经过特殊的压 ...
- 中控考勤机BS版本server端开发 集成到自己的CRM 或者OA里面集成考勤机
1 借助push sdk自己去实现一个push server端,但是这个太麻烦了. 2 可以借助中控的 zktime 来实现,zktime是中控的一个server考勤软件,我们通过这个考勤软件来实 ...
- 嵌入式 boa服务器移植
随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器, ...
- boa linux arm修改网卡,Boa服务器在ARM+Linux上的移植
Boa服务器在ARM+Linux上的移植 一.Boa服务器介绍 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右. 作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会 ...
- 【实战】物联网安防监控项目【2】———boa服务器的移植
一.boa服务器的移植 1.源码下载 1.1 boa简介: 其可执行代码只有大约60KB左右,Boa是一个单任务的HTTP服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请 ...
- boa服务器 系统设置,boa服务器在linux系统下搭建
boa服务器在linux系统下搭建 内容精选 换一换 制作Docker镜像,有以下两种方法.快照方式制作镜像(偶尔制作的镜像):在基础镜像上,比如Ubuntu,先登录镜像系统并安装Docker软件,然 ...
- 详解zabbix安装部署(Server端篇)
Linux下常用的系统监控软件有Nagios.Cacti.Zabbix.Monit等,这些开源的软件,可以帮助我们更好的管理机器,在第一时间内发现,并警告系统维护人员. 今天开始研究下Zabbix,使 ...
- 使用FileZilla Server轻松搭建个人FTP服务器
Linux平台下快速搭建FTP服务器 服务器FTP Server环境搭建 针对以上遇到的问题的解决方案如下: 1)如何上传文件到云服务器上 关于这个问题,我首先想到的是使用FileZ ...
- zabbix 3.2.2 server端(源码包)安装部署 (一)【转】
环境准备: 操作系统 CentOS 6.8 2.6.32-642.11.1.el6.x86_64 zabbix server 172.16.10.150 zabbix agent 172.16.10. ...
最新文章
- K - Anton and Lines CodeForces - 593B
- 我,AI专家,模型检测COVID-19准确率高达97.5%,约吗
- xman的思维导图快捷键_这个良心好用的思维导图软件,居然不用氪金充钱
- python删除字符_Python之删除字符串中不需要的字符
- linux编译动态库之fPIC
- JEECG参与2017年度最受欢迎开源项目投票,请投上宝贵一票
- pkg-config --cflags --libs
- 数塔 简单的 动态规划
- zabbix-自定义键值监控网卡IN、OUT流量
- 【Photoshop教程】转发:Photoshop把帅哥转成超酷的阿凡达
- php字符串转openssl格式,将OpenSSL生成的RSA公钥转换为OpenSSH格式(PHP)
- 智和信通围绕智和网管平台构建统一监控运维方案
- 摩拜开锁系统是用什么服务器,摩拜昨晨现“开锁难” 市民:系统需更稳定
- 第二篇:傅里叶变换与短时傅里叶变换
- Java开源大全 网站
- 简易数字时钟 按键可校准
- SAP 运维 集团化公司SAP系统运维管理体系建设方案
- 基于社交图谱的多层关系挖掘推荐
- 从零开始制作一个飞机大战类型的射击游戏
- security java的配置_Spring Security:无法使用java config配置方法安...