有感:程式設計師在除錯的時候就像偵探一樣,必須鉅細靡遺的抽絲剝繭。
這一個禮拜幾乎都在做偵探在做的事情。起因是有個 flash 在測試環境連 amfPhp 的 Server 測試起來都沒啥問題,一到線上環境就會莫名其妙的亂卡。卡的時間還很詭異的都是五的倍數。
於是第一個當然就是懷疑線上跟開發環境的版本問題啦。
所以一開始就把 lighttpd 版本,換呀換, php 版本換呀換,結果問題還是存在。
那不然應該就是,線上的 load 過高?可是圖表看起來一切都還好阿。於是一連串由可能懷疑的都懷疑了。先是懷疑 fastcgi process spawn 的速度,然後又懷疑是不是 fastcgi handler,所以也換了好幾種 fastcgi 的模式,也用了 php內建的 php-fpm ,結果依然照舊。
後來發現這個恐怖的 amfphp 竟然會一直抽插 lighttpd ,每個 rpc call 都要 connect 一次,於是開始覺得會不會是 lighttpd 的 fastcgi handler 不夠力,會 queue 住,之後發現也不是,然後又開始懷疑該不會是 socket 有問題吧.....。
到最後能調的都調過了,其他網頁的速度也明顯的加快許多,可是還是一樣,莫名其妙會卡。
好吧,那應該不是 server 的問題了,乖乖的抽絲剝繭看看吧。
所以就乖乖的進 php 裡面用,「夾擠法」去找出到底卡在哪。最後發現卡在兩個點,一個是在 amfphp 的 auth 模組,一個是在 class 模組。
trace 進 auth 模組裡面發現裡面有用到 session ,不會吧,難道這種流量 io 就撐不住了嗎?於是把 php 的 session 丟到 ramdisk ,情況依舊。後來找到 session 相關的問題有人提到session lock 要注意。 我也乖乖的改了,還是一樣。
後來跟 clark 討論的時候他看了看程式碼,蹦了一句話,那應該是每次用完 session 就先強制 close 掉就好。於是我又乖乖跑回去改 code ,結果還是卡。就當一籌莫展的時候無意間看到,咦?auth 模組真的不會卡了耶!所以 session lock 莫名的就被修好了。到這裡已經用了三天。
之後又繼續 trace class 模組,到最後發現產生的地方在 new 物件的地方花費很久,這就束手無策百思不得其解了好一陣子。不會要我對線上環境 gdb 吧?這根本沒搞頭阿。不小心被我找到一個東西:http://xdebug.org/,這東西真是太銷魂了阿。
一丟進去,就算是線上環境也還好,馬上就可以看到是卡在哪裡。
class 模組馬上看到是在兩個點,跑進去追根究柢後,一個是 pear 的問題,一個卡在 mysqli 的 connect ,一量馬上發現,原來問題是出在 mysql slave ,都顧著調 master ,結果是 slave 的 connect 有時候會卡。
還好,找到問題,收工。
但是那堆 pear 還是沒辦法解決阿......哀嚎中。
Cookys' Blog
網路、工作、技術
2012年2月24日星期五
2011年9月20日星期二
FreeBSD on EC2
一些玩 FreeBSD on EC2 的筆記,免費的 Free Usage Tier 因為速度比較慢所以都直接裝 package ...
剛登入馬上去生 user :
mkdir -p /home
adduser
把 user 加進 wheel 群組裡
然後更新一下系統
freebsd-update fetch install
裝一下基本的 package
pkg_add -r vim-lite screen subversion cmake rsync
然後到 ec2 panel 裡面把 ip bind 好,firewall 該設定的搞定,就有一台 FreeBSD box 了!
---
不過不是我在說,他真的很慢...
---
Unix Benchmark Utility v.0.3
Copyright (C) July, 1999 PhysTech, Inc.
Author: Sergei Viznyuk <sv@phystech.com>
http://www.phystech.com/download/ubench.html
FreeBSD 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Aug 4 15:39:43 UTC 2011 root@ip-10-17-5-252:/usr/obj/i386/usr/src/sys/XEN i386
Ubench CPU: 66222
Ubench MEM: 25839
--------------------
Ubench AVG: 46030
剛登入馬上去生 user :
mkdir -p /home
adduser
把 user 加進 wheel 群組裡
然後更新一下系統
freebsd-update fetch install
裝一下基本的 package
pkg_add -r vim-lite screen subversion cmake rsync
然後到 ec2 panel 裡面把 ip bind 好,firewall 該設定的搞定,就有一台 FreeBSD box 了!
---
不過不是我在說,他真的很慢...
---
Unix Benchmark Utility v.0.3
Copyright (C) July, 1999 PhysTech, Inc.
Author: Sergei Viznyuk <sv@phystech.com>
http://www.phystech.com/download/ubench.html
FreeBSD 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Aug 4 15:39:43 UTC 2011 root@ip-10-17-5-252:/usr/obj/i386/usr/src/sys/XEN i386
Ubench CPU: 66222
Ubench MEM: 25839
--------------------
Ubench AVG: 46030
2011年8月8日星期一
2010年5月5日星期三
用 ramdisk 加速 freebsd 編譯 ports 的速度
剛剛在很苦命的編譯 ports , 機八鴨提供了一個很有用的方式,就是把編譯過程中會產出的 object file 全都塞到 RAMDISK 中(反正現在 RAM 都很大也不知道拿來做什麼),加上 FreeBSD 8 的 ports 開始支援多核心的 make jobs 編譯,速度可說真是飛快。
作法很簡單:
先蓋一個 RAMDISK (這裡是開 512M, 可以自己調整)
然後讓他能寫入
接下來去 /etc/make.conf 把 obj 會產生的目錄指過去
然後去編看看,就會發現速度差很多。
然後懶人大法當然是要 shell script 一下:
然後機八鴨還好心建議不要直接打 make install clean 而是用先用 pkg_add 把 package 裝完,然後再用 portmaster -bDGtw -m FORCE_PKG_REGISTER=yes 來升級,那他每次在編完每一個 ports 後都會自動清掉 obj 而不是像原本的 ports system 會全部裝完成功後才 clean。
作法很簡單:
先蓋一個 RAMDISK (這裡是開 512M, 可以自己調整)
/sbin/mdmfs -M -S -o async -s 512m md0 /tmp/portsobj
然後讓他能寫入
/bin/chmod 777 /tmp/portsobj
接下來去 /etc/make.conf 把 obj 會產生的目錄指過去
WRKDIRPREFIX=/tmp/portsobj
然後去編看看,就會發現速度差很多。
然後懶人大法當然是要 shell script 一下:
#!/bin/sh
case "$1" in
create)
/sbin/mdmfs -M -S -o async -s 512m md0 /tmp/portsobj
/bin/chmod 777 /tmp/portsobj
echo "512M ramdisk created on md0 and mounted on /tmp/portsobj"
exit 0
;;
destory)
/sbin/umount /tmp/portsobj
/sbin/mdconfig -d -u 0
echo "ramdisk umounted from /tmp/portsobj and destory from md0"
;;
*)
echo "Usage: `basename $0` {create|destory}" >&2
exit 64
;;
esac
然後機八鴨還好心建議不要直接打 make install clean 而是用先用 pkg_add 把 package 裝完,然後再用 portmaster -bDGtw -m FORCE_PKG_REGISTER=yes 來升級,那他每次在編完每一個 ports 後都會自動清掉 obj 而不是像原本的 ports system 會全部裝完成功後才 clean。
2009年11月7日星期六
APTOS Design LAB 的 ADA-U21W
這幾天鴨子在物色他的喇叭,恰巧在 crazymike 看到APTOS Design LAB 的 ADA-U21W 在放送,於是就手滑不小心跟進了。
當中的小插曲是:最近勸拜成功,林大哥看到我幫家弟買得小黑 T400 PU9 品像不錯價格誘人,就也叫我幫他處理一台來。並且連自取也不用了,直接貨到付款寄到指定地點。然後又很剛好得我在 crazymike 填的送貨地點是同一個,又非常碰巧的,crazymike 跟 T400 賣家都是用相同的宅配,所以到貨的那天早上,先是接了宅配的電話
宅配:「請問是林先生嗎,這裡未您送貨到付款,款項為 XXXXX ,請問您在指定的送貨地點嗎?」
我:「(睡臉惺忪)哦,有,送過去就好了。」
然後起身打給林大哥,請他去收貨,轉頭繼續睡。過沒多久,林大哥打回來:「喂,黑咧頭家美賣捏~瓦嘎咩電鬧歌頌哇冷ㄟ啦吧~金夙昔捏~(那個老闆不錯哦,跟他買電腦還寄了兩組喇吧來哦,很不錯哦)」。瞬時之間從床上笑到床下,因為那是我等了好幾天的 ADA-U21W 阿。
這組東西其實很有趣,他是走 USB 介面直接吃 USB Audio Device 然後把聲音播放到喇叭上,然後由主要的機身扮演著 USB DAC + Amplifier ,推動兩個被動式音箱且「不需外接電源」。會引起我興趣的地方其實是因為現在我的位置上只有耳機,但我不太喜歡耳機聽過久,雖然有 5021 掛在牆上,但是一般時間又不好意思開泰大聲,需要一組用來放音樂用的。尤其是,最好是能獨力只播音樂,其他的系統、城市音效都可以不要播放。這樣看來,獨立的USB Audio Device 剛好符合規格呢!
當一切就緒的時候,將 usb 插上電腦,看到他跳出偵測裝置,成功安裝標準驅動,一切安好。但是打開音樂播放器卻無法播放,臉綠了一半。最近不會運氣這麼好吧,連這都中大獎阿?還好我有兩組,在拿另一個來試,還是一樣。不會吧,又是 Windows 7 64bit 的錯嗎?還好我還有 32 bit版,測了,還是不會動,都可以看到裝置卻沒聲音。所幸在把旁邊的 windows xp 拿來測,咦,一切正常?生氣了,在拿出 ubuntu 測,也一切 OK?
真是奇怪, USB Audio Device 是走標準的東西沒道理其他會動獨缺 Win7 壞事吧。於是搞了一個下午,也換了 ASIO driver ,硬上有的沒的驅動,都不會動,但是看著 XP 卻播的虎虎生風。搞到最後發現解法了。
如果你也是 ADA-U21W ,或是 Biforst 的 Bu20360 的產品,在 Windows 7 下遇到有裝置沒聲音的話可以試試看這個解法:

