通过 unix socket 与 ab 和 wrk 进行基准测试 PHP

Benchmarking PHP through unix socket vs tcp with ab and wrk

通过 unix 套接字对常规 PHP 5.6 进行基准测试时,结果比 tcp 端口好很多数量级。

当我运行这样的命令时:

$ ab -k -n 10000 -c 1000 http://127.0.0.1/api/user/1

我平均每秒收到 3272 个请求。

但是使用 tcp 端口而不是 unix 套接字我每秒得到 6.5 个请求。

有 wrk

$ wrk -t1 -c1000 -d5s http://127.0.0.1:80/api/user/1

在 unix 套接字上:每秒 6500 个请求

在 tcp 端口上:每秒 300 个请求

当我得到这些结果时,我应该如何使用这些基准来了解我的服务器和代码如何处理负载?

我应该信任 tcp 端口还是 unix 套接字?

您如何在示例中使用 Unix 套接字? -k选项是http keep alive。

Unix 套接字用于进程间通信,所以我几乎可以肯定,用于访问网络服务器的主要访问方法是通过 tcp。

这确实是在测试您的代码和网络服务器的效率。如果您最关心代码的效率,您还应该考虑检查 xdebug 输出。

您可以相信 abwrk 号码。

因此您应该在生产环境中使用 Unix 套接字:

  1. Unix 域套接字使 nginx 与 php-fpm 通信更快,并且使用更少的资源,因为 TCP 作为协议在 Unix 套接字上有开销,即使在环回上也是如此。你的数字证明了这一点。

  2. Unix 域套接字不可路由,因此无法从外部访问它们,因此通常认为它们在本地通信中比 TCP 更安全。禁用防火墙可能允许外部进程直接访问 php-fpm,而使用 Unix 套接字这是不可能的,但根据定义它们是本地的。

当然,主要的瓶颈将是客户端和 nginx 之间的通信,使用 HTTP/TCP,但至少你可以确信你的服务器内的一切都尽可能好,通过使用 Unix 套接字php-fpm.