(1)memory_get_usage可以分析内存占用空间
我们在实际编码中,要想实现对内存的查看和操作,许多程序员们第一个想到的就是PHP memory_get_usage()这个PHP脚本内存函数。下面是PHP memory_get_usage()使用示例:<?php echo memory_get_usage(), '<br />'; // 313864 $tmp = str_repeat('http://www.baidu.com', 4000); echo memory_get_usage(), '<br />'; // 406048 unset($tmp); echo memory_get_usage(); // 313952 ?>上面的程序后面的注释代表了它们的输出(单位为 byte(s)),也就是当时 PHP 脚本使用的内存(不含 memory_get_usage() 函数本身占用的内存)由上面的例子可以看出,要想减少内存的占用,可以使用 PHP unset() 函数把不再需要使用的变量删除。类似的还有:PHP mysql_free_result() 函数,可以清空不再需要的查询数据库得到的结果集,这样也能得到更多可用内存。PHP memory_get_usage()还可以有个参数,$real_usage,其值为布尔值。默认为 FALSE,表示得到的内存使用量不包括该函数(PHP 内存管理器)占用的内存;当设置为 TRUE 时,得到的内存为不包括该函数(PHP 内存管理器)占用的内存。所以在实际编程中,可以用PHP memory_get_usage()比较各个方法占用内存的高低,来选择使用哪种占用内存小的方法。(2)用microtime函数就可以分析程序执行时间使用示例:<?php function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}$time_start = microtime_float();// Sleep for a whileusleep(2000000);$time_end = microtime_float();$time = $time_end - $time_start;echo "Did nothing in $time seconds\n";?>(3)SQL的效率可以使用打开慢查询查看日志分析打开MySQL慢查询
MySQL慢 查询记录日志对于跟踪PHP+MySQL体系下的MySQL负载调优问题很有用处,比如安装了很多Discuz!插件的用户,这样可以大概排查出那些插件 有代码问题。其实启用MySQL的慢查询日志很简单,只需要在MySQL的配置文件里添加log-slow-queries和 long_query_time两个参数即可。今天有个朋友问我,就顺带记录上来。
Windows下开启MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上log-slow-queries = F:\MySQL\log\mysqlslowquery.loglong_query_time = 2
Linux下启用MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上log-slow-queries=/data/mysqldata/slowquery.loglong_query_time=2注意
log-slow-queries = F:\MySQL\log\mysqlslowquery.log为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限,一般都将这个目录设置为MySQL的数据存放目录;long_query_time=2中的2表示查询超过两秒才记录; 在my.cnf或者my.ini中添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询。比如:log-slow-queries=/data/mysqldata/slowquery.loglong_query_time=2log-queries-not-using-indexes
附:你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?
1.脚本执行时间,启用xdebug,使用WinCacheGrind分析。 2.数据库查询,mysql使用EXPLAIN分析查询,启用slow query log记录慢查询。 3, xdebug统计函数执行次数和具体时间进行分析。 4, 在线系统用strace跟踪相关进程的具体系统调用。