修复了两个bug

基于gsoap写了一个长时间运行的服务器,然而在实际使用中,经常出现程序突然中断异常退出的情况。经过长时间的调试,终于基本解决了这个问题


1是之前说的内存出错的问题,后来发现每次出错的地方都在QDateTime::currentDateTime()函数上,而且是在这里面出现new/malloc失败,然后程序就中断了

看了qt的源码,发现qt在QDateTime的构造函数中默认new了一个对象存放时间信息,并用智能指针的方式去管理。难道是这个释放的有问题?因此后续改成直接使用linux的gettimeofday的函数获取系统时间,虽然不一定准确,但是满足使用的需求还是可以的,更换了之后,原来的服务器运行了好几天也没出现中断的情况了


2是发现用soap接口,在短时多次调用时服务器也会崩溃,给出的信号是SIGPIPE;通过在网上查找原因,发现这个SIGPIPE出现的时候,一般是在进行send数据时,管道socket已经被删除或释放的,系统通知了这个信号,然而默认处理这个信号则采用中断的这种方式,导致服务器也卡住了。猜想原因可能是短时间大量进行了soap通信,而soap通信之前没有设置成长连接的方式(也不确定设置keepalive是否有效),可能导致说管道提前释放?原因没有继续查明,但是这里首先将soap设置了keepalive、此外对系统抛出的SIGPIPE进行处理,不让其进行中断,保持服务正常运行。目前来看这样处理后也可以长时间运行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值