【问题标题】:Benchmarking PHP through unix socket vs tcp with ab and wrk使用 ab 和 wrk 通过 unix socket vs tcp 对 PHP 进行基准测试
【发布时间】:2015-07-07 13:01:30
【问题描述】:

通过 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 套接字 1?

【问题讨论】:

    标签: php linux benchmarking


    【解决方案1】:

    您可以信任abwrk 号码。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我在测试 https ssl 时使用的 -k 选项,忘记从帖子中删除它。
      • 我使用unix socket for nginx与php-fpm通信
      • 我的回答仍然有效。如果您进行基准测试,您会关心最终用户将使用什么,即 tcp。如果你关心代码效率,你应该看看 xdebug
      • 对不起,但这个答案没有考虑到,正如亚历克斯所说,在 php 和 nginx 之间使用 unix 套接字。在这里,nginx 的速度更快,因为 unix 套接字比环回上的 tcp 更快。
      猜你喜欢
      • 2020-07-04
      • 2014-09-26
      • 2014-04-24
      • 2011-01-21
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2012-11-29
      • 2016-01-28
      相关资源
      最近更新 更多