Eu tenho um servidor com Dual Xeon Quad Core L5420 rodando a 2.5GHz. Eu tenho otimizado meu servidor e chego ao meu gargalo final: PHP.
Meu script PHP muito simples:
./ test.php
<?php print_r(posix_getpwuid(posix_getuid()));
Meu não-tão-científico-porque-eles-não-prestam atenção-para-thread-locking-mas-científico-suficiente-para-me-um-razoável-multithreaded-pedidos-per- Scripts de segundo resultado:
./ benchmark-php
#!/bin/bash
if [ -z $1 ]; then
LIMIT=10
else
LIMIT=$1
fi
if [ -z $2 ]; then
SCRIPT="index.php"
else
SCRIPT=$2
fi
START=$(date +%s.%N)
COUNT=0
while (( $COUNT < $LIMIT ))
do
php $SCRIPT > /dev/null
COUNT=$(echo "$COUNT + 1" | bc)
done
END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)
REQS_PER_SEC=$(echo "scale=2; $COUNT / $DIFF" | bc)
echo $REQS_PER_SEC
./ realmente-benchmark-php
#!/bin/bash
if [ -z $1 ]; then
LIMIT=10
else
LIMIT=$1
fi
if [ -z $2 ]; then
THREADS=16
else
THREADS=$2
fi
if [ -z $3 ]; then
SCRIPT="index.php"
else
SCRIPT=$3
fi
PIDS=""
echo '' > results
for thread in 'seq 1 $THREADS'; do
./benchmark-php $LIMIT $SCRIPT >> results &
PIDS="$PIDS $!"
done
for PID in $PIDS; do
wait $PID
done
RESULTS='cat results'
MATH="0"
for RESULT in $RESULTS; do
MATH="$MATH + $RESULT"
done
echo "$MATH" | bc
O resultado da execução de ./really-benchmark-php 100 8 test.php
é de 137 solicitações por segundo.
A execução do mesmo script em uma instância do Drupal ativada por sqlite ou mysql retorna ~ 1.5 req / s.
Eu tenho o APC e o mem_cache instalados e verifiquei que eles estão sendo executados nos padrões. (Sim, o enable_cli da APC também está ligado.) Alguém conhece a mágica "faça o PHP executar mais rápido"?
Eu tenho uma configuração de configuração alternativa (FPM / FastCGI) que serve ~ 140 req / s da instalação do MySQL Drupal ... como isso poderia ser possível se o próprio PHP não puder servir 2 req / s da linha de comando? ?
O resultado da ferramenta ab
parece tão baixo para mim:
página estática: ab -n 1000 -c 100 http://x.x.x.x/
de solicitações por segundo: 683.71
test php: ab -n 100 -c 5 http://x.x.x.x/
Solicitações por segundo: 41.38
drupal-mysql: ab -n 100 -c 10 http://x.x.x.x/drupal/
de solicitações por segundo: 0,24
drupal-sqlite: ab -n 100 -c 10 http://x.x.x.x/drupal-test/
de solicitações por segundo: 4.92