有一个不起眼的。已经在这家好几个星期了。这是我们正在做的事情:
- Silverstripe 3.1 升级 -> 3.7
- 平台升级。PHP 5.6 -> 7.4,Postgres 9.5 -> 13
- 旧系统运行 mod_php,新系统运行 PHP_FPM
- 并行托管系统正在运行。旧的和新的。两者拥有相同的资源。
- 性能测试在两个系统上运行以进行旧 -> 新比较。
- 两个平台都包含两个 App 节点和一个 DB 节点
大多数测试都很棒。PHP 7.4 显然会影响旧系统。但一项测试是 Apache Bench 刚刚进入主页。这表明新系统出现了相当严重的退化。深入研究这一点,我们为 Apache Bench 创建了一系列测试文件来隔离特定的东西——静态 HTML、原始 PHP、PHP +原始 pg_ 命令和查询。
除了后者之外,所有这些都颠覆了旧系统。数据库交互。因此,进一步深入研究,我们创建了一个新的目标文件,它简单地执行 pg_connect() 并立即关闭它,然后使用 Apache Bench 进行处理。结果与查询测试脚本相同。暗示赤字在 pg_connect() 的作用下。数据库连接。
显然,这个问题有很多变数。而且我不愿意在需要之前用一堆关于测试(和其他测试,如 pgbench)的细节来包装这个问题。我更希望偶然发现有人专门观察到 pg_connect() 的类似问题,并且甚至有最随机的想法来测试一个角度。
欢迎其他测试想法。我们现在正在尝试解决的一件事是如何从 pgbench 获取连接时间,以查看 Postgres 本身是否存在问题。我们的测试如下:
- Apache Bench 命中几个目标页面
- PGBench(显示新系统的性能优于旧系统)
- PHP测试
- 现在正在设置 jMeter
更新
我们在每个环境中的 Postgres 日志中进行了一些手动挖掘,看到接收/授权的日志条目对有些奇怪,如下所示:
2021-05-19 11:34:25.708 NZST,,,404734,"10.220.218.21:50560",60a44f01.62cfe,1,"",2021-05-19 11:34:25 NZST,,0,LOG,00000,"connection received: host=xx.xx.xx.xx port=50560",,,,,,,,,""
2021-05-19 11:34:25.908 NZST,"db_user","db_name",404734,"xx.xx.xx.xx:50560",60a44f01.62cfe,2,"authentication",2021-05-19 11:34:25 NZST,7/486524,0,LOG,00000,"connection authorized: user=db_user database=db_name",,,,,,,,,""
我在两个环境(旧的和新的)上捕获了一堆这样的对,并计算了收到的日志消息和身份验证日志消息之间的差距。
在 Old 上,平均值为 0.011 秒。在 New 上,平均值为 0.195 秒。除了差异之外,这没有任何意义,因为该环境的应用程序节点上的测试页面需要大约 0.02 秒才能完全完成。