针对高延迟(?)用户的长PHP执行
我最近在访问者日志中添加了PHP执行时间,以发现代码或数据库中可能存在的问题。时间以脚本开始和结束之间的microtime()差来度量 平均执行时间(包括我自己对站点调试版本的测试)为2-15毫秒。然后我随机看到一些用户执行+300ms。这些可能是由负载峰值、未缓存的数据库查询或文件系统访问引起的 我不明白的是,用户偶尔会出现,执行时间为5-30秒(!)。根据我的测试,这些数据出现在看似随机的页面上,访问日志中没有出现任何请求峰值,代码或数据库查询中也没有任何可能导致性能降低的内容。90%的请求来自中国,似乎是某种爬虫或机器人针对高延迟(?)用户的长PHP执行,php,apache,Php,Apache,我最近在访问者日志中添加了PHP执行时间,以发现代码或数据库中可能存在的问题。时间以脚本开始和结束之间的microtime()差来度量 平均执行时间(包括我自己对站点调试版本的测试)为2-15毫秒。然后我随机看到一些用户执行+300ms。这些可能是由负载峰值、未缓存的数据库查询或文件系统访问引起的 我不明白的是,用户偶尔会出现,执行时间为5-30秒(!)。根据我的测试,这些数据出现在看似随机的页面上,访问日志中没有出现任何请求峰值,代码或数据库查询中也没有任何可能导致性能降低的内容。90%的请求
那么:延迟会影响PHP脚本的执行时间吗?当上一个缓冲区发送给用户时,PHP执行是否停止 我发现另一条线索似乎有类似的问题,但没有答案: 编辑:
我最终将PHP输出缓冲从4k增加到128k字节。现在,典型的执行时间下降到了2-6毫秒,不再有随机的、荒谬的长时间计时。我认为延迟会影响PHP的执行时间,具体取决于服务器配置 此外,还有一些函数,如
gethostsbyaddr
,可以降低PHP脚本的速度
也许您可以使用XDebug生成执行跟踪,并查看脚本执行的“时间线”。“那么:延迟会影响PHP脚本的执行时间吗?在将上一个缓冲区发送给用户时,PHP执行是否停止?”——以防止使用nginx作为反向代理。所以php+apache工作得很快,而nginx的工作速度很慢。难道没有办法让apache本身充当php的缓冲区吗?我真的不介意apache进程的寿命是否更长,唯一的问题是延迟的php脚本会打乱页面执行时间统计数据……是的,我认为“output_buffering”值可能与此相关。我认为只要PHP刷新缓冲区,就会出现延迟。不幸的是,增加输出缓冲实际上会使总体性能变差,因为在生成整个页面之前不会向浏览器发送任何内容。