Products
GG网络技术分享 2025-03-18 16:17 0
PHP语法使用的不恰当。
使用PHP语言做了它不擅长做的事。
用PHP语言连接的服务不给力。
PHP自身的短板。
我也不知道的问题。
PHP性能问题,占用整个项目的整体性能30%-40%之间。
PHP语言级的性能优化。
PHP周边问题的性能分析。比如,服务器环境,硬件配置,数据库配置。
PHP语言自身分析,优化。底层C的分析。
2、3、4是有简单到复杂的过程。
./ab -n1000 -c100 http://www.baidu.com/
-n请求数 总共发起1000次请求
-c并发数 一次的并发量是100
url 目标压测地址
性能优化之前使用ab
性能优化之后使用ab
对比吞吐量和处理耗时
ab测试主要关注系统吞吐量 和 服务器处理时间这两个点。
少些代码,多用PHP自身能力。
自写代码冗余比较多,可读性不佳,并且性能差。
php代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大。
多使用PHP内置变量、常量、函数。
PHP内置函数的性能优劣。
尽量少用魔法函数(为了给PHP程序员省事,PHP语言为你做了很多)
产生额外开销的错误抑制符@
情况描述:PHP提供的错误抑制符@只是为了方便懒人。会增加额外开销。
vld PHP Opcode 查看扩展
PHP有内存回收机制保底,但也请小心使用内存。
可以利用unset()及时释放不使用的内存。
利用字符串处理函数,实现相同逻辑。
循环内的计算式将会被重复计算。
$str = \"hello world\";
for($i=0;$i<strlen($str);$i++){
//do something strlen 会计算多次。
}
PHP的语言特性决定了PHP不适合做大数据量运算。
php会将没有引号的键值当做常量,产生查找常量的开销。
1)linux服务器
2)硬盘是硬件
3)mysql是软件
4)apache
5)内存
PHP场景开销次序
读写磁盘
读写数据库
读写内存
读写网络数据
读写内存 << 读写数据库 < 读写磁盘 < 读写网络数据(其实是磁盘操作+网络延迟)
对方接口不确定因素。
网络稳定性。
设置超时时间,1、连接超时200ms,2、读超时800ms,3、写超时500ms
将串行请求并行化。使用 curl_multi_*();,使用swoole扩展。
使用Gzip即可。压缩后更快传输数据,但是会产生额外的CPU开销。
多次请求内容不变情况。
PHP是串行执行的。
前后任务没有强依赖关系,可以使用重叠时间窗口
xhprof 工具分析PHP性能。
https://www.jianshu.com/p/c420ebe6ce39
Opcode Cache:PHP扩展APC,APC缓存PHP编译后的代码。
Runtime优化:HHVM
Demand feedback