【问题标题】:Slow response times: Laravel 5.2 in Docker container响应时间慢:Docker 容器中的 Laravel 5.2
【发布时间】:2016-02-10 01:15:12
【问题描述】:

在 PHP-7 docker 容器中运行 Laravel 5.2 时,我在 300ms - 400ms 中获得响应时间。

虽然我只是在同一个容器上回显 phpinfo(),但响应时间是 15ms - 50ms,这非常慢

【问题讨论】:

    标签: php macos laravel docker boot2docker


    【解决方案1】:

    为了其他通过 Google 偶然发现这个问题的人的利益,Docker for Mac 现在支持 user guided caching 用于卷。

    不同的应用程序需要不同级别的一致性。满的 一致性有时是必不可少的,并且仍然是默认设置。然而, 支持临时不一致是可接受价格的情况 为了提高性能,Docker 17.04 CE Edge 包括新的 -v 选项的标志:

    • 一致:完全一致。容器运行时和主机 始终保持对底座的相同视图。这是 默认,如上所述。
    • cached:挂载主机的视图是 权威性。在主机上进行更新之前可能会有延迟 在容器中可见。

    为我的 Laravel 应用启用缓存模式就像更新 docker-compose.yml 中的卷引用一样简单。

    之前:

        volumes:
            - ./:/var/www
    

    之后:

        volumes:
            - ./:/var/www:cached
    

    进行了更改并重新创建了我的容器后,我发现性能与我对非虚拟化本地服务器的期望更加接近。以前一个简单的请求需要 1.3 秒才能完成,现在已经下降到 0.35 秒。尽管警告说主机更改可能不会立即在容器中可见,但我尚未注意到任何传播问题。

    还有一个关于 Docker Mac FS performance 的持续 GH 问题,其中包含一些有用的注释。

    【讨论】:

    • 可以确认这一点。 没有 :cached 响应时间约为1.5 秒,有 :cached 约为0.4 秒。感谢您的提示!
    【解决方案2】:

    好的,问题解决了。

    在使用带有 VirtualBox 驱动程序的 Docker 1.10 和安装到主机系统(即 Boot2Docker VM 和 OSX)的卷的本地开发环境中,性能非常糟糕,如上所述 300ms - 600ms。

    使用相同的配置而不安装卷20ms - 30ms 响应时间。我的假设是,由于 Laravel 在每次请求时都会加载大量文件,因此具有密集的磁盘 I/O,这会受到 VirtualBox 在主机和 VM 之间共享文件夹的方式的影响。

    问题不是 Docker 或 Laravel,而是 VirtualBox VM 问题。

    更新:

    比较 docker 中的不同环境

    注意:以下不包含artisan optimize --force或artisan config:cache

    • HHVM 13ms - 31ms(TCP 端口 9000)
    • HHVM 12ms - 22ms(Unix 套接字)
    • PHP-7 FPM 42ms - 73ms(TCP 端口 9000)
    • PHP-7 FPM 38ms - 55ms(Unix 套接字)

    哇...!

    HHVM with artisan optimisations + unix sockets: 8ms - 12ms


    PHP-7 FPM 带有工匠优化 + unix 套接字:38ms - 42ms

    看看具有优化和 unix 套接字的 HHVM。速度非常快。

    【讨论】:

    • VirtualBox on OSX 对于挂载的主机文件夹非常慢,除非你为它们使用 NFS。不知道为什么,但当我明白这一点时,生活变得更好了。
    • 你是如何设置的?使用 Boot2Docker?
    • 我使用 Vagrant + Virtualbox,而不是 Docker。我的 Vagrant 文件中的 config.vm.synced_folder ".", "/srv/web", type: "nfs", :mount_options => ['nolock,vers=3,udp,noatime,actimeo=1'] 起到了作用,但我不知道 Boot2Docker 用于将数据传递给 Virtualbox。
    • 我不能不使用 docker……它太强大了。我可以忍受发展中的缓慢反应
    • Vagrant / homestead 比 docker 太马虎了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2021-06-25
    • 1970-01-01
    • 2019-05-15
    • 2020-11-12
    • 2019-02-16
    • 2014-08-23
    相关资源
    最近更新 更多