PHP 有哪些提高性能的扩展?

2023-01-28 11:54:40 +08:00
 f1ynnv2

原来在树莓派上部署的 nginx+php 跑 dokuwiki ,反应迅速,后来在一台 x86 上用 docker 重新打包了 php ,发现 php 性能下降很严重。

搜索了一下发现 docker 的 php 默认是没开 Opcache 的,打开之后 docker php 的性能确实有明显改善,但是仍然达不到树莓派上 php 的迅速。

所以想问一下除了 Opcache 之外还有其它提升 php 性能的扩展吗?

2707 次点击
所在节点    PHP
13 条回复
dilu
2023-01-28 11:58:36 +08:00
Opcache 是缓存了生成中间代码的步骤,所以会快一点

别的也有很多优化手段,例如用 apcu 组件可以把数据缓存在本地,但是需要代码支持

还有 sealog ,高性能的打日志的组件

还有知名的 swoole 等等

但是很明显,这些都需要程序本身支持

完全不需要侵入代码的性能扩展,就 Opcache 了

另外,你树莓派上的 php 速度快,是正常的,因为 docker 本身的 io 上有一定的损耗。并且两个环境的配置参数都不一样,也会影响到一定的性能。
litguy
2023-01-28 12:54:18 +08:00
感觉是 docker 的 io 性能导致的,你可以把程序在物理环境跑个看看
f1ynnv2
2023-01-28 15:16:41 +08:00
@dilu 谢谢,我搜了一下,有的说官方的 php 镜像可能是因为默认配置的关系,性能不行,都是建议自己定制镜像。我也来试试。 树莓派上 dokuwiki 每个 php 页面的响应都在 100ms 以内,换 docker 之后居然要 900ms, 开了 Opcache 之后也还要 400~600ms 。这差距有点大。
f1ynnv2
2023-01-28 15:17:34 +08:00
@litguy 对,挂载的方式 IO 应该也有不小影响。我准备把 dokuwiki 都打包进镜像再比较一下。
Twnysta
2023-01-28 16:33:55 +08:00
你应该配置下 php-fpm 的子线程数量
Twnysta
2023-01-28 16:35:51 +08:00
docker-compose 应该 fpm 一个 pod ,nginx 一个 pod ,代码一个 pod ,fpm 跟 php 的配置都要手工配置挂载进去
f1ynnv2
2023-01-28 17:12:31 +08:00
@Twnysta 现在就是 fpm 、nginx 各一个独立的容器,不过代码作为一个 pod 是啥意思?我现在就是把代码同时挂载到 nginx 和 php-fpm 的容器里。
试着修改了一下 php-fpm 的线程数据,似乎变化不大。不过也说的通,dokuwiki 也没啥大并发访问,就我一个人用,主要是看单个页面的响应时间。

另外刚刚试了一下,自己基于 ubuntu18.04 做了一个 php 的镜像,折腾半天最后每个页面响应也是 400~600ms 。 这样看来自己做的 php 镜像,默认参数情况下和官方的也没什么区别,估计得仔细研究下配置看看怎么优化性能。
dusu
2023-01-28 21:14:30 +08:00
程序没必要打进 docker 里
不要用目录挂载
挂 volume 性能就会好很多
neutrino
2023-01-29 08:31:16 +08:00
x86 上的 docker 和 x86 上的非 docker 比呢
klgd
2023-01-29 09:12:50 +08:00
docker 性能影响这么大吗?
Twnysta
2023-01-29 10:50:47 +08:00
@f1ynnv2 就是代码挂 volume ,opcache 你看下把时间戳更新给关了,php 版本能最高最好,8.1+ > 7.4 >7.2
f1ynnv2
2023-01-29 11:17:01 +08:00
@dusu 嗯,对现在就是 docker compose 挂的 volume

@Twnysta 好的,我来试试高版本的 php 。dokuwiki 积累了不少数据一直没升级,只能用 php7.3 以下的,干脆借这机会更新到最新版本。
f1ynnv2
89 天前
一年后回来补充一下,之前是在 macOS 上用的 docker desktop ,后来才发现这东西不仅经常出问题,性能也很渣。换了 orbstack 后基本没出啥问题了,而且性能也提升明显。orbstack 下的 php 性能至少和树莓派的差不多了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/911025

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX