為了考察賬號服務器(AS)和網關服務器(GS)的性能,寫了一個agent。大概思路是這樣的,agent啟動后,就生成若干個連接,
比如2000個,其中1000個連接到AS,另1000個連接到GS。agent每隔一段時間,比如3s向AS請求注冊一個賬號,就是把手工注冊
的模擬一遍,賬號隨機生成,agent收到注冊成功后,會把賬號寫到一個文本文檔account.txt中。在本地大概收集了2000個賬號左
右,然后重新啟動agent,利用登錄參數模擬玩家登錄,每3秒把rand()%50個賬號發給AS,請求驗證,由于密碼我都是設置成固
定的,直接寫在代碼里了。驗證完之后,就去GS請求服務,這些服務都很簡單,基本就是獲取玩家信息,以及附加的數據等等,
這些數據加起來估計就是在1k之內。
說下遇到的問題,當連接數在500之內的時候,agent運行正常,服務器運行也不錯。top -2看了下,還比較滿意。當連接數設
置在1000的時候,也就是agent要分配2000個連接數的時候,就出問題了,跑著跑著就出現segment error了。掛在了
(gdb) bt
#0 0xb7c29328 in ?? () from /lib/tls/i686/cmov/libc.so.6
我開始懷疑是一次性分配的連接過多,ulimit看了下,是unlimited,奇怪了,而且中間過程,還有部分連接會自動斷開,這里我沒
做心跳,但是我排除了因為無心跳而無響應的可能,因為時間太短,大概有10多分鐘而已就斷開了。比較幸運的是,服務器運
行都很正常,資源分配也很正常。但是這個agent有點不給力啊,補充下,測試環境為局域網測試,可能測試結果具有片面性,
下一步再按照這個思路找問題,完善這個agent。