使用共享内存会引起进程占用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是怎么来的,如何排查?
...全文
738 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
twintiger 2017-03-05
  • 打赏
  • 举报
回复
找到问题点就好。通讯这部分由于多线程处理,资源管理起来是比较麻烦的,要特别小心。
cdcjk 2017-03-05
  • 打赏
  • 举报
回复
通讯这部分由于多线程处理,资源管理起来是比较麻烦的,要特别小心。多线程
岁月小龙 2017-02-22
  • 打赏
  • 举报
回复
引用 1 楼 twintiger 的回复:
你是不是用socket发udp包,每次都申请一个新socket,然后没有close?
twintiger,首先感谢你的回答。 还有一个webservice的程序和我这个程序通信,昨天我经过测试发现,把webservice停掉,这个程序的内存就不增长了。 很可能问题出在webservice 和这个程序通信的这一块。
twintiger 2017-02-21
  • 打赏
  • 举报
回复
你是不是用socket发udp包,每次都申请一个新socket,然后没有close?

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