【问题标题】:Docker with Apache/PHP/MySQL on Mac - Bad performanceMac 上带有 Apache/PHP/MySQL 的 Docker - 性能不佳
【发布时间】:2022-11-28 14:11:04
【问题描述】:

我目前正在使用 vagrant 操作的 VirtualBox 设置来开发我的 Web 服务。由于我想移动到新的 M1 Mac,我需要不幸地更改此设置。

我现在已经建立了一个 docker 环境,现在一切正常——除了性能。特别是在运行 PHPUnit 测试时,性能非常糟糕,实际上无法使用。一个简单地检查 sql 语句是否对 mysql 数据库有效的测试套件在 docker 设置上需要 31.44 秒,而在旧设置上它在 5 秒内完成。

在过去的几天里,我读了很多关于容器和主机之间文件共享问题的文章,到目前为止我已经尝试了一些东西,但实际上性能没有任何改变(甚至一点都让我感到奇怪) :

  • 使用 docker-sync
  • 将 mysql 存储更改为命名卷
  • 试图分配更多的 CPU/内存

但是经过 8 小时的尝试,我仍然看到这个测试套件的错误数字相同,它的范围在 28 到 38 秒之间,而不是 5 秒。

我也不确定究竟是什么导致设置缓慢 - 是数据库还是 PHP 本身?有人知道我如何才能更接近实际原因吗?

这是我的 docker-compose.yml:

version: "3"
services:
  mysql:
    container_name: "mysql"
    build: docker/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_USER=admin
      - MYSQL_PASSWORD=password
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/bitnami/mysql/data
      - ./docker/mysql/import:/import:delegated

  php:
    container_name: "php"
    build: docker/php
    volumes:
      - ../App:/app:delegated
      - ./docker/php/ini/php.ini:/opt/bitnami/php/etc/conf.d/php.ini:ro
    environment:
      - DATABASE_HOST=host.docker.internal
      - ENVIRONMENT=docker

  apache:
    container_name: "apache"
    image: bitnami/apache:2.4
    ports:
      - '80:8080'
      - '443:8443'
    depends_on:
      - php
    volumes:
      - ../App:/app:delegated
      - ./docker/apache/my_vhost.conf:/vhosts/my_vhost.conf:ro
      - ./docker/apache/certs:/certs
    environment:
      - DATABASE_HOST=host.docker.internal
      - ENVIRONMENT=docker

  # --- PhpMyAdmin latest
  # Acccess via http://127.0.0.1:81 or https://127.0.0.1:8143
  phpmyadmin:
    container_name: "phpmyadmin"
    image: bitnami/phpmyadmin:latest
    depends_on:
      - mysql
    ports:
      - '81:8080'
      - '8143:8443'
    environment:
      - DATABASE_HOST=host.docker.internal

volumes:
 mysql-data:
    driver: local

如果您能与我分享关于如何更接近这个 docker 设置如此缓慢的原因的所有想法,我将非常高兴。由于我们的整个测试套件现在运行一个多小时,这绝对是不行的,并且肯定会阻止我购买新的 M1 mac。但由于它们是未来,我绝对需要一个没有虚拟机进行开发的长期解决方案。

应要求提供的附加信息: 我还没有 M1,目前正在我的旧系统上进行测试。因此,我在相同的 2.8 GHz 双核 Intel Core i5 和 8GB RAM Mac OS 12.3 Monterey 上比较 docker 和 VirtualBox。 Docker 有 2 个 CPU 和 4GB 内存,而(更快的)VirtualBox 设置只有 1 个 CPU 和 1GB 内存。所以它的装备更差,但在同一台机器上速度更快。

可以在https://pastebin.com/8pq1aeGR 找到 MySQL 统计信息。

【问题讨论】:

  • 请提供更多信息请求。一套来自 M1 Mac,一套来自旧设置。 RAM 大小、核心数、MySQL 主机服务器上的任何 SSD 或 NVME 设备?在 pastebin.com 上发布并共享链接。从您的 SSH 登录根目录,文本结果:A) SELECT COUNT(*) FROM information_schema.tables; B) 显示全局状态;至少 24 小时正常运行后 C) 显示全局变量; D) 显示完整的流程列表; E) 状态;不显示状态,只是状态; G) 显示引擎创新状态;为服务器工作负载调优分析提供建议。
  • @WilsonHauck 我还没有 M1,我目前正在我的旧系统上进行测试。因此,我在相同的 2.8 GHz 双核 Intel Core i5 和 8GB RAM Mac OS 12.3 Monterey 上比较 docker 和 VirtualBox。 Docker 有 2 个 CPU 和 4GB 内存,而(更快的)VirtualBox 设置只有 1 个 CPU 和 1GB 内存。所以它的装备更差,但在同一台机器上速度更快。我将在接下来的几分钟内发布 SQL 结果。
  • @WilsonHauck 这里是新 docker 设置的结果:pastebin.com/8pq1aeGR。您还想查看旧设置的结果以进行比较吗?到目前为止,服务器没有 24 小时更新,更不用说了。
  • 是的,一组来自旧设置的数据也可以进行比较。最好在每个正常运行 24 小时后。
  • 大约 3 小时前发布在 pastebin.com 上的数据不再可用。请查看个人资料以获取联系信息并取得联系。

标签: php mysql docker docker-compose containers


【解决方案1】:

所以,TL;DR 对我来说(我想强调的可能不是一般的解决方案)是使用 nginx。

因此,在使用 Apache 作为反向代理时,我一直面临类似的问题,以至于丢失消息和服务 503 错误。

我对 apache 的使用是派生 Debian:11 映像,然后安装 apache 并启用我自己的模块。由于某种原因,许多消息丢失了。自从我使用 Apache 十多年以来,我已经习惯了 Apache,所以......在用尽我的选择后没有任何效果。

然后我学习了nginx并用它作为反向代理而不是apache,所有的性能问题都没有了。为什么?我一点也不知道。我并不是说这是最终的解决方案,但如果您遇到性能问题,尝试一下是值得的。

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 2011-10-03
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2017-05-25
    • 2018-05-12
    相关资源
    最近更新 更多