自動目錄
搞好久....
Alternative PHP Cache (APC) 是 PHP 的程式碼快取,讓你的程式在第一次執行時編好,接下來的存取就不必再重編以加快速度。
一、安裝
# cd /usr/ports/www/pecl-APC/; make install
二、設定 php.ini
# vi /usr/local/etc/php.ini
最下面加入:
[apc]
apc.enabled=1
apc.shm_size="32M"
apc.shm_segments=2
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
三、重啟APACHE 出錯
PHP Fatal error: PHP Startup: apc_shm_create: shmget(0, 67108864, 914) failed: Invalid argument. It is possible that the chosen SHM segment size is higher than the operation system allows. Linux has usually a default limit of 32MB per segment. in Unknown on line 0
PHP Fatal error: PHP Startup: apc_shm_attach: shmat failed: in Unknown on line 0
PHP Fatal error: PHP Startup: apc_sem_create: semget(0,...) failed: in Unknown on line 0
解決:
# vi /etc/sysctl.conf
加入
kern.ipc.shmmax=134217728
kern.ipc.shmall=32768
重新啟動 sysctl 就不必重開機
# /etc/rc.d/sysctl restart
檢查參數
# sysctl -a | grep 'shm'
kern.ipc.shm_allow_removed: 0
kern.ipc.shm_use_phys: 0
kern.ipc.shmall: 32768
kern.ipc.shmseg: 128
kern.ipc.shmmni: 192
kern.ipc.shmmin: 1
kern.ipc.shmmax: 134217728 <==可用值達128MB
四、再重啟出錯
[apc-error] apc_sem_create: semget(0,...) failed: No space left on device
解決:
清除 IPCS
# ipcs -s -t | awk '/^s/ { print $2 ; }' | xargs -L 1 ipcrm -s
五、監控程式:
複製apc到你的網頁
# cp /usr/local/share/doc/APC/apc.php /usr/local/www/apache22/data
修改 apc.php
defaults('ADMIN_USERNAME','axer'); // Admin Username
defaults('ADMIN_PASSWORD','<你的密碼,一定要修改才能使用>');
六、phpinfo 檢查
感動到不行~~終於成功了,花了6個多小時
參考資料
[1] http://blog.wu-boy.com/2008/06/05/275/
[2] http://kaworu.jpn.org/kaworu/2008-08-26-1
補充 100/02/14
由於一直發現我的系統不論怎麼設定,就是只能用 30MB 的cache : from apc.php
1 Segment(s) with 30.0 MBytes
(mmap memory, IPC semaphore locking)
怪異的是同樣的設定和OS,另一台伺服器就可以順利運作到 >30MB,後來上網查了一下,原來這是3.0.x 版的bug,如果可用記憶體大於2G時,就會出現這個bug,因此我將他upgrade 到 3.1.6,同時 php.ini 調整到128MB,現在我的實體記憶體>2G,同時apc也可以使用>30MB的記憶體了。
apc.shm_size=128M
1 Segment(s) with 128.0 MBytes
(IPC shared memory, IPC semaphore locking)
如果出現這樣的錯誤:
apc_sem_lock: semop(-1) failed
表示 apc cache 記憶體啟用失敗。-1 代表沒有取得到配置的記憶體。請查看 第三項的說明。
原文 2011-01-13 01:56:52