2006年9月25日 星期一

我猜是 cache_lite 的 bug

上週五升級完 LifeType 1.1 之後,看似一切正常,然後,漸漸地,一些文章、迴響的中文開始變成問號 (???) ,在抓問題時,發現了一個奇怪的事情。

在確認了 config file 、 db connection 都是跑 utf8 字集,而且升級後的資料庫內容也是正確的 utf8 編碼內容、以及沒有任何 sql_error.log 之後,我開始懷疑 LifeType 1.1 是不是有還沒被發現的重大 bug ?但是沒理由只有我遇到啊?經過一番 trace ,我懷疑到用來實作 Object Cache 的 cache_lite 程式庫頭上。

LifeType 1.1 新增了 Object Cache ,把 db query 的結果快取在檔案裡。這種做法,可以大幅減少 db query 的動作,改為簡單的 disk IO ,對動胤萬人連線的千人大站來說,這可以大大地縮短回應時間及減少記憶體用量。

根據 LifeType 設計, Object cache 應該是放在全域設定 temp_folder 所指定的目錄裡,一般人使用的預設值是 ./tmp 。我個人為了某些奇怪的理由,把 temp_folder 指到別的地方去了(反正不在 LifeType 的安裝目錄裡)。當我在看 temp_folder 時,竟然找不到任何 cache file ?

後來,在預設的 ./tmp 目錄裡找到了 cache file ,這就先證實一件事, cache_llite 應該沒有使用 temp_folder 設定值來找放 cache file 的目錄。當我把所有的 cache file 刪除,重新讀取 blog 時,慘劇發生了,中文變成問號 (???) 的情況更嚴重了。

最後,暫時的解決方法是:把 temp_folder 改回 LifeType 的預設值 ./tmp 。一切忽然地恢復正常了。

我還沒有空去研究 cache_lite 的程式碼,不過,這些症狀應該足以判斷是 cache_lite 搞的鬼吧。有興趣重製這個錯誤的人,可以試試看,只要把 temp_folder 設定到 LifeType 安裝目錄之外(當然,要 httpd 具有讀寫該路徑的權限),你就會看到發生在我身上的慘劇了。

謝謝 mark 昨天晚上陪我抓蟲,狀況已經直接回報給 mark 了,開發團隊應該會想辦法解決吧。如果有人發生類似的症狀,可以參考看看是不是一樣的情形。

沒有留言:

張貼留言