Apr 16

FreeBSD ports tree 的 lang/php5 升級到 5.3.2, www/eaccelerator 也升級到 0.9.6。
但是... 目前,FreeBSD ports tree 的 www/pecl-APC 依然是 3.0.19,無法在 PHP 5.3 運作;為了讓它正常運作,jnlin送過 PR(我沒有先查詢,也送了一個 :oops: )。

其實 eAccelerator 0.9.6 在 2010 年 2 月初就已經釋出了,可是,從 changelog 看來,很多不錯的功能被砍掉(反璞歸真?):

Changes in this version:

* Support for PHP 5.3.
* The encoder is removed
* The user cache functions are removed
* The session handler is removed
* The minimal PHP version supported is now 5.1
* Some internal refactoring to clean up the code
* Fixed some bugs (and probably added some)

這麼看來,2008 年的這篇文章的參考價值就低了些...
為了滿足我自己的好奇心,就把 APC 3.1.3p1 裝起來測試看看。

系統/硬體:

  • CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz
  • Memory: 6G(DDR2 800 MHz, Dual-Channel)
  • FreeBSD 8.0-RELEASE-p2 amd64
  • Apache HTTPD 2.2.14
  • PHP 5.3.2

設定:

  • eAccelerator 0.9.6:
    eaccelerator.shm_size="128"
    eaccelerator.cache_dir="/tmp/eaccelerator"
    eaccelerator.enable="1"
    eaccelerator.optimizer="1"
    eaccelerator.debug="0"
    eaccelerator.log_file="/var/log/eaccelerator.log"
    eaccelerator.name_space = ""
    eaccelerator.check_mtime="1"
    eaccelerator.filter=""
    eaccelerator.shm_max="0"
    eaccelerator.shm_ttl="0"
    eaccelerator.shm_prune_period="0"
    eaccelerator.shm_only="0"
    eaccelerator.compress="1"
    eaccelerator.compress_level="9"
    eaccelerator.keys="shm_and_disk"
  • APC 3.1.3p1:
    apc.enabled=1
    apc.shm_segments=1
    apc.shm_size=128
    apc.ttl=7200
    apc.user_ttl=7200
    apc.num_files_hint=1024
    apc.mmap_file_mask=/tmp/apc.cache
    apc.enable_cli=1

測試結果(ab -c5 -n500):

Pure PHP eAccelerator APC
WordPress 2.9.2 3.00 req./sec.
332.834 ms/req.
7.61 req./sec.
131.487 ms/req.
8.87 req./sec.
112.750 ms/req.
MediaWiki 1.15.3 1.81 req./sec.
552.822 ms/req.
2.75 req./sec.
363.124 ms/req.
5.93 req./sec.
168.580 ms/req.
Gallery 2.3.1 3.51 req./sec.
284.979 ms/req.
7.91 req./sec.
126.421 ms/req.
7.38 req./sec.
135.506 ms/req.

依照結果看來,APC 3.1.3p1 的確略勝 eAccelerator 0.9.6。 8)
可惜的是.. Xcache 目前的最新版本(1.3.0)沒辦法在 PHP 5.3 跑...

Technorati Tags: , , , , ,

(Visited 3128 times)
Dec 28

從幾個禮拜前我就在我的 BBS 個人板叫過, 我的 Apache 啟動後過不了多久就會狂噴這種訊息到 error log 裡 :

[warn] (32)Broken pipe: write pipe_of_death

而且 child process 的數量只會一直增加, 不會減少. :neutral:
如果我沒記錯的話, 這串訊息出現在我把 2.0.54 換成 2.0.55 以後.
所以當時我是決定把 2.0.55 換成 2.2 .
很不幸的, 狀況並沒有變動, 訊息仍然存在.
我一直以為是 Apache 的問題, 直到我在昨天看到 這篇 才恍然大悟. :shock:

很明顯的, 罪魁禍首是 eAccelerator , 問題出在 debug.c 這支程式的這段:

void ea_debug_shutdown ()
{
    fflush (F_fp);
    fclose (F_fp);
    F_fp = NULL;
}

fclose (F_fp); 換成 if (F_fp != stderr) fclose (F_fp); , 重新 compile & install 就沒事了.

如果是用 FreeBSD 的 ports 安裝的人可以把 這個 patch 檔 抓回去放在 /usr/ports/www/eaccelerator/files 底下, 然後用 portupgrade -f 或重裝一遍就可以解決.

話說回來, 這種 bug 還真是讓人無言以對啊........... :wink:

Technorati Tags: ,

(Visited 5862 times)
Dec 28

前幾天送了個 pr ( problem report ) 回去給總部, 順便在這邊說一下好了, 反正太久沒寫 Blog . :???:

這個 prApache 2.2 啟動用的 shell script 問題.

我不知道 2.1 有沒有這問題, 因為我用的是 2.2 , 下面也是以 2.2 做說明. :shock:

之前官方並沒有提供 apache22_http_accept_enable 這個參數讓我們丟進 /etc/rc.conf , 所以唯一解法是在 /boot/loader.conf 加進這行 :

accf_http_load="YES"

現在 /usr/local/etc/rc.d/apache22.sh 裡面可以看到這段 :

# apache22_http_accept_enable (bool): Set to "NO" by default.
#                             Set to yes to check for accf_http kernel
#                             module on start up and load if not loaded.

跟這段 :

if checkyesno apache22_http_accept_enable
then
        if ! /sbin/kldstat -q -m accf_http
        then
                /sbin/kldload accf_http
        fi
else
        apache22_flags="-DNOHTTPACCEPT $apache22_flags"
fi

很明顯的, 這邊用到 kldstat 的 -q 跟 -m 這兩個選項.
但是 kldstat 在 FreeBSD 6 裡面才有支援 -q , 而 -m 則是在 5.4 STABLE 才有支援 , 5.4 RELEASE 以下都沒有.

  1. kldstat online manpage - FreeBSD 6.0
  2. kldstat online manpage - FreeBSD 5.4 STABLE
  3. kldstat online manpage - FreeBSD 5.4 RELEASE

所以在 5.4 RELEASE (含) 以下的平台在啟動時會看到這種訊息 :

kldstat: illegal option -- q
usage: kldstat [-v] [-i id] [-n name]

所以我送 pr 去請他們把 -q -m 改成 -n 就好.

目前看來是還沒處理, 不知道會不會回我信, 叫我改用 FreeBSD 6.0 ? XD

Technorati Tags: , ,

(Visited 5292 times)
Apr 22

Apache 的火力還真大啊.

剛剛發現有人盜連以後找了一下文件, 看到 這個這個 .
於是我在 httpd.conf 中加了些設定以後 restart httpd , 就發現 這裡 的小貼紙不見了一堆.

不過, 這篇文章 貼的連結也失效了! XD

Technorati Tags: , ,

(Visited 2416 times)
Jan 13

前陣子就看到 Multiple vulnerabilities within PHP 4/5 這則 security advisory , 然後馬上開工, 把手上幾台 Apache + PHP 通通升級一下.

結果我這兩天才發現.
升級以後, 一堆 PHP 的系統爛光光 .

trace 過以後發現這點 :

之前的 PHP 會把 $username 這種變數吃成以下這三種的任何一種:

 $_GET["username"]    // 用 FORM 的 GET 來傳, 或用 xxx.php?username=xxx 來傳
 $_POST["username"]   // 用 FORM 的 POST 來傳
 $_COOKIE["username"] // 會吃 Cookie 的 username

PHP 4.3.10 就要求要強制指定了.
而我手上有三套自己寫的 PHP 系統, 要開始大修了. T_T

Technorati Tags: ,

(Visited 2425 times)
Jan 11

前陣子狂搞 mod_rewrite , 興趣來了就順便看看 Apache 還有哪些 mod .
看過以後只有一個感想, 就是 "多到爆!"

有些很邪惡, 像: mod_bt, mod_mp3, mod_layout .
有些很暴力, 像: mod_security, mod_rewrite .

Technorati Tags:

(Visited 2107 times)