我非常简单的PHP脚本:
./test.PHP
<?PHP print_r(posix_getpwuid(posix_getuid()));
我不那么科学 – 因为他们不注意线程锁定但科学足够给我一个合理的多线程请求每秒结果脚本:
./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
./really-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
运行./really-benchmark-PHP 100 8 test.PHP的结果是每秒约137个请求.
在supite或MysqL驱动的Drupal实例上运行相同的脚本会返回~1.5 req / s.
我安装了APC和mem_cache,并且我已经验证它们是在默认情况下运行的. (是的,APC的enable_cli也开启了.)有人知道魔术“让PHP执行更快”的开关吗?
我有一个替代的配置设置(FPM / FastCGI),可以为140 Drqal安装提供~140 req / s …如果PHP本身甚至无法从命令行提供2个req / s,那怎么可能呢?
ab工具的结果对我来说感觉很低:
静态页面:ab -n 1000 -c 100 http://x.x.x.x/每秒请求数:683.71
测试PHP:ab -n 100 -c 5 http://x.x.x.x/每秒请求数:41.38
drupal-MysqL:ab -n 100 -c 10 http://x.x.x.x/drupal/每秒请求数:0.24
drupal-sqlite:ab -n 100 -c 10 http://x.x.x.x/drupal-test/每秒请求数:4.92
如果您的Web服务器配置为执行相同的操作,那么神奇的“使PHP更快的切换”可能会切换到使用mod_PHP,FastCGI或类似的东西,这使得单个PHP解释器可以提供多个请求. (请注意,每个解释器只能同时提供一个请求;启动多个PHP解释器的责任在于您的web服务器,用于mod_PHP或启动FastCGI的任何事情.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。