c++程序未挂,几分钟无响应,之后又好了? 500C

1、里面的每秒定时器显示,距离上次执行超时10分钟了,按理超时2秒都不正常的。
超时期间没有任何日志,程序好多地方都有打印日志的

2、同一时间,相关的另一个进程也未收到任何信息,按理是可以收到的

3、用的是 Ubuntu 14.04.6 LTS (GNU/Linux 4.4.0-93-generic x86_64),gcc version 4.8.4

4、出问题的时候、cpu和内存、文件句柄数都正常,网络、端口、防火墙也可以

5、问题期间尝试建立sock连接无反应

6、刚出问题那会,就算请求进来的信息也突然中断,直到程序自己好了才回复,就好像CPU突然被占用了一样

图片说明

5个回答

你有没有用到多线程,或者IO访问加了锁,感觉你这个是死锁造成的。客户端和服务器端是否在一个计算机上,或者多个客户端在连服务器端。

排除加锁问题最有效的办法是在同步代码调用之前加上日志输出,看哪里不能输出了。另外排除下环境冲突的问题,可以把你的程序放在另一个计算机(没有条件可以用虚拟机),干净的系统上,看是否报错。

如果不是以上的原因,可能是网络的阻塞,软件方面是防火墙的拦截,硬件方面是网卡驱动,网络本身。

我猜是磁盘IO操作的问题。
应该是阻塞的造成的,但是什么阻塞的呢,不知道。
请求被挂起,应用程序又能恢复。内存正常。
那么按系统执行优先级硬件在前,软件在后,可能是硬件霸占CPU,然后软件等待。
具体看系统日志有没有记录什么的。都是猜测提供的信息简单又少,看你自己了

lty2017
lty2017 回复dagu945: 但是软件集成膨大的话,排查是很困难的。疑难杂症真的是胡搅蛮缠,但是问题总有解决的办法
大约 2 个月之前 回复
lty2017
lty2017 回复dagu945: 先排除硬件,确认硬件没问题,就是软件的问题。那多个进程看看有没有互锁一个等待一个的情况
大约 2 个月之前 回复
u013636470
dagu945 会不会是程序自身的问题,有什么情况会导致这样的事故,同一时间多个进程。
大约 2 个月之前 回复
lty2017
lty2017 回复dagu945: 那换台服务器试试,没准是程序的问题
大约 2 个月之前 回复
u013636470
dagu945 系统日志没有记录什么,运维说都检查过没有异常,CPU当时很低不到10%出事前后都这样
大约 2 个月之前 回复

正常情况每秒都有输出显示,异常时有10分钟没有显示,说明程序卡在某个点上,没有持续执行。
CPU很低,说明不是卡在死循环,那么就是卡在带阻塞功能的系统调用上。这种接口很多,比如socket接口(read/readfrom)、IO接口等等。多线程同步时,死锁也可能导致这种现象。

一般都是根据代码逻辑插入日志,一点点排查。

直接排查你的io访问吧, Ubuntu 我虽然没去整过硬件的开发,但是windows上经常遇到类似的情况

DeviceIoControl // 直接发送控制代码到指定的设备驱动程序,使相应的移动设备以执行相应的操作的函数

Ubuntu上应该也是有类似的函数的,在某些情况下io访问发送的数据或者指令造成驱动内的处理超时
而很多驱动中写的超时都超长,如windows下经常就看到sleep(5000) , 这就得等一个小时了

你不能gdb attach上去看看各个线程都在干什么吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问