首页  »   VxWorks

为何网络缓冲池会耗尽

网友分享于:2015-06-12  浏览:12次
为什么网络缓冲池会耗尽?
本帖最后由 jackydi 于 2015-06-03 15:10:14 编辑
今天遇到一个网络问题,网口怎么都不通,使用muxStop()和muxStart()命令重启网口也不行,使用下面的命令查看网络缓冲区,最下面的free显示为0。大家帮忙看看为什么会出现这种缓冲区耗尽的现象?什么情况下会造成这个现象?
VxWorks 5.4, 8260子卡

-> netPoolShow 0x77b50d0
type        number
---------   ------
FREE    :    128
DATA    :     34
HEADER  :      0
SOCKET  :      0
PCB     :      0
RTABLE  :      0
HTABLE  :      0
ATABLE  :      0
SONAME  :      0
ZOMBIE  :      0
SOOPTS  :      0
FTABLE  :      0
RIGHTS  :      0
IFADDR  :      0
CONTROL :      0
OOBDATA :      0
IPMOPTS :      0
IPMADDR :      0
IFMADDR :      0
MRTABLE :      0
TOTAL   :    162
number of mbufs: 162
number of times failed to find space: 0
number of times waited for space: 0
number of times drained protocols for space: 0
__________________
CLUSTER POOL TABLE
_______________________________________________________________________________
size     clusters    free      usage
-------------------------------------------------------------------------------
1584     81           0       314727        
-------------------------------------------------------------------------------
value = 80 = 0x50 = 'P'
->
 
------解决思路----------------------
你的代码里是否用钩子函数?在return之前是否释放内存?mBlk
------解决思路----------------------
引用:
Quote: 引用:

TOTAL   :    162
number of mbufs: 162

看起来不是内存没有释放,而是数据没有取出来使用


是的,buffer被申请后就没有释放,但是不知道是发送的问题还是接收的问题。

这两天测试的时候,发现FCC还有异常停止发送的现象,就是数据写入到网口的发送BD环中,但是FCC一直都不处理,也不通过中断或者BD返回错误状态。这样在驱动程序中也没有办法判断FCC的状态是正常还是异常。


建议添加超时处理机制,如果接收超时,抛弃一些数据包;估计是数据没有接收完整,程序不做处理,结果造成缓冲区满

相关解决方案

最新解决方案