原来在树莓派上部署的 nginx+php 跑 dokuwiki ,反应迅速,后来在一台 x86 上用 docker 重新打包了 php ,发现 php 性能下降很严重。
搜索了一下发现 docker 的 php 默认是没开 Opcache 的,打开之后 docker php 的性能确实有明显改善,但是仍然达不到树莓派上 php 的迅速。
所以想问一下除了 Opcache 之外还有其它提升 php 性能的扩展吗?
1
dilu 2023-01-28 11:58:36 +08:00 2
Opcache 是缓存了生成中间代码的步骤,所以会快一点
别的也有很多优化手段,例如用 apcu 组件可以把数据缓存在本地,但是需要代码支持 还有 sealog ,高性能的打日志的组件 还有知名的 swoole 等等 但是很明显,这些都需要程序本身支持 完全不需要侵入代码的性能扩展,就 Opcache 了 另外,你树莓派上的 php 速度快,是正常的,因为 docker 本身的 io 上有一定的损耗。并且两个环境的配置参数都不一样,也会影响到一定的性能。 |
2
litguy 2023-01-28 12:54:18 +08:00
感觉是 docker 的 io 性能导致的,你可以把程序在物理环境跑个看看
|
3
f1ynnv2 OP @dilu 谢谢,我搜了一下,有的说官方的 php 镜像可能是因为默认配置的关系,性能不行,都是建议自己定制镜像。我也来试试。 树莓派上 dokuwiki 每个 php 页面的响应都在 100ms 以内,换 docker 之后居然要 900ms, 开了 Opcache 之后也还要 400~600ms 。这差距有点大。
|
5
Twnysta 2023-01-28 16:33:55 +08:00
你应该配置下 php-fpm 的子线程数量
|
6
Twnysta 2023-01-28 16:35:51 +08:00
docker-compose 应该 fpm 一个 pod ,nginx 一个 pod ,代码一个 pod ,fpm 跟 php 的配置都要手工配置挂载进去
|
7
f1ynnv2 OP @Twnysta 现在就是 fpm 、nginx 各一个独立的容器,不过代码作为一个 pod 是啥意思?我现在就是把代码同时挂载到 nginx 和 php-fpm 的容器里。
试着修改了一下 php-fpm 的线程数据,似乎变化不大。不过也说的通,dokuwiki 也没啥大并发访问,就我一个人用,主要是看单个页面的响应时间。 另外刚刚试了一下,自己基于 ubuntu18.04 做了一个 php 的镜像,折腾半天最后每个页面响应也是 400~600ms 。 这样看来自己做的 php 镜像,默认参数情况下和官方的也没什么区别,估计得仔细研究下配置看看怎么优化性能。 |
8
dusu 2023-01-28 21:14:30 +08:00 via iPhone
程序没必要打进 docker 里
不要用目录挂载 挂 volume 性能就会好很多 |
9
neutrino 2023-01-29 08:31:16 +08:00 via Android
x86 上的 docker 和 x86 上的非 docker 比呢
|
10
klgd 2023-01-29 09:12:50 +08:00
docker 性能影响这么大吗?
|
11
Twnysta 2023-01-29 10:50:47 +08:00
@f1ynnv2 就是代码挂 volume ,opcache 你看下把时间戳更新给关了,php 版本能最高最好,8.1+ > 7.4 >7.2
|
12
f1ynnv2 OP |
13
f1ynnv2 OP 一年后回来补充一下,之前是在 macOS 上用的 docker desktop ,后来才发现这东西不仅经常出问题,性能也很渣。换了 orbstack 后基本没出啥问题了,而且性能也提升明显。orbstack 下的 php 性能至少和树莓派的差不多了。
|