PHP在性能上相對于其他編譯型語言來說算不上突出,但是使用了Opcode緩存后性能提升還是很明顯的。常見的緩存加速組件主要有 eAccelerator,XCache,APC本文主要介紹APC的安裝使用。
APC,全稱是Alternative PHP Cache,官方翻譯叫"可選PHP緩存"。它為我們提供了緩存和優化PHP的中間代碼的框架。 APC的緩存分兩部分:系統緩存和用戶數據緩存。
系統緩存
它是指APC把PHP文件源碼的編譯結果緩存起來,然后在每次調用時先對比時間標記。如果未過期,則使用緩存的中間代碼運行。默認緩存3600s(一小時)。但是這樣仍會浪費大量CPU時間。因此可以在php.ini中設置system緩存為永不過期(apc.ttl=0)。不過如果這樣設置,改運php代碼后需要重啟WEB服務器。目前使用較多的是指此類緩存。
用戶數據緩存
緩存由用戶在編寫PHP代碼時用apc_store和apc_fetch函數操作讀取、寫入的。如果數據量不大的話,可以一試。如果數據量大,使用類似memcache此類的更加專著的內存緩存方案會更好。
APC模塊的安裝
最簡單的方法是直接使用pecl,在命令行下輸入:/usr/local/php/bin/pecl install apc
然后按照提示一步步完成即可,示例如下:
- [root@iZ23bm1tc0pZ ~]# /usr/local/php/bin/pecl install apc
- downloading APC-3.1.13.tgz ...
- Starting to download APC-3.1.13.tgz (171,591 bytes)
- .....................................done: 171,591 bytes
- 55 source files, building
- running: phpize
- Configuring for:
- PHP Api Version: 20100412
- Zend Module Api No: 20100525
- Zend Extension Api No: 220100525
- Enable internal debugging in APC [no] : no
- Enable per request file info about files used from the APC cache [no] : no
- Enable spin locks (EXPERIMENTAL) [no] : no
- Enable memory protection (EXPERIMENTAL) [no] : no
- Enable pthread mutexes (default) [no] : no
- Enable pthread read/write locks (EXPERIMENTAL) [yes] : yes
然后重啟服務器即可:
lnmp nginx restart
先看一下沒有使用apc情況下的壓測結果:
- [root@iZ23bm1tc0pZ ~]# ab -n1000 -c100 http://zfsphp.cn/index.php
- This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
- Licensed to The Apache Software Foundation, http://www.apache.org/
- Benchmarking zfsphp.cn (be patient)
- Completed 100 requests
- Completed 200 requests
- Completed 300 requests
- Completed 400 requests
- Completed 500 requests
- Completed 600 requests
- Completed 700 requests
- Completed 800 requests
- Completed 900 requests
- Completed 1000 requests
- Finished 1000 requests
- Server Software: nginx
- Server Hostname: zfsphp.cn
- Server Port: 80
- Document Path: /index.php
- Document Length: 14341 bytes
- Concurrency Level: 100
- Time taken for tests: 15.517 seconds
- Complete requests: 1000
- Failed requests: 0
- Total transferred: 14544000 bytes
- HTML transferred: 14341000 bytes
- Requests per second: 64.45 [#/sec] (mean)
- Time per request: 1551.671 [ms] (mean)
- Time per request: 15.517 [ms] (mean, across all concurrent requests)
- Transfer rate: 915.34 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 2 4.8 0 17
- Processing: 46 1481 277.0 1560 1638
- Waiting: 42 1481 277.1 1560 1638
- Total: 58 1482 272.8 1560 1638
- Percentage of the requests served within a certain time (ms)
- 50% 1560
- 66% 1576
- 75% 1582
- 80% 1587
- 90% 1602
- 95% 1612
- 98% 1622
- 99% 1629
- 100% 1638 (longest request)
可見最大吞吐率只有64.45reqs/s
然后我們開啟apc,測試結果如下:
- [root@iZ23bm1tc0pZ ~]# ab -n1000 -c100 http://Vevb.com/index.php
- This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://m.survivalescaperooms.com/
- Licensed to The Apache Software Foundation, http://www.apache.org/
- Benchmarking Vevb.com (be patient)
- Completed 100 requests
- Completed 200 requests
- Completed 300 requests
- Completed 400 requests
- Completed 500 requests
- Completed 600 requests
- Completed 700 requests
- Completed 800 requests
- Completed 900 requests
- Completed 1000 requests
- Finished 1000 requests
- Server Software: nginx
- Server Hostname: zfsphp.cn
- Server Port: 80
- Document Path: /index.php
- Document Length: 14341 bytes
- Concurrency Level: 100
- Time taken for tests: 7.122 seconds
- Complete requests: 1000
- Failed requests: 0
- Total transferred: 14544000 bytes
- HTML transferred: 14341000 bytes
- Requests per second: 140.41 [#/sec] (mean)
- Time per request: 712.189 [ms] (mean)
- Time per request: 7.122 [ms] (mean, across all concurrent requests)
- Transfer rate: 1994.29 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 1 2.4 0 10
- Processing: 23 677 125.3 705 775
- Waiting: 22 677 125.4 705 775
- Total: 30 678 123.1 705 775
- Percentage of the requests served within a certain time (ms)
- 50% 705
- 66% 719
- 75% 726
- 80% 730
- 90% 742
- 95% 750
- 98% 760
- 99% 765
- 100% 775 (longest request)
可見吞吐率提高了一倍多,達到140.41reqs/s,然后,我們在開啟動態內容緩存(樓主的博客用的是Smarty緩存),測試結果如下:
- [root@iZ23bm1tc0pZ ~]# ab -n1000 -c100 http://Vevb.com/index.php
- This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
- Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://m.survivalescaperooms.com/
- Licensed to The Apache Software Foundation, http://www.apache.org/
- Benchmarking zfsphp.cn (be patient)
- Completed 100 requests
- Completed 200 requests
- Completed 300 requests
- Completed 400 requests
- Completed 500 requests
- Completed 600 requests
- Completed 700 requests
- Completed 800 requests
- Completed 900 requests
- Completed 1000 requests
- Finished 1000 requests
- Server Software: nginx
- Server Hostname: zfsphp.cn
- Server Port: 80
- Document Path: /index.php
- Document Length: 14341 bytes
- Concurrency Level: 100
- Time taken for tests: 2.263 seconds
- Complete requests: 1000
- Failed requests: 0
- Total transferred: 14544000 bytes
- HTML transferred: 14341000 bytes
- Requests per second: 441.98 [#/sec] (mean)
- Time per request: 226.255 [ms] (mean)
- Time per request: 2.263 [ms] (mean, across all concurrent requests)
- Transfer rate: 6277.49 [Kbytes/sec] received
- Connection Times (ms)
- min mean[+/-sd] median max
- Connect: 0 1 3.1 0 12
- Processing: 18 215 38.1 222 255
- Waiting: 18 215 38.3 222 255
- Total: 26 216 35.6 223 255
- Percentage of the requests served within a certain time (ms)
- 50% 223
- 66% 230
- 75% 232
- 80% 234
- 90% 237
- 95% 239
- 98% 240
- 99% 243
- 100% 255 (longest request)
這一次吞吐率居然達到441.98reqs/s,提高了三倍多,相比最初的64.45reqs/s提高了近7倍,可見使用apc的opcode緩存配合Smarty緩存,對網站性能的優化效果還是相當明顯的。
新聞熱點
疑難解答