-
Notifications
You must be signed in to change notification settings - Fork 372
Closed
Labels
Description
Hi i'm trying to implement PHP-PM in Laravel for the TechEmpower FrameworkBenchmarks in Docker, but I somehow get worse results than vanilla Laravel (test plaintext):
Laravel 5.8: ~19786 TotalRequests (15sec)
Laravel 5.8 + PHP PM: ~5029 TotalRequests (15sec)
What am I doing wrong here?
This my setup:
Laravel + PHP PM Dockerfile (laravel.dockerfile)
FROM ubuntu:18.10
ARG DEBIAN_FRONTEND=noninteractive
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
RUN apt-get update -yqq && apt-get install -yqq software-properties-common > /dev/null
RUN LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
RUN apt-get update -yqq > /dev/null && \
apt-get install -yqq nginx git unzip php7.3 php7.3-common php7.3-cgi php7.3-cli php7.3-fpm php7.3-mysql > /dev/null
RUN apt-get install -yqq php7.3-mbstring php7.3-xml > /dev/null
RUN apt-get install -yqq composer > /dev/null
ADD ./ /laravel
WORKDIR /laravel
ADD etc/php.ini /etc/php7/php.ini
ADD etc/php.ini /etc/php7.3/php.ini
COPY etc/php.ini /etc/php/7.3/cgi/
COPY etc/php.ini /etc/php7.3/cgi/
ADD etc/nginx_default.conf /etc/nginx/sites-enabled/default
ADD etc/nginx.conf /etc/nginx/nginx.conf
RUN mkdir /ppm && cd /ppm && composer require php-pm/php-pm && composer require php-pm/httpkernel-adapter
RUN mkdir -p /laravel/bootstrap/cache
RUN mkdir -p /laravel/storage/framework/sessions
RUN mkdir -p /laravel/storage/framework/views
RUN mkdir -p /laravel/storage/framework/cache
RUN chmod -R 777 /laravel
RUN composer install --optimize-autoloader --classmap-authoritative --no-dev --quiet
RUN php artisan config:cache
RUN php artisan route:cache
ADD /etc/run-nginx.sh /etc/app/run.sh
RUN chmod -R 777 /laravel
EXPOSE 8080
ENTRYPOINT ["/bin/bash","/etc/app/run.sh"]
run-nginx.sh
#!/bin/bash
trapIt () { "$@"& pid="$!"; trap "kill -INT $pid" INT TERM; while kill -0 $pid > /dev/null 2>&1; do wait $pid; ec="$?"; done; exit $ec;};
STATIC=/var/www/
args=" $@ "
if [[ ! $args =~ " --help " ]]; then
ARG_STATIC=`/ppm/vendor/bin/ppm config --show-option="static-directory" "$@"`
fi
[ ! -z "$ARG_STATIC" ] && STATIC="${STATIC}${ARG_STATIC}"
sed -i "s#STATIC_DIRECTORY#${STATIC}#g" /etc/nginx/sites-enabled/default
nginx
mkdir -p /ppm/run
chmod -R 777 /ppm/run
ARGS='--port=8081 --bootstrap=laravel --socket-path=/ppm/run --pidfile=/ppm/ppm.pid --max-requests=100000 --workers=5 --app-env=prod --debug=0 --logging=0'
# make sure static-directory is not served by php-pm
ARGS="$ARGS --static-directory=''"
trapIt /ppm/vendor/bin/ppm start --ansi $ARGS $@
nginx-default.conf
server {
listen 8080;
server_name _;
root STATIC_DIRECTORY;
client_max_body_size 1000m;
location / {
try_files $uri @ppm;
}
location @ppm {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8081;
}
}
I also get errors/warnings for some requests like:
laravel: Script did not return a valid HTTP response. Maybe it has called exit() prematurely?
laravel: No slaves available to handle the request and timeout 10 seconds exceeded