使用共享内存会引起进程占用fd不释放?和内存释放吗?
岁月小龙 2017-02-21 06:10:42 大家好:
我的程序运行在linux下,用C语言写的。持续跑一个任务。
之前会时不时的崩溃,频率较高。是因为里面有很多的malloc和free。我怀疑是内存出了问题。
先在我用shmget()来申请共享内存,替代malloc,效果是好了很多。1天可能只崩溃一次,有时候一天也不崩溃。
目前的问题是:进程占用的fd很多,打到几万了,而且持续增大。用lsof查看,有如下信息:
-----------------------------------------------------------------------------------
*744u IPv4 53221661 0t0 UDP *:16557
*745u REG 0,9 0 4638 [timerfd]
*746r FIFO 0,8 0t0 53221663 pipe
*747w FIFO 0,8 0t0 53221663 pipe
*748r FIFO 0,8 0t0 53221130 pipe
*749w FIFO 0,8 0t0 53221130 pipe
*750w FIFO 0,8 0t0 53174990 pipe
*751u IPv4 53221282 0t0 UDP *:17444
*752u IPv4 53221283 0t0 UDP *:17445
*753u REG 0,9 0 4638 [timerfd]
*754r FIFO 0,8 0t0 53221285 pipe
*755w FIFO 0,8 0t0 53221285 pipe
------------------------------------------------------------------------------------
里面有很多的pipe
还有就是程序占用的内存持续增大,基本上一分钟就增大1M。
问题:
使用shmget()共享内存有什么要注意的
那么多pipe是怎么来的,如何排查?