到控制台開啟「聲音」

在 USB Audio Device 選內容,切到增強功能,勾選「停用所有增強」
然後就過著幸福快樂的生活吧。
Related Info Here.
當中的小插曲是:最近勸拜成功,林大哥看到我幫家弟買得小黑 T400 PU9 品像不錯價格誘人,就也叫我幫他處理一台來。並且連自取也不用了,直接貨到付款寄到指定地點。然後又很剛好得我在 crazymike 填的送貨地點是同一個,又非常碰巧的,crazymike 跟 T400 賣家都是用相同的宅配,所以到貨的那天早上,先是接了宅配的電話
宅配:「請問是林先生嗎,這裡未您送貨到付款,款項為 XXXXX ,請問您在指定的送貨地點嗎?」
我:「(睡臉惺忪)哦,有,送過去就好了。」
然後起身打給林大哥,請他去收貨,轉頭繼續睡。過沒多久,林大哥打回來:「喂,黑咧頭家美賣捏~瓦嘎咩電鬧歌頌哇冷ㄟ啦吧~金夙昔捏~(那個老闆不錯哦,跟他買電腦還寄了兩組喇吧來哦,很不錯哦)」。瞬時之間從床上笑到床下,因為那是我等了好幾天的 ADA-U21W 阿。
這組東西其實很有趣,他是走 USB 介面直接吃 USB Audio Device 然後把聲音播放到喇叭上,然後由主要的機身扮演著 USB DAC + Amplifier ,推動兩個被動式音箱且「不需外接電源」。會引起我興趣的地方其實是因為現在我的位置上只有耳機,但我不太喜歡耳機聽過久,雖然有 5021 掛在牆上,但是一般時間又不好意思開泰大聲,需要一組用來放音樂用的。尤其是,最好是能獨力只播音樂,其他的系統、城市音效都可以不要播放。這樣看來,獨立的USB Audio Device 剛好符合規格呢!
當一切就緒的時候,將 usb 插上電腦,看到他跳出偵測裝置,成功安裝標準驅動,一切安好。但是打開音樂播放器卻無法播放,臉綠了一半。最近不會運氣這麼好吧,連這都中大獎阿?還好我有兩組,在拿另一個來試,還是一樣。不會吧,又是 Windows 7 64bit 的錯嗎?還好我還有 32 bit版,測了,還是不會動,都可以看到裝置卻沒聲音。所幸在把旁邊的 windows xp 拿來測,咦,一切正常?生氣了,在拿出 ubuntu 測,也一切 OK?
真是奇怪, USB Audio Device 是走標準的東西沒道理其他會動獨缺 Win7 壞事吧。於是搞了一個下午,也換了 ASIO driver ,硬上有的沒的驅動,都不會動,但是看著 XP 卻播的虎虎生風。搞到最後發現解法了。
如果你也是 ADA-U21W ,或是 Biforst 的 Bu20360 的產品,在 Windows 7 下遇到有裝置沒聲音的話可以試試看這個解法:

到控制台開啟「聲音」

在 USB Audio Device 選內容,切到增強功能,勾選「停用所有增強」
然後就過著幸福快樂的生活吧。
Related Info Here.
2009年9月10日星期四
pf.conf + pppoe 造成錯誤而無法載入 pf rule 的解法
如果遇到 PF + PPPOE 一起混著用的時候,又有 Lan connection ,有時候會開起來後 pf rule 完全沒被載入。這問題的起因就是,當 pf 先載入的時候 PPPOE client 還沒有把 daemon 跑起來,除了不知道 gateway 的 IP 外有可能連 Interface 都還沒出現。如果是 Interface 還沒出現的話,只要把該 interface (通常 pppoe 會是 tun0) 用括號包起來,像是:
這樣 pf 就不會檢查 $ext_if_fttb 是不是存在,而如果有用到 PPPOE 的 gateway 的話則可以換成:
這樣就不用每次重開完之後還要手動進去 pfctl -f /etc/pf.conf 了。
ext_if_fttb="tun0"
nat on $ext_if_fttb inet from $internal_net to {!$internal_net,!$sparq_net} -> ($ext_if_fttb)
這樣 pf 就不會檢查 $ext_if_fttb 是不是存在,而如果有用到 PPPOE 的 gateway 的話則可以換成:
gw_if_fttb="(tun0:peer)"
這樣就不用每次重開完之後還要手動進去 pfctl -f /etc/pf.conf 了。
2009年9月4日星期五
Play With ADP1
先隨手記下一些資源再來整理:
官方 ADP1 ROM
ADB cat log
非官方 ROM list
adb logcat vending:V *:S
APPS:
connectbot
通話紀錄++
aTrackDog
Phonalyzr
官方 ADP1 ROM
ADB cat log
非官方 ROM list
adb logcat vending:V *:S
APPS:
connectbot
通話紀錄++
aTrackDog
Phonalyzr
訂閱:
文章 (Atom)