Category: PHP     Comments (2)    

FASTCGI PHP ON IIS6 非正式测试

测试环境是建立在虚拟PC上的,执行ApacheBench的是宿主,虚拟PC软件是用微软的VPC,上面装了WIN2003简体,RAM是共享宿主的512MB

宿主的配置是:T2400 1.8G 2.5G RAM

———————————————————–

本次测试是针对在没有微软官方的FASTCGI之前在IIS上使用PHP(不论是ISAPI方式或者CGI方式),在高负载和长期运行后不稳定的问题进行的,本次测试目的主要是检查FASTCGI PHP的稳定性

———————————————————–
被测试的PAGE只是一个phpinfo()调用.

使用的是ApacheBench模拟30个并发,执行1000000次请求,结果请看下面.
在三个半小时(214分钟)的整个测试过程中没有出现任何异常,测试完毕后RAM也被正常释放.

fastcgi testing

fastcgi testing

PS.在测试期间宿主上面还打开多个聊天软件并且打开多个IE在进行浏览网页

hp-cgi.exe进程

FASTCGI的配置如下

PHP=C:\PHP\php-cgi.exe
[C:\PHP\php-cgi.exe]
QueueLength=1000
MaxInstances=4
InstanceTimeout=30
InstanceMaxRequests=1000
------------------------ApacheBench結果---------------------
ab -c 30 -n 1000000 http://www.vpc.com/phpinfo.php
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking www.vpc.com (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Finished 1000000 requests
Server Software: Microsoft-IIS/6.0
Server Hostname: www.vpc.com
Server Port: 80
Document Path: /phpinfo.php
Document Length: 50211 bytes
Concurrency Level: 30
Time taken for tests: 12844.317000 seconds
Complete requests: 1000000
Failed requests: 138046
  (Connect: 0, Length: 138046, Exceptions: 0)
Write errors: 0
Total transferred: -1130766272 bytes
HTML transferred: -1328766272 bytes
Requests per second: 77.86 [#/sec] (mean)
Time per request: 385.330 [ms] (mean)
Time per request: 12.844 [ms] (mean, across all concurrent requests)
Transfer rate: -85.97 [Kbytes/sec] received
Connection Times (ms)
  min mean[+/-sd] median max
Connect: 1 3 5.1 2 2336
Processing: 42 381 180.5 348 6493
Waiting: 30 364 179.2 331 6469
Total: 45 385 180.8 351 6495
Percentage of the requests served within a certain time (ms)
  50% 351
  66% 380
  75% 402
  80% 420
  90% 484
  95% 562
  98% 753
  99% 1168
 100% 6495 (longest request)
Category: PHP     Comments (0)    

在IIS6下配置官方的FASTCGI使用PHP

1.首先到微軟官方IIS網站下載,並安裝 FastCGI Extension for IIS6.0 - RTM
http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1521
(安裝後不需要重啟SERVER)

2.設置IIS
設置支持.php文件

  1. Double click the machine icon for the local computer
  2. Right click on “Web Sites” and pick “Properties”
  3. Click on the tab labeled “Home Directory”
  4. Click on the “Configuration…” button.
  5. Click on the “Add…” button.
  6. Browse to %WINDIR%\system32\inetsrv\ to select fcgiext.dll as the Executable.
  7. Enter .php as the Extension
  8. Select “All verbs”
  9. Ensure that “Script Engine” and “Verify that file exists” are checked.

設置.php擴展名映射

添加影射

設置默認首頁

  1. Double click the machine icon for the local computer.
  2. Right click “Web Sites” and pick “Properties.”
  3. Click the “Documents” tab.
  4. Click the “Add…” button and enter “index.php” for “Default Document Name:”
  5. Click “OK.”

IIS中設置缺省index.php首頁

IIS中設置缺省index.php首頁

3.配置PHP FastCGI

編輯%WINDIR%\system32\inetsrv\fcgiext.ini
在[Types]下面加入
PHP=C:\PHP\php-cgi.exe
[C:\PHP\php-cgi.exe]
QueueLength=1000
MaxInstances=4
InstanceTimeout=30
InstanceMaxRequests=200

上面的參數根據實際環境進行配置

configuration settings (per process pool):
fullPath: path to application for this pool (e.g. d:\php\php-cgi.exe, NOTE: must match handlers section)
maxInstances: maximum number of processes to create in this pool
instanceTimeout: maximum duration a request can last
instanceMaxRequests: process will be retired after exceeding this number of requests
protocol: use named pipes or tcp. The tech preview currently only supports named pipes, but TCP should be simple to add.
queueLength: maximum number of requests to queue (when this is exceeded the module will start 500'ing)
flushNamedPipe: Flush the named pipe at the end of each request. This is to workaround, what seems to be a bug in libfcgi: if two FastCGI requests arrive in a single ReadFile call, libfcgi closes the pipe. (If anyone wants to tackle this problem, I'd be happy to provide a repro)

4.配置php.ini
設置好extension_dir並打開需要的extension

; fastcgi.impersonate = 1; 改成 fastcgi.impersonate = 1
; cgi.fix_pathinfo=1 改成 cgi.fix_pathinfo=1
; cgi.force_redirect = 1 改成 cgi.force_redirect = 0

更詳細的安裝說明可以參考
%WINDIR%\system32\inetsrv\fcgireadme.htm
http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/

PS
當你已經打開過php文件後,你再去修改php.ini必須用命令行重啟IIS才會生效

net stop w3svc
net start w3svc

aalglatt2008 Wordpress-Theme by Felix Krusch, SEO by Court