目录
性能问题浅析
产生性能问题的原因
性能问题解决方案
压力测试工具简介 Apache Benchmark(ab)
PHP 语言级性能优化
性能问题浅析
PHP 的性能问题在整个项目的性能问题中占比 30%-40%, 不到 50%. 优化项目不局限于优化 PHP.
产生性能问题的原因
PHP 语法使用不当
使用 PHP 语言做了不擅长的事情
使用 PHP 语言连接的服务不给力
PHP 自身的短板, PHP 需要解析为底层语言: PHP --> C 语言 --> 汇编语言, 每次请求都需要处理一遍.
具体问题具体分析
知识点
- graph LR
- A(PHP 文件)-->|Scanner| B(Exprs)
- B-->|Parser| C(Opcodes)
- C-->|Exec| D(Output)
PHP 文件经 Zend 引擎逐行扫描, 保存成 Zend 引擎能识别的语法 Exprs. 然后经过解析生成 Opcodes, 再执行 Opcode, 产生结果.
PHP 缓存的对象是 Opcode
性能问题解决方案
PHP 语言级的优化 (易)
PHP 周边的性能优化 (数据库, 服务器, 缓存等)(难)
PHP 语言自身分析, 优化 (底层)(较难)
压力测试工具简介 Apache Benchmark(ab)
简介: ab 是由 Apache 提供的压力测试软件. 安装 Apache 时服务器会自带该压测软件.
使用方法:
./ab -n 1000 -c 100 http://www.baidu.com/ 注意如果不是请求某个具体文件, 则必须添加最后的斜杠
-n 请求数
-c 并发数
URL 目标压测地址
安装方法: 在安装 Apache 时已经附带安装
返回结果
- // 服务器信息
- Server Software: BWS/1.1
- Server Hostname: www.baidu.com
- Server Port: 80
- // 文档信息
- Document Path: /
- Document Length: 111326 bytes
- // 连接信息
- Concurrency Level: 10
- Time taken for tests: 0.333 seconds // 整个测试持续时间
- Complete requests: 100 // 完成的请求数量
- Failed requests: 97 // 模拟请求中失败的请求数量
- (Connect: 0, Receive: 0, Length: 97, Exceptions: 0)
- Total transferred: 11240793 bytes // 模拟请求中传输的总数据量, 包含标头数据
- html transferred: 11145902 bytes // 模拟请求中正文数据总量
- Requests per second: 300.25 [#/sec] (mean) // 每秒支持的请求总数
- Time per request: 33.306 [ms] (mean) // 满足一个请求花费的总时间
- Time per request: 3.331 [ms] (mean, across all concurrent requests)
- Transfer rate: 32959.33 [Kbytes/sec] received //m 每秒接收到的字节总数
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 1 1 0.4 1 2
- Processing: 18 30 6.7 26 44
- Waiting: 9 13 3.8 11 26
- Total: 19 31 6.7 28 45
- Percentage of the requests served within a certain time (ms)
- 50% 28
- 66% 31
- 75% 36
- 80% 40
- 90% 42
- 95% 43
- 98% 44
- 99% 45
- 100% 45 (longest request)
在优化中 Requests per second 的值要尽可能的大, Time per request 的值要尽可能小.
PHP 语言级性能优化
尽量使用 PHP 自身的内置变量, 常量, 函数
自写代码冗余较多, 可读性不强, 并且降低性能.
来源: http://www.bubuko.com/infodetail-2783650.html