为什么网络缓冲池会耗尽?

jackydi 2015-06-03 03:07:03
今天遇到一个网络问题,网口怎么都不通,使用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'
->
...全文
392 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackydi 2015-06-11
  • 打赏
  • 举报
回复
自己搞定了,原来是网络驱动程序有问题。对异常情况处理的不完善所致,大改后解决问题。
jackydi 2015-06-08
  • 打赏
  • 举报
回复
引用 7 楼 worldy 的回复:
[quote=引用 6 楼 jackydi 的回复:] [quote=引用 5 楼 worldy 的回复:] TOTAL : 162 number of mbufs: 162 看起来不是内存没有释放,而是数据没有取出来使用
是的,buffer被申请后就没有释放,但是不知道是发送的问题还是接收的问题。 这两天测试的时候,发现FCC还有异常停止发送的现象,就是数据写入到网口的发送BD环中,但是FCC一直都不处理,也不通过中断或者BD返回错误状态。这样在驱动程序中也没有办法判断FCC的状态是正常还是异常。[/quote] 建议添加超时处理机制,如果接收超时,抛弃一些数据包;估计是数据没有接收完整,程序不做处理,结果造成缓冲区满[/quote] 谢谢您的建议,这是个好方法。还有一个问题,发送BD填好后,FCC不发送是什么原因呢?
worldy 2015-06-07
  • 打赏
  • 举报
回复
引用 6 楼 jackydi 的回复:
[quote=引用 5 楼 worldy 的回复:] TOTAL : 162 number of mbufs: 162 看起来不是内存没有释放,而是数据没有取出来使用
是的,buffer被申请后就没有释放,但是不知道是发送的问题还是接收的问题。 这两天测试的时候,发现FCC还有异常停止发送的现象,就是数据写入到网口的发送BD环中,但是FCC一直都不处理,也不通过中断或者BD返回错误状态。这样在驱动程序中也没有办法判断FCC的状态是正常还是异常。[/quote] 建议添加超时处理机制,如果接收超时,抛弃一些数据包;估计是数据没有接收完整,程序不做处理,结果造成缓冲区满
jackydi 2015-06-07
  • 打赏
  • 举报
回复
引用 5 楼 worldy 的回复:
TOTAL : 162 number of mbufs: 162 看起来不是内存没有释放,而是数据没有取出来使用
是的,buffer被申请后就没有释放,但是不知道是发送的问题还是接收的问题。 这两天测试的时候,发现FCC还有异常停止发送的现象,就是数据写入到网口的发送BD环中,但是FCC一直都不处理,也不通过中断或者BD返回错误状态。这样在驱动程序中也没有办法判断FCC的状态是正常还是异常。
worldy 2015-06-06
  • 打赏
  • 举报
回复
TOTAL : 162 number of mbufs: 162 看起来不是内存没有释放,而是数据没有取出来使用
jackydi 2015-06-06
  • 打赏
  • 举报
回复
引用 3 楼 woaishuo2011 的回复:
你的代码里是否用钩子函数?在return之前是否释放内存?mBlk
应用程序代码里没有使用mblk之类的结构。这个问题是8260子卡测试时发现的,但是看motfccend.c文件中的发送和接收过程,没有发现有申请完不释放的地方,申请出错后都是释放的,要么就是提交给netTask任务处理了,在netTask任务中怎么处理就不知道了。在网络驱动程序中的处理过程很复杂,看起来很费劲。 系统VxWorks5.4,MPC8260子卡。
woaishuo2011 2015-06-05
  • 打赏
  • 举报
回复
你的代码里是否用钩子函数?在return之前是否释放内存?mBlk
jackydi 2015-06-04
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
一个水池如果一直进水,但没有流出,或者流出的比流入的少,水池就会满;
道理我懂。我想问的是,哪些异常情况可能会导致这种问题的发生?
worldy 2015-06-03
  • 打赏
  • 举报
回复
一个水池如果一直进水,但没有流出,或者流出的比流入的少,水池就会满;

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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