网络库性能测试

来源:互联网 发布:c语言项目开发流程 编辑:程序博客网 时间:2024/06/06 08:54
一、背景:公司,基于libuv封装了一个网络库。对该网络库进行了性能测试。
二、测试说明:
暂时,进行了echo程序测试,但是要求对数据包分成一个个消息(这样,如果一个包很长,那么需要先缓冲,等有足够的数据,才可以回复。这样相对符合现实).
另外,测试的client/server需要在不同的机器。
三、测试方案:
1、1024个链接同时发包,每一个包长度为512字节。
   结果:该测试比较正常,稳定,没发现什么问题。
2、1024个链接同时发包。每一个链接发的包是不一样大的。发包大小种类有:{32,128,512,1*1024,4*1024,16*1024,64*1024,256*1024,1*1024*1024};
结果: 1、可能会存在链接无法及时断开的情况,甚至是无法断开的情况(即、客户端已经退出,但是,server端查看链接仍然存在).
2、内存会比较大。在测试512字节,相同大小的包,内存占用不到5M。但是,这里测试,内存近2G。
3、在客户端退出一段时间之后,server会将内存还给系统。如果连接断全部断开,那么几乎全部还给系统(占用不到5M);如果连接没有全部断开(剩余4~5个链接没断开),那么会占用大约11M。
四、其它
在这个测试过程中,也尝试使用了其它内存分配器(jemalloc,tcmalloc)
1、用这些内存分配器,并没有想象中的性能提高;
2、内存似乎不能及时的返回给系统。
[当然,可能我的用法存在问题]


五、心得
1、内存相关
1-1、在网络性能测试中,动态申请内存(最好不要用new,用malloc等直接申请)
1-2、在动态申请内存外面加一层包裹函数。
这样的好处,是可以在测试的时候,可以保证统一入口。这样的话,在必要的时候,可以进行必要的统计。很容易就知道内存是否全部释放。
2、网络相关
2-1、网络程序,在网络I/O将占用很大的CPU比例;所以,发送缓冲还是有必要存在的。
2-2、网络程序,心跳包很有必要。网络程序会存在断链不完全的情况。心跳包可以解决这个问题。
0 0