docker - 性能问题 php-fpm 多副本 docker swarm
问题描述
我用 Apache 和 PHP-FPM 容器构建了一个 Swarm 堆栈。
如果我通过 docker-compose 运行文件并通过 JMeter 运行性能测试,则所有请求都成功且响应时间正常。
如果我通过在副本中使用 1 个 apache 和 1 个 PHP 通过 swarm 部署堆栈来运行文件,运行相同的性能测试,则所有请求都成功且响应时间正常。
但是,一旦我增加 PHP 副本的数量,就会有一些 http 请求到达后期的 apache 容器。只有当我的 PHP 副本数大于 1 时才会发生这种情况。你知道为什么吗?
这是构建堆栈的组合文件:
version: '3'
services:
ws_portail_web:
image: ws_portail_apache_api
ports:
- 8443:443
volumes:
- ${VHOST_CERTS_PATH_APACHE}:/etc/apache2/ssl
- ${VHOST_SSL_CONF_PATH_APACHE}:/etc/apache2/sites-enabled/vhost_api-ssl.conf
- ${MPM_CONF_PATH_APACHE}:/etc/apache2/mods-available/mpm_worker.conf
- ${LOGS_APACHE}:${APACHE_LOG_DIR}
- ${SOURCE_CODE_API_DOC}:/var/www/api/apiDoc
environment:
MPM_SERVER_LIMIT: ${MPM_SERVER_LIMIT}
MPM_START_SERVERS: ${MPM_START_SERVERS}
MPM_MAX_REQUEST_WORKERS: ${MPM_MAX_REQUEST_WORKERS}
MPM_MIN_SPARE_THREADS: ${MPM_MIN_SPARE_THREADS}
MPM_MAX_SPARE_THREADS: ${MPM_MAX_SPARE_THREADS}
MPM_THREAD_LIMIT: ${MPM_THREAD_LIMIT}
MPM_THREADS_PER_CHILD: ${MPM_THREADS_PER_CHILD}
MPM_MAX_CONNECTIONS_PER_CHILD: ${MPM_MAX_CONNECTIONS_PER_CHILD}
PHP_FPM_PM_MAX_CHILDREN: ${PHP_FPM_PM_MAX_CHILDREN}
PHP_FPM_PM_START_SERVERS: ${PHP_FPM_PM_START_SERVERS}
PHP_FPM_PM_MIN_SPARE_SERVERS: ${PHP_FPM_PM_MIN_SPARE_SERVERS}
PHP_FPM_PM_MAX_SPARE_SERVERS: ${PHP_FPM_PM_MAX_SPARE_SERVERS}
PHP_FPM_PM_MAX_REQUESTS: ${PHP_FPM_PM_MAX_REQUESTS}
APACHE_LOG_DIR: ${APACHE_LOG_DIR}
APACHE_LOG_LEVEL: ${APACHE_LOG_LEVEL}
APACHE_SERVEUR_NAME: ${APACHE_SERVEUR_NAME}
depends_on:
- ws_portail_php
deploy:
mode: replicated
restart_policy:
condition: on-failure
max_attempts: 5
window: 30s
replicas: ${SWARM_NB_REPLICAS_APACHE}
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
resources:
limits:
cpus: ${SWARM_CPU_LIMIT_APACHE}
memory: ${SWARM_MEMORY_LIMIT_APACHE}
reservations:
cpus: ${SWARM_CPU_RESERVATION_APACHE}
memory: ${SWARM_MEMORY_RESERVATION_APACHE}
ws_portail_php:
image: ws_portail_phpfpm_74_api
ports:
- 9000:9000
volumes:
- ${SOURCE_CODE}:/var/www/api
- ${CUSTOM_CONF_PATH_PHP}:/usr/local/etc/php/conf.d/custom_php.ini
- ${PHPFPM_CONFIGURATION_FILE}:/usr/local/etc/php-fpm.d/www.conf
- ${BLACKFIRE_CONF_PATH_PHP}:/usr/local/etc/php/conf.d/blackfire.ini
- ${LOGS_PHP}:/var/log
environment:
MEMORY_LIMIT: ${INI_MEMORY_LIMIT}
MAX_EXECUTION_TIME: ${INI_MAX_EXECUTION_TIME}
MAX_INPUT_TIME: ${INI_MAX_INPUT_TIME}
ERROR_REPORTING: ${INI_ERROR_REPORTING}
DISPLAY_ERRORS: ${INI_DISPLAY_ERRORS}
IGNORE_REPEATED_ERRORS: ${INI_IGNORE_REPEATED_ERRORS}
IGNORE_REPEATED_SOURCE: ${INI_IGNORE_REPEATED_SOURCE}
REPORT_MEMLEAKS: ${INI_REPORT_MEMLEAKS}
TRACK_ERRORS: ${INI_TRACK_ERRORS}
FILE_UPLOADS: ${INI_FILE_UPLOADS}
UPLOAD_MAX_FILESIZE: ${INI_UPLOAD_MAX_FILESIZE}
MAX_FILE_UPLOADS: ${INI_MAX_FILE_UPLOADS}
POST_MAX_SIZE: ${INI_POST_MAX_SIZE}
EXPOSE_PHP: ${INI_EXPOSE_PHP}
OPCACHE_MEMORY_CONSUMPTION: ${OPCACHE_MEMORY_CONSUMPTION}
OPCACHE_INTERNED_STRINGS_BUFFER: ${OPCACHE_INTERNED_STRINGS_BUFFER}
OPCACHE_ENABLE_CLI: ${OPCACHE_ENABLE_CLI}
OPCACHE_MAX_ACCELERATED_FILE: ${OPCACHE_MAX_ACCELERATED_FILE}
OPCACHE_MAX_WASTED_PERCENTAGE: ${OPCACHE_MAX_WASTED_PERCENTAGE}
OPCACHE_VALIDATE_TIMESTAMP: ${OPCACHE_VALIDATE_TIMESTAMP}
OPCACHE_REVALIDATE_FREQ: ${OPCACHE_REVALIDATE_FREQ}
OPCACHE_FAST_SHUTDOWN: ${OPCACHE_FAST_SHUTDOWN}
OPCACHE_ERROR_LOG: ${OPCACHE_ERROR_LOG}
OPCACHE_LOG_VERBOSITY_LEVEL: ${OPCACHE_LOG_VERBOSITY_LEVEL}
PHP_FPM_PM_MAX_CHILDREN: ${PHP_FPM_PM_MAX_CHILDREN}
PHP_FPM_PM_START_SERVERS: ${PHP_FPM_PM_START_SERVERS}
PHP_FPM_PM_MIN_SPARE_SERVERS: ${PHP_FPM_PM_MIN_SPARE_SERVERS}
PHP_FPM_PM_MAX_SPARE_SERVERS: ${PHP_FPM_PM_MAX_SPARE_SERVERS}
PHP_FPM_PM_MAX_REQUESTS: ${PHP_FPM_PM_MAX_REQUESTS}
PHP_FPM_CATCH_WORKERS_OUTPUT: ${PHP_FPM_CATCH_WORKERS_OUTPUT}
PHP_FPM_LOG_ERRORS: ${PHP_FPM_LOG_ERRORS}
PHP_FPM_DISPLAY_ERRORS: ${PHP_FPM_DISPLAY_ERRORS}
PHP_FPM_ERROR_REPORTING: ${PHP_FPM_ERROR_REPORTING}
PHP_FPM_ERROR_LOG: ${PHP_FPM_ERROR_LOG}
deploy:
mode: replicated
restart_policy:
condition: on-failure
max_attempts: 5
window: 30s
replicas: ${SWARM_NB_REPLICAS_PHP}
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
resources:
limits:
cpus: ${SWARM_CPU_LIMIT_PHP}
memory: ${SWARM_MEMORY_LIMIT_PHP}
reservations:
cpus: ${SWARM_CPU_RESERVATION_PHP}
memory: ${SWARM_MEMORY_RESERVATION_PHP}
这是apache ssl配置文件:
<VirtualHost *:443>
ServerName ${APACHE_SERVEUR_NAME}
DocumentRoot /var/www/api
DirectoryIndex disabled
DirectoryIndex index.php index.html
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/serveur.crt
SSLCertificateKeyFile /etc/apache2/ssl/serveur.key
SSLCertificateChainFile /etc/apache2/ssl/CA.crt
<Directory "/var/www/api">
Options -Indexes
AllowOverride All
Require all granted
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
</Directory>
<LocationMatch "^(.*\/public\/.*)$">
ProxyPass fcgi://ws_portail_php:9000/var/www/api/public/index.php$1
</LocationMatch>
<LocationMatch "^/(.*\.php(/.*)?)$">
ProxyPass fcgi://ws_portail_php:9000/var/www/api/$1
</LocationMatch>
LogLevel ${APACHE_LOG_LEVEL}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
谢谢你的帮助。
解决方案
推荐阅读
- google-cloud-platform - 如何释放我错误保留的静态内部 IP 地址?
- shell - 存储从 Shell 脚本登录 SQLPLUS 的密码
- dax - 使用过滤器计算分组依据的 DAX 公式
- selenium - 基于我之前的 qu-如何使用 selenium java 对下拉列表中的每个值执行一些操作?
- ubuntu - 在 Ubuntu 18.04.1 LTS 中安装 Neo4j
- embedded - 内核耦合存储器 (CCM)、中断和 STM32F3xx
- javascript - Javascript二维数组包括
- python - Pywinauto-如何从对话框中获取消息内容
- sql - 在sql中选择父子案例的递归查询
- r - 自定义损失和切片 (Keras R)