搜索
bottom↓
回复: 20

使用RT-Thread和LWIP,如果用CHARGEN例程,创建TCP服务器,同时接受32个客户端的连接,那要

[复制链接]

出0入0汤圆

发表于 2010-3-9 18:02:58 | 显示全部楼层 |阅读模式
chargen.c中定义

#define MAX_SERV                          32

rtconfig.h文件中
修改
#define RT_LWIP_TCP_PCB_NUN               32

现在测试的情况是超过9个连接,则第10个,与服务器不能连接成功了。

请问还要修改其它的宏定义,或添加其它的宏定义吗?lwipopts.h 中的相关宏还要修改吗?谢谢各位!

现在测试的结果是:

total memory 52032
used memory  15208
maxium allocated memory list_mem()  15794

所以现在不是因为内存不够用,我曾尝试改lwipopts.h中,关于设为10的常量,改过之后,TCP同时连接的数量确实增加到了31个。但修改之后发现系统运行一会之后,所有的网络连接会断开,原因为内存不断的上升,而不改此文件没有出现此问题。所以现在想问的是lwipopts.h到底要修改哪几个宏,才可以增加TCP连接到32个。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-3-9 19:04:08 | 显示全部楼层
修改之后发现系统运行一会之后,所有的网络连接会断开,原因为内存不断的上升

所以关键还是内存。

出0入0汤圆

 楼主| 发表于 2010-3-9 19:18:22 | 显示全部楼层
那到底要怎样修改呢,因为对LWIP的lwipopts.h和opt.h文件不是很清楚,所以想请教ffxz 修改哪几个地方才可以实现到达32个的连接呢?

用chargen.c提供的源文件测试五个没有问题呀,并且上述的两个源文件没有修改过,
chargen.c中定义  

#define MAX_SERV                          5

rtconfig.h文件中  
  
#define RT_LWIP_TCP_PCB_NUN               5

五个测试的时候很正常,内存在很长时间内没有什么变化。

所以我认为还是上述几个头文件的问题。


因为不知修改哪几个宏,所以测试了两天,还是一样,反反复复出现内存增长的问题。
lwipopts.h
opt.h
rtconfig.h
上述几个头文件定修改合适,系统应该可以很好的运行。

所以在此还麻烦ffxz帮忙,实现多个TCP同时连接的问题,我想其他(她)人也会遇到同样的情况。谢谢!

出0入0汤圆

发表于 2010-3-9 20:02:31 | 显示全部楼层
我曾尝试改lwipopts.h中,关于设为10的常量,改过之后,TCP同时连接的数量确实增加到了31个。但修改之后发现系统运行一会之后,所有的网络连接会断开,原因为内存不断的上升

那估计就是内存不够吧
你可以试着修改成15个连接
然后 list_mem()  
看看内存的情况
一步一步的增加连接数啊

出0入0汤圆

 楼主| 发表于 2010-3-9 20:26:38 | 显示全部楼层
回复【3楼】litteworm
-----------------------------------------------------------------------

这样的操作我也试过了,当连接达到31个之后,运行一段时间,内存使用没有什么变化。但再长时间运行,

所有的网络连接会断开,原因为内存不断的上升,到达系统的极限。

31个连接正常运行的时候,内存才使用了26K左右。

出0入0汤圆

发表于 2010-3-9 20:31:41 | 显示全部楼层
也就是说,31个TCP连接,开始时能够正常运行,内存使用量是26k(你总共的能够使用的内存是50k这样)。

大概运行了多长时间?有否什么内存变化曲线什么的。从现象来看,像是出现了内存泄露。我需要找个环境来试试,这几天忙啊

出0入0汤圆

发表于 2010-3-10 00:13:12 | 显示全部楼层
嗯 关注···
lz想办法给出 出现故障前后的环境参数给ffxz 估计就好解决了
越详细越好 呵呵

出0入0汤圆

 楼主| 发表于 2010-3-10 00:15:01 | 显示全部楼层
回复【5楼】ffxz
-----------------------------------------------------------------------

运行的时间不是很长,5分多钟,每次大约隔30多秒,list_mem() maxium allocated memory  都是逐渐增加的。

我的测试环境是这样的:周立功公司的tcp&udp测试工具周立功公司提供的UDP TCP测试软件ourdev_537507.rar(文件大小:1.78M) (原文件名:TCPUDPDebug1026_Setup.rar) ,建立32个TCP连结。之后自动发送,下位机收到发送的数据之后

将数据回传。测试的时候逐个建立连结,之后list_mem(),测试,maxium allocated memory,数值逐渐增大,最后51K左右

连结断开了,但是系统还可以响应list_mem().

出0入0汤圆

发表于 2010-3-11 09:29:55 | 显示全部楼层
好的,我今天用QEMU也试试,虽然内存是比较大些,不过既然你说有这个问题,那么内存应该会增长上去。

出0入0汤圆

 楼主| 发表于 2010-3-11 16:48:51 | 显示全部楼层
回复【8楼】ffxz
-----------------------------------------------------------------------

谢谢,期待着你的测试结果。

最近要用RT-THREAD和LWIP来做一实际的项目。大部分都测试通过了。

感觉这个系统很简练,容理使用,虽然原代码没有仔细阅读。

再次谢谢ffxz.

出0入0汤圆

发表于 2010-3-12 07:37:29 | 显示全部楼层
32个TCP连接消耗的内存还是非常惊人的,这个并不是连接上了内存就固定了。因为TCP本身针对每个连接有队列(长度不一,会动态变化),所以总的大小是不固定的。

一个TCP连接总的内存消耗我还在统计中,表现现象确实会发生内存泄漏,我还需要继续分析下去。(因为还是粗略写的代码,所以分析还需要手工去做,今天再想法弄个python脚本做到能够从内部的数据自动获得分配的语句位置,线程名称和大小)

出0入0汤圆

 楼主| 发表于 2010-3-12 08:58:31 | 显示全部楼层
回复【10楼】ffxz
-----------------------------------------------------------------------

谢谢,再次期待着你的分析结果。我在测试的时候,每次发送的只有四个字,初期限32个连接,只使用了26多K的内存。如果如你所说

“因为TCP本身针对每个连接有队列(长度不一,会动态变化),所以总的大小是不固定的 ”,那么系统最后会超过51K那就正常了,

如果翻倍了,那么确实会这样了。

再次谢谢ffxz无私帮助.

出0入0汤圆

发表于 2010-3-12 09:02:06 | 显示全部楼层
回复【11楼】neilxiang  
谢谢,再次期待着你的分析结果。我在测试的时候,每次发送的只有四个字,初期限32个连接,只使用了20多K的内存。
-----------------------------------------------------------------------

TCP的特点还允许多个包合并粘成一个大包发送出去,所以虽然可能只是4个字节,但粘合的多了,内存使用相应的也上去了。对于64k SRAM的系统需要32个TCP连接吗?

出0入0汤圆

 楼主| 发表于 2010-3-12 16:30:54 | 显示全部楼层
回复【12楼】ffxz
-----------------------------------------------------------------------

事实上本次使用,最少需要18个连接,因为是项目的需要。只是为了以后的扩展,才设为32个连接了。我的板上还外扩了,128K的RAM。

但是没有使用。

请问ffxz,现在测到了什么程度呢?

出0入0汤圆

发表于 2010-3-12 16:40:51 | 显示全部楼层
RT-Thread晚上分析,今天很忙很忙。

出0入0汤圆

发表于 2010-3-15 10:26:07 | 显示全部楼层
你详细修改的地方是哪些?

我已经添加了一个补丁到google svn上,你可以更新后再试试32个连接的情况。另外,一个TCP连接大约要消耗2K的内存,这个请你自己注意。

出0入0汤圆

 楼主| 发表于 2010-3-15 16:46:53 | 显示全部楼层
我现在用更新版本的来测试,
更改的情况如下:
rtconfig.h文件中将
#define RT_LWIP_TCP_PCB_NUM   20(将原来的数值改为了20),原来是5

lwipopts.h文件中将
#define MEMP_NUM_NETCONN   21//10(改为了21)
如果是10,则客户端的连接只能建立9个;
现在要建立20个连接来测试,所以将10改为了21。
实际测试时,只建立了18个客户端的TCP连接。
模拟时用计算机建立了18个客户端的连接,系统运行之初,一切自常,之后内存增加,大约40分钟之后
网络连接断开,原因为内存耗尽。

现象和以前一样。

但是今天用两个连接测试,系统运行了3个小时,内存的使用几乎没有什么变化。

顺便请教各位:如果只使用TCP(做为服务器)

rtconfig.h文件中
#define RT_LWIP_TCP_PCB_NUM   20

lwipopts.h文件中
#define MEMP_NUM_NETCONN   21

两者是什么关系呢?

也就是如果服务器最多同时允许20个客户端接入,那么这两个宏如何取值呢?这两个值的设置会不会影响上述的测试呢?

系统中还有以下几个常量如何设置呢?
lwipopts.h
#define MEMP_NUM_RAW_PCB
#define MEMP_NUM_UDP_PCB
#define MEMP_NUM_TCP_SEG

出0入0汤圆

发表于 2010-3-15 21:26:08 | 显示全部楼层
你的修改基本上是正确的。

在RT-Thread修改的版本中,
#define MEMP_NUM_RAW_PCB
#define MEMP_NUM_UDP_PCB
基本上没再有意义。

MEMP_NUM_NETCONN这个用于指定总共的连接数(socket数目,netconn数目)

RT_LWIP_TCP_PCB_NUM会重定向到MEMP_NUM_TCP_PCB去。

我测试下来的结果,20个TCP连接,在36K空闲内存的情况下,基本上没什么问题,跑了1个多小时。当所有连接都断开后(再稍微过一会),内存占用数和最初启动chargen服务端时相同,即这个过程中不存在内存泄漏的问题。36k总共可用内存的情况下只能跑到20个TCP连接(此时内存占用已经到了34、35k了),所以再多的连接已经不能维持。(看你前面说的,有50k可用内存,应该还有往上加几个连接的空间)

判断内存是否存在泄漏,就类似我上面说的,启动运行……当所有连接都断开时(主动断开或被动断开),如果内存占用和原来一样,那么说明这个过程中不存在内存泄漏的情况。

另外,如果你确实必须获得高的连接数,那么还可以修改:
TCP_SND_BUF
TCP_MSS
TCP_SND_QUEUELEN
TCP_WND
等选项。

出0入0汤圆

 楼主| 发表于 2010-3-16 13:57:16 | 显示全部楼层
感谢ffxz,用最新的版本LWIP来测试,现在的20个连接可以比较正常的运行,但是maxium allocated memory 运行几个小时之后,还是比20个连接运行之初增加了大约1K。断开所有的连接之后,maxium allocated memory 没有变化,used memory恢复到了连接之初。

再次感谢ffxz的帮助!

出0入0汤圆

发表于 2010-3-16 15:27:46 | 显示全部楼层
回复【19楼】neilxiang  
感谢ffxz,用最新的版本LWIP来测试,现在的20个连接可以比较正常的运行,但是maxium allocated memory 运行几个小时之后,还是比20个连接运行之初增加了大约1K。断开所有的连接之后,maxium allocated memory 没有变化,used memory恢复到了连接之初。
再次感谢ffxz的帮助!
-----------------------------------------------------------------------

呵呵,下次不要发长标题贴和反复发新帖就行。这个也需要感谢你的反馈才是,你这个反馈修正了一个lwip潜在的问题,谢谢你。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 15:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表