关于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问题相关推荐

  1. windows server 2008R2服务端上安装流媒体服务器

    服务器配置: 什么是流媒体服务呢. 所谓流媒体是指采用流式传输的方式在Internet播放的媒体格式, 与需要将整个视频文件全部下载之后才能观看的传统方式相比, 流媒体技术是通过将视频文件经过特殊的压 ...

  2. 中控考勤机BS版本server端开发 集成到自己的CRM 或者OA里面集成考勤机

    1  借助push sdk自己去实现一个push server端,但是这个太麻烦了. 2  可以借助中控的 zktime 来实现,zktime是中控的一个server考勤软件,我们通过这个考勤软件来实 ...

  3. 嵌入式 boa服务器移植

    随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器, ...

  4. boa linux arm修改网卡,Boa服务器在ARM+Linux上的移植

    Boa服务器在ARM+Linux上的移植 一.Boa服务器介绍 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右. 作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会 ...

  5. 【实战】物联网安防监控项目【2】———boa服务器的移植

    一.boa服务器的移植 1.源码下载 1.1 boa简介: 其可执行代码只有大约60KB左右,Boa是一个单任务的HTTP服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请 ...

  6. boa服务器 系统设置,boa服务器在linux系统下搭建

    boa服务器在linux系统下搭建 内容精选 换一换 制作Docker镜像,有以下两种方法.快照方式制作镜像(偶尔制作的镜像):在基础镜像上,比如Ubuntu,先登录镜像系统并安装Docker软件,然 ...

  7. 详解zabbix安装部署(Server端篇)

    Linux下常用的系统监控软件有Nagios.Cacti.Zabbix.Monit等,这些开源的软件,可以帮助我们更好的管理机器,在第一时间内发现,并警告系统维护人员. 今天开始研究下Zabbix,使 ...

  8. 使用FileZilla Server轻松搭建个人FTP服务器

    Linux平台下快速搭建FTP服务器 服务器FTP Server环境搭建 针对以上遇到的问题的解决方案如下: 1)如何上传文件到云服务器上          关于这个问题,我首先想到的是使用FileZ ...

  9. 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. ...

最新文章

  1. K - Anton and Lines CodeForces - 593B
  2. 我,AI专家,模型检测COVID-19准确率高达97.5%,约吗
  3. xman的思维导图快捷键_这个良心好用的思维导图软件,居然不用氪金充钱
  4. python删除字符_Python之删除字符串中不需要的字符
  5. linux编译动态库之fPIC
  6. JEECG参与2017年度最受欢迎开源项目投票,请投上宝贵一票
  7. pkg-config --cflags --libs
  8. 数塔 简单的 动态规划
  9. zabbix-自定义键值监控网卡IN、OUT流量
  10. 【Photoshop教程】转发:Photoshop把帅哥转成超酷的阿凡达
  11. php字符串转openssl格式,将OpenSSL生成的RSA公钥转换为OpenSSH格式(PHP)
  12. 智和信通围绕智和网管平台构建统一监控运维方案
  13. 摩拜开锁系统是用什么服务器,摩拜昨晨现“开锁难” 市民:系统需更稳定
  14. 第二篇:傅里叶变换与短时傅里叶变换
  15. Java开源大全 网站
  16. 简易数字时钟 按键可校准
  17. SAP 运维 集团化公司SAP系统运维管理体系建设方案
  18. 基于社交图谱的多层关系挖掘推荐
  19. 从零开始制作一个飞机大战类型的射击游戏
  20. security java的配置_Spring Security:无法使用java config配置方法安...

热门文章

  1. 全网最全python爬虫系统进阶学习(附原代码)学完可就业
  2. 给双11想屯书的小伙伴一个书单
  3. mpls-bgp optionC RR
  4. 2017南亚东南亚国家商品展暨投资贸易洽谈会会刊(参展商名录)
  5. 开关电源:TL431与线性光耦4N35组成的电压反馈电路。此时TL431内部的运放做误差放大器而不是比较器,和组成5V参考电压时候作用稍微不同的理解
  6. Ai自动养站站群,养站神器,内容自主聚合。
  7. linux内核源码分析之虚拟文件系统VFS(一)
  8. 银行文件收集有妙招,几分钟归档上千份文件
  9. SVG停车场地图与停车场导航
  10. sip转webrtc的并实现网页拨打电话