Docker化WordPress环境多负载下数据库连接错误求助
高并发场景下WordPress容器频繁出现数据库连接错误(短暂自动恢复)
环境配置
- 容器架构:
- Nginx Proxy(jwilder/nginx-proxy)
- WordPress + Apache + PHP 7.4(官方镜像自定义构建)
- MySQL 5.7(官方镜像)
- VPS参数:Ubuntu 22.04 Server LTS,4GB内存,2核vCPU
- 业务类型:基于WooCommerce搭建的电商站点
问题现象
站点日常运行状态正常,但当打开约10个标签页同时刷新时,页面会弹出**"Error Establishing a Database Connection"**提示。此时所有容器均未崩溃,仍处于运行状态,等待几秒后页面可正常重新加载。
已尝试的排查优化
- 针对MySQL做了低内存参数调整,控制内存占用
- 降低Apache的mpm_prefork配置,减少进程数与子进程数
- 检查日志仅能看到数据库连接失败时的500错误,无其他异常信息
- 查阅近30个相关技术主题,未找到匹配的解决方案
docker-compose配置
version: '3.7' services: nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy ports: - "80:80" - "443:443" environment: - TRUST_DOWNSTREAM_PROXY=false volumes: - html:/usr/share/nginx/html - dhparam:/etc/nginx/dhparam - vhost:/etc/nginx/vhost.d - lets-certs:/etc/nginx/certs - ./conf.d/client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf restart: always networks: net_external: web_internal: logging: driver: "json-file" options: max-size: "100m" max-file: "10" phpmyadmin: image: phpmyadmin:latest environment: VIRTUAL_HOST: x LETSENCRYPT_HOST: x PMA_HOSTS: x MYSQL_ROOT_PASSWORD: x UPLOAD_LIMIT: 300M restart: unless-stopped depends_on: - nginx-proxy networks: - net_external - mysql logging: driver: "json-file" options: max-size: "100m" max-file: "10" mysql: image: mysql:5.7 environment: MYSQL_DATABASE: x MYSQL_USER: x MYSQL_PASSWORD: x MYSQL_ROOT_PASSWORD: x volumes: - mysql:/var/lib/mysql - ./mysql/my.cnf:/etc/my.cnf restart: always networks: - mysql logging: driver: "json-file" options: max-size: "100m" max-file: "10" wordpress: environment: WORDPRESS_DB_HOST: x WORDPRESS_DB_USER: x WORDPRESS_DB_PASSWORD: x WORDPRESS_DB_NAME: x WORDPRESS_CONFIG_EXTRA: | define('AUTOMATIC_UPDATER_DISABLED', true); VIRTUAL_HOST: x LETSENCRYPT_HOST: x build: context: . dockerfile: ./wordpress-build/Dockerfile volumes: - ./prod:/var/www/html - './uploads.ini:/usr/local/etc/php/conf.d/uploads.ini' restart: always depends_on: - mysql networks: - web_internal - prod_mysql - wp_external logging: driver: "json-file" options: max-size: "100m" max-file: "10" volumes: html: mysql: dhparam: vhost: networks: web_internal: internal: true mysql: internal: true net_external: external: true wp_external: external: true
恳请各位提供排查思路或解决方案。
内容的提问来源于stack exchange,提问作者realpclaudio
相关产品推荐
相关产品推荐

