FreeBSD 上 PHP5 的 pecl-APC 效能

環境是單顆 E5405 的機器,上面的作業系統是 FreeBSD 7.1,應用程式的部份是 apache 2.2 (worker) + mod_fastcgi 2.4.6 + PHP 5.2.8 + APC 3.0.19。

由於前陣子發現 PHP 在 MP 架構下效能不太好,偶而會有一堆 php-cgi 卡住,用 top 會發現卡在 "lockf" 這個狀態,這時候前端的 L4 switch 會看到 500 Internal Server Error 而把這台機器暫時離線。等到 php-cgi 慢慢消化完,前端的 L4 switch 又會抓到 200。

在 php-cgi 卡住的狀況下試著用 gdb 找原因,當時 backtrace 發現是卡在 APC 裡的 lockf,所以就有一些想法,等有空閒的時候測試。

第一個想法是把 APC 的 lockf (fcntl) 改用 IPC semaphore,這個在 ports 可以調整。重新編完後發現 php-cgi 跑不起來,後來試出來,需要同時打開 mmap support 與 IPC semaphore。

第一張是 webfront-7,跑 mmap + semaphore。第二張是 webfront-8,保持原來的 shm + fcntl (lockf):

效能有「好一點」,但很難觀察出來,實際再加上 webfront-{9,10} 比較後 (都是完全同型的伺服器),看起來 webfront-7 的效能是最好的,所以得觀察當爆量時是否會卡 lockf。

7 thoughts on “FreeBSD 上 PHP5 的 pecl-APC 效能”

  1. Ken says:

    Hmmm.. 看的到 "500 Internal Server Error", 應該到 L7 的 switch 了, 真羨慕有這樣的設備。

  2. Gea-Suan Lin says:

    是 health check 的時候會抓到 500,而非使用者的連線...

  3. Paul Gao says:

    APC 在流量大的时候,容易出现一个 http://pecl.php.net/bugs/bug.php?id=15313 的错误,我是在配合 PHP-FPM 的时候在FPM的日志里发现的。这种情况就会出现 500 错误。不知道你这里有否发现?

  4. Paul Gao says:

    忘了说,APC 的作者之一推荐用 spinlock 方式。不过这个问题在最新的 CVS 版本依然没有解决。

  5. hshh says:

    Suggest to use xcache to replace APC in FreeBSD 7.1 SMP.

  6. fusong says:

    您好, 請問intel xeon e5405 cpu 是使用 7.2R AMD64的安裝片嗎?我用這片安裝,沒辦法進入安裝畫面,會不斷地重新開機,thanks

  7. Gea-Suan Lin says:

    那就不是 cpu 的問題了...

Leave a Reply

Your email address will not be published. Required fields are marked *