网络IO型程序压力测试要点

标签: 网络 io 程序 | 发表时间:2014-11-04 18:23 | 作者:
出处:http://2014.54chen.com/

以下内容由 [五四陈科学院]提供

一.突破客户端端口数限制

  • 这是第一个会遇到的问题,同一IP地址,最大端口只能到65535。
  • 现在能够直接找到的原因是TCP协议中(rfc793)定义了报头的端口长度为16位。(2 16=65536)
  • 但是从计算机网络的发展来看,端口长度定义同IPv4定义一样,都是当时的同志们拍脑袋的结果。

突破的办法

  • 一个机器绑定多个IP地址。
  • 搞无数机器或者虚拟机。

二.防止gc影响测试结论

  • 如果压力程序为java,要小心full gc导致单次请求时间加长。
  • 从java角度,随时jstat -gcutil跟踪client的情况,很有必要。

一些推荐的参数

  • 24G的机器: -XX:ParallelCMSThreads=8 -Xms12G -Xmx12G -XX:PermSize=128m -XX:MaxPermSize=512m -XX:MaxDirectMemorySize=1280m
  • 细节慢慢调。
  • 如果业务逻辑不重的情况,gc未必有这么明显的影响。

三.防止客户端性能问题影响结论

  • 随时关注client的cpu load mem的情况。
  • loading test过程中由于client的性能问题,经常会影响结论。

推荐的办法

  • 定时记录各项数据,对比观察。

四.防止客户端线程数过多

  • 因为要模拟大量用户,很有可能去启动大量的线程。
  • 线程的数量太多后基本都是自己先挂了。

解决

  • 用循环来近似模拟多用户。
  • 使用scala akka erlang这样的并发模型。

五.其他一些细节

  • 同时连接数与同时发数据人数是两个天壤之别的数,前者对系统影响很小,后者的增长才是系统的压力所在。
  • 尽可能模拟连接数与发数据人数目标比例。
  • 平衡压力尽可能长的时间去压有可能会发现累积性问题。
  • 机器越多越方便。

想快点找到作者也可以到Twitter上留言: @54chen
或者你懒得带梯子上墙,请到新浪微博: @54chen

相关 [网络 io 程序] 推荐:

网络IO型程序压力测试要点

- - 五四陈科学院
以下内容由 [五四陈科学院]提供. 一.突破客户端端口数限制. 这是第一个会遇到的问题,同一IP地址,最大端口只能到65535. 现在能够直接找到的原因是TCP协议中(rfc793)定义了报头的端口长度为16位. 但是从计算机网络的发展来看,端口长度定义同IPv4定义一样,都是当时的同志们拍脑袋的结果.

高性能网络编程5--IO复用与并发编程

- - CSDN博客云计算推荐文章
对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接. 同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接,则是高并发. 服务器的并发编程所追求的就是处理的并发连接数目无限大,同时维持着高效率使用CPU等资源,直至物理资源首先耗尽.

物理IO与逻辑IO

- - 操作系统 - ITeye博客
IO性能对于一个系统的影响是至关重要的. 一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO. 而IO性能的发展,明显落后于CPU的发展. Memchached也好,NoSql也好,这些流行技术的背后都在直接或者间接地回避IO瓶颈,从而提高系统性能. 上图层次比较多,但总的就是三部分.

linux异步IO浅析

- Sepher - kouu's home
知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上. 预先知道这些数据的位置,所以预先发起异步IO读请求. 等到真正需要用到这些数据的时候,再等待异步IO完成. 使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情).

java nio和io的比较

- - 互联网 - ITeye博客
第一部分:简单介绍NIO.     服务器在合理时间内处理大量客户机的请求的能力取决于服务器使用I/O流的效率,同时为成百上千的客户提供服务的服务器必须能并发的使用I/O服务.     用Java语言写的服务器,由于其线程与客户机之比几乎是一比一,因而易受到大量线程开销的影响,其结果是即导致性能问题,又缺乏伸缩性.

C++之文件IO操作流

- Nanqi - 博客园-首页原创精华区
  前两节介绍了C++的IO流类库,标准设备IO操作流中部分预定义流对象的成员函数以及IO格式控制. 那今天我将继续介绍关于C++中的流操作内容——文件IO操作流fstream. 并会着重讲解C++是如何对文件进行操作的.   文件指存放在外部介质上的数据的集合. 大家都知道操作系统是以文件为单位来对数据进行管理的.

异步IO一定更好吗?

- Wolf - CNode社区
在长林的文章《nodejs异步IO的实现》中提到,NodeJS通过libeio来实现IO操作的异步化,而libeio采用多线程的方式来模拟异步操作. 这里我需要强调一个观点,异步IO虽然是NodeJS一个非常重要的特点,但异步IO并不总是最好的,其他语言也一样. 在我的磁盘上有2个文件,我希望在一个程序里读取这2个文件,每次输出一个字符.

linux AIO (异步IO) 那点事儿

- zffl - CNode社区
这时候进程至少会阻塞10次,而这可能会导致其他的上千个用户请求得不到处理,这当然是不能接受的.. Linux AIO 早就被提上议程,目前比较知名的有 Glibc 的 AIO   与 Kernel Native AIO. 我们用Glibc 的AIO 做个小实验,写一个简单的程序:异步方式读取一个文件,并注册异步回调函数:.

MySQL数据库的IO操作

- - haohtml's blog
         淘宝丁奇分享的PPT:MySQL数据库的IO操作,详细分享了四块的内容,并且告诉大家如何调整MySQL数据库IO操作相关的参数,给出了详细的选择策略,现替其整理成文章分享与此. 4.影响io行为的一些参数和选择策略. 一个简单的查询 select * from t where id>=(  select id from t where k1=100 limit 100000,1) limit 2;.

定位IO瓶颈的一些方法

- - Linux - 操作系统 - ITeye博客
IO瓶颈往往是我们可能会忽略的地方(我们常会看top、free、netstat等等,但经常会忽略IO的负载情况),今天给大家详细分享一下如何确认一台服务器的IO负载是否到达了瓶颈,以及可能优化、定位的点. 先来看一台典型的IO密集型服务器的cpu统计图:. 可以看到,CPU总使用率不高,平均1.3%,max到5.6%,虽然大部分都耗在了iowait上,但才百分之五左右,应该还没到瓶颈吧.