C运行卡停

 
背景:
100长度的循环队列,
个人电脑环境可正常运行,线上服务器有时会卡住
线上服务器250G,内存消耗 249G~250G,使用率基本100%
但这个程序消耗的内存也就几G,
处理的内容为最近100条交易的ID,time两个列排个序,可能连1G内存都用不了... 
其他程序消耗的内存不止250G,swap64G空间也用完了,是在处理海量数据... 

有时的意思是:
不是每次都卡住,比如内存使用率已经达到百分之百时,再运行这个程序就会卡
我在关键的代码位置加入了日志,它就不卡了,这时的内存使用率依然还是100%
也就是说,在内存使用率已经100%的情况下,关键位置加入日志后,程序就不卡了... 

个人猜测如下:
服务器上有其他程序在处理海量数据,内存用完了
它申请内存空间或者其他资源遇到了阻塞/等待
加入日志,就是申请流处理... 
流处理在OS中统一分配,在被分配io流资源时,顺便争取到了它运行需要的其他资源

这个地方卡了大概一星期,反复地找可能哪里出了问题,
毕竟线下没问题,线上又无法现场调试...

总结

 
如果一件事比较重要,或者应该主动地觉察一系列事物中的关键环节,

在这个关键环节上反复思考,验证,打磨,

这样出问题时,才有可能快速解决... 

参考文章