一.压力测试工具
Apache Benchmark(ab)是由Apache提供的压力测试软件.安装Apache服务器会自带该压测软件。
使用方法
./ab -n1000 -c100 http://www.baidu.com/
-n请求数 -c并发数 url目标压测地址
由于我服务器是nginx,所有还要单独安装下
安装yum -y install httpd-tools
下面是测试百度页面的并发请求结果
二.PHP语言级性能优化
php的执行流程:
php文件->扫描->zd引擎去理解->opcodes->执行->输出
php代码需要编辑解析为底层语言,自己写的代码可能冗余较多,性能较低.
可以使用time php xx.php测试执行时间
1.多比较内置函数的性能差异,比如isset,array_key_exists虽然实现的功能一样,但是isset性能比array_key_exists好。
2.尽量不使用php提的错误抑制符@,@的实际逻辑是在代码开始,结束后,增加Opcode,忽略保存,这样会产生额外的性能开销,同时也不方便我们及时发现错误。
3.尽量少用魔术函数,魔术函数虽然方便我们开发,但是性能不佳。
4.合理使用内存:php有内存回收机制保底,但也要小心使用内存,利用unset及时释放不要的内存。
5.尽量少使用正则表达式,正则表达式回溯开销较大,多使用php字符串处理函数。
6.避免在循环内做运算,循环内的计算将会被重复计算
代码案例:
$str = "hello word";
for($i=0;$i<strlen($str);$i++){}
strlen重复计算,产生额外开销
7.减少计算密集型业务,php底层需要编译为c,相比之下不适合用来做复杂计算。
8.务必使用带引号字符串做键值,PHP会将没有引号的键值当做常量,产生查找常量的开销
例如:$array[key];由于key没有加引号,php会先查找是否有key常量,没有查到在知道数组里面差,既存在安全隐患也增加性能开销。
三.PHP周边问题的性能优化
读写内存<读写数据库<读写磁盘<读写网络数据
1.减少文件类操作。
2.优化网络请求
2-1.设置超时时间(建议)
a)连接超时 200ms
b)读超时 800ms
c)写超时 500ms
2-2.讲串行请求并行化
a)使用curl_multi*(curl_mult 缺点虽然可以同时发起多个请求,但是依赖于最慢的那条请求,如果多个请求中其中一个请求比较耗时,会导致整个返回耗时。)
b)使用swoole扩展
3.使用memcache,redis等做数据缓存
4.使用php扩展代替原PHP代码的高频逻辑
5.php性能分析工具:xhprof(facebook开源性能分析工具)