性能测试之网络篇(windows)

  监测对象:Network Interface

  网络分析是一件技术含量很高的工作,在一般的组织中都有专门的网络管理人员进行网络分析,对测试工程师来说,如果怀疑网络是系统的瓶颈,可以要求网络仍有来写真进行网络方面的检测。

  Network InterfaceBytes Total/sec为发送和接收字节的速率(包括帧字符在内)。可以通过该计数器的值判断网络连接速度是否是瓶颈,具体操作方法是用该计数器的值与目前的网络带宽进行比较。

  Byte Total/sec

  表示网络中接受和发送字节的速度,可以用该计数器来判断网络是否存在瓶颈(参考值:该计数器和网络带宽相除,<50%)

  性能测试之进程篇(windows)

  查看进程的%Processor Time值

  每个进程的%Processor Time反映进程所消耗的处理器时间。用不同进程所消耗的处理器时间进行对比,可以很容易的看出具体是哪个进程在性能测试过程中消耗了多的处理器时间,从而可以据此针对应用进行优化。

  查看每个进程产生的页面失效

  可以用每个进程产生的页面失效(通过ProcessPage Failures/sec计数器获得)和系统的页面失效(可通过MemoryPage Failures/sec计数器获得)的比值,来判断哪个进程产生了多的失效页面,这个进程要么是需要大量内存的进程,要么是非常活跃的进程,可以对其进行中的分析。

  了解进程的ProcessPrivate Bytes

  ProcessPrivate Bytes是指进程所分配的无法与其他进程共享的当前字节数量。该计数器主要用拉判断进程在性能测试过程中有无内存泄漏。

  例如:对于一个IIS之上的web应用,我们可以重点监控inetinfo进程的Private Bytes,如果在性能测试过程中,该进程的Private Bytes计数器值不断增加,或是性能测试停止后一段时间,该进程的Private Bytes仍然持续在高水平,则说明应用存在内存泄漏。

  (备注:进程分析方法用到的计数器主要有:Process\%Processor Time、Page Failures/sec、Page Failures/sec、Private Bytes)

  相关链接:

  ① 内存映射文件机制

  内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件,像操作进程空间里的地址一样了,省去了读和写I/O的时间。

  比如使用memcpy等内存操作的函数。这种方法能够很好的应用在需要频繁处理一个文件或者是一个大文件的场合,这种方式处理IO效率比普通IO效率要高。

  利用内存映射文件您可以认为操作系统已经为您把文件全部装入了内存,然后您只要移动文件指针进行读写即可了。这样您甚至不需要调用那些分配、释放内存块和文件输入/输出的API函数,另外您可以把这用作不同的进程之间共享数据的一种办法。运用内存映射文件实际上没有涉及实际的文件操作,它更象为每个进程保留一个看得见的内存空间。至于把内存映射文件当成进程间共享数据的办法来用,则要加倍小心,因为您不得不处理数据的同步问题,否则您的应用程序也许 很可能得到过时或错误的数据甚至崩溃。

  内存映射文件本身还是有一些局限性的,譬如一旦您生成了一个内存映射文件,那么您在那个会话期间是不能够改变它的大小的。所以内存映射文件对于只读文件和不会影响其大小的文件操作是非常有用的。当然这并不意味着对于会引起改变其大小的文件操作一定不能用内存影射文件的 方法,您可以事先估计操作后的文件的可能大小,然后生成这么大小一块的内存映射文件,然后文件的长度可以增长到这么一个大小。我们的解释够多的了,接下来我们看看实现的细节:

  调用CreateFile打开您想要映射的文件。

  调用CreateFileMapping,其中要求传入先前CreateFile返回的句柄,该函数生成一个建立在CreateFile函数创建的文件对象基础上的内存映射对象。

  调用MapViewOfFile函数映射整个文件的一个区域或者整个文件到内存。该函数返回指向映射到内存的第一个字节的指针。

  用该指针来读写文件。

  调用UnmapViewOfFile来解除文件映射。

  调用CloseHandle来关闭内存映射文件。注意必须传入内存映射文件的句柄。

  调用CloseHandle来关闭文件。注意必须传入由CreateFile创建的文件的句柄。