zoukankan      html  css  js  c++  java
  • PHP压力测试使用apache的ab工具和Linux的time命令

      ab工具是apache自带的一个压力测试工具,可以在apache的安装路径下的bin目录下找到,我的环境中是在/usr/local/apache/bin/目录下;

      ab 压测主要使用两个参数:

        -n 请求数       

        -c 并发数      

      对于测试的结果,主要关注两个点:

        Requests per second  服务器每秒接收的请求,该值越大越好

        Time per request       服务器处理完每个请求所花的时间,该值越小越好

      使用格式:

        /usr/local/bin/ab  -n1000  -c10  www.demo.com/index.php

        /usr/local/bin/ab  -n1000  -c10  1.2.3.123:80/index.php

      如果我们需要测试本地某个php脚本的运行情况,比如说执行所花的时间,可以在脚本的开始处获取一下时间戳,然后在脚本结束的地方再获取一下时间戳,通过这两个时间戳的相减,来获得脚本大概的运行耗时(因为获取时间戳也耗时),比如说下面的例子:

    <?php
        function current_time(){
            list($usec,$sec) = explode( " ", microtime() );
            return ((float)$usec + (float)$sec);
        }
    
        $start = current_time();
    
        $i = 0;
        $arr = array();
        while( $i < 100000 ){
            $arr[] = rand(10000,200000);
            $i++;
        }
    
        $end = current_time();
    
        //echo $end - $start."s";
        $spend = number_format($end - $start,3)*1000;
    
    echo "spend ".$spend."ms " ?>

      使用Linux命令行运行该脚本:

    [root@localhost wwwroot]# php index.php
    spend 44ms
    [root@localhost wwwroot]# php index.php
    spend 40ms
    [root@localhost wwwroot]# php index.php
    spend 37ms
    [root@localhost wwwroot]# php index.php
    spend 41ms
    [root@localhost wwwroot]# php index.php
    spend 41ms
    

      因为每次花费的时间不同,可以取平均值为参考。

      上面的做法地确能达到检测一个php脚本运行的时间及效率,但是有点麻烦,每次都要显式地取时间戳,然后相减。所以推荐使用Linux的time命令,可以用来统计一个命令所花费的时间,比如下例:

    <?php
        $i = 0;
        $arr = array();
        while( $i < 100000 ){
            $arr[] = rand(10000,200000);
            $i++;
        }
    ?>
    

      使用命令行来运行脚本:

    [root@localhost wwwroot]# time php index.php
    
    real	0m0.070s
    user	0m0.050s
    sys	0m0.020s
    [root@localhost wwwroot]# time php index.php
    
    real	0m0.062s
    user	0m0.046s
    sys	0m0.016s
    

      在上面运行的结果中,我们只关注user的那一行时间,关于这三个时间的解释,可以参考下面的解释:

    • real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
    • user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
    • sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。
  • 相关阅读:
    为什么 ObjectiveC 很难
    PHP开发Windows桌面应用程序实例
    windows下借助InstantRails环境搭建redmine
    php,python,ruby,perl的优缺点?
    Ruby在windows上的eclipse开发环境搭建
    Python的web框架很多,比如Django,webpy等,但是哪一种综合实力最强呢?
    使用JRockit作为Eclipse的Java VM
    Fat Jar Eclipse PlugIn Tutorial
    ECLIPSE插件集合
    Java反编译利器Jad, Jode, Java Decompiler等及其IDE插件
  • 原文地址:https://www.cnblogs.com/-beyond/p/8455933.html
Copyright © 2011-2022 走看看