PHP头条
热点:

3、内存使用信息

通过侦测脚本的内存使用情况,有利于代码的优化。PHP提供了一个垃圾收集器和一个非常复杂的内存管理器。脚本执行时所使用的内存量,有升有跌。为了得到当前的内存使用情况,我们可以使用memory_get_usage()函数。如果需要获得任意时间点的最高内存使用量,则可以使用memory_limit()函数。

  1. 以下为引用的内容:  
  2.  
  3. echo“Initial:“.memory_get_usage().”bytes\n”;  
  4. /*prints  
  5. Initial:361400bytes  
  6. */  
  7.  
  8. //let’suseupsomememory  
  9. for($i=0;$i<100000;$i++){  
  10. $array[]=md5($i);  
  11. }  
  12.  
  13. //let'sremovehalfofthearray  
  14. for($i=0;$i<100000;$i++){  
  15. unset($array[$i]);  
  16. }  
  17.  
  18. echo"Final:".memory_get_usage()."bytes\n";  
  19. /*prints  
  20. Final:885912bytes  
  21. */  
  22.  
  23. echo"Peak:".memory_get_peak_usage()."bytes\n";  
  24. /*prints  
  25. Peak:13687072bytes  
  26. */ 

4、CPU使用信息

为此,我们要利用getrusage()函数。请记住这个函数不适用于Windows平台。

  1. 以下为引用的内容:  
  2.  
  3. print_r(getrusage());  
  4. /*prints  
  5. Array  
  6. (  
  7. [ru_oublock]=>0  
  8. [ru_inblock]=>0  
  9. [ru_msgsnd]=>2  
  10. [ru_msgrcv]=>3  
  11. [ru_maxrss]=>12692  
  12. [ru_ixrss]=>764  
  13. [ru_idrss]=>3864  
  14. [ru_minflt]=>94  
  15. [ru_majflt]=>0  
  16. [ru_nsignals]=>1  
  17. [ru_nvcsw]=>67  
  18. [ru_nivcsw]=>4  
  19. [ru_nswap]=>0  
  20. [ru_utime.tv_usec]=>0  
  21. [ru_utime.tv_sec]=>0  
  22. [ru_stime.tv_usec]=>6269  
  23. [ru_stime.tv_sec]=>0  

这可能看起来有点神秘,除非你已经有系统管理员权限。以下是每个值的具体说明你不需要记住这些):

  1. 以下为引用的内容:  
  2.  
  3. ru_oublock:blockoutputoperations  
  4. ru_inblock:blockinputoperations  
  5. ru_msgsnd:messagessent  
  6. ru_msgrcv:messagesreceived  
  7. ru_maxrss:maximumresidentsetsize  
  8. ru_ixrss:integralsharedmemorysize  
  9. ru_idrss:integralunshareddatasize  
  10. ru_minflt:pagereclaims  
  11. ru_majflt:pagefaults  
  12. ru_nsignals:signalsreceived  
  13. ru_nvcsw:voluntarycontextswitches  
  14. ru_nivcsw:involuntarycontextswitches  
  15. ru_nswap:swaps  
  16. ru_utime.tv_usec:usertimeused(microseconds)  
  17. ru_utime.tv_sec:usertimeused(seconds)  
  18. ru_stime.tv_usec:systemtimeused(microseconds)  
  19. ru_stime.tv_sec:systemtimeused(seconds) 

要知道脚本消耗多少CPU功率,我们需要看看‘usertime’和’systemtime’两个参数的值。秒和微秒部分默认是单独提供的。你可以除以100万微秒,并加上秒的参数值,得到一个十进制的总秒数。让我们来看一个例子:

  1. 以下为引用的内容:  
  2.  
  3. //sleepfor3seconds(non-busy)  
  4. sleep(3);  
  5.  
  6. $data=getrusage();  
  7. echo“Usertime:“.  
  8. ($data['ru_utime.tv_sec']+  
  9. $data['ru_utime.tv_usec']/1000000);  
  10. echo“Systemtime:“.  
  11. ($data['ru_stime.tv_sec']+  
  12. $data['ru_stime.tv_usec']/1000000);  
  13.  
  14. /*prints  
  15. Usertime:0.011552  
  16. Systemtime:0  
  17. */ 

尽管脚本运行用了大约3秒钟,CPU使用率却非常非常低。因为在睡眠运行的过程中,该脚本实际上不消耗CPU资源。还有许多其他的任务,可能需要一段时间,但不占用类似等待磁盘操作等CPU时间。因此正如你所看到的,CPU使用率和运行时间的实际长度并不总是相同的。下面是一个例子:

  1. 以下为引用的内容:  
  2.  
  3. //loop10milliontimes(busy)  
  4. for($i=0;$i<10000000;$i++){  
  5.  
  6. }  
  7.  
  8. $data=getrusage();  
  9. echo"Usertime:".  
  10. ($data['ru_utime.tv_sec']+  
  11. $data['ru_utime.tv_usec']/1000000);  
  12. echo"Systemtime:".  
  13. ($data['ru_stime.tv_sec']+  
  14. $data['ru_stime.tv_usec']/1000000);  
  15.  
  16. /*prints  
  17. Usertime:1.424592  
  18. Systemtime:0.004204  
  19. */ 

这花了大约1.4秒的CPU时间,但几乎都是用户时间,因为没有系统调用。系统时间是指花费在执行程序的系统调用时的CPU开销。下面是一个例子:

  1. 以下为引用的内容:  
  2.  
  3. $start=microtime(true);  
  4. //keepcallingmicrotimeforabout3seconds  
  5. while(microtime(true)-$start<3){  
  6.  
  7. }  
  8.  
  9. $data=getrusage();  
  10. echo"Usertime:".  
  11. ($data['ru_utime.tv_sec']+  
  12. $data['ru_utime.tv_usec']/1000000);  
  13. echo"Systemtime:".  
  14. ($data['ru_stime.tv_sec']+  
  15. $data['ru_stime.tv_usec']/1000000);  
  16.  
  17. /*prints  
  18. Usertime:1.088171  
  19. Systemtime:1.675315  
  20. */ 

现在我们有相当多的系统时间占用。这是因为脚本多次调用microtime()函数,该函数需要向操作系统发出请求,以获取所需时间。你也可能会注意到运行时间加起来不到3秒。这是因为有可能在服务器上同时存在其他进程,并且脚本没有100%使用CPU的整个3秒持续时间。


www.phpzy.comtrue/php/10568.htmlTechArticle3、内存使用信息 通过侦测脚本的内存使用情况,有利于代码的优化。PHP提供了一个垃圾收集器和一个非常复杂的内存管理器。脚本执行时所使用的内存量...

相关文章

相关频道:

PHP之友评论

今天推荐