tcpcopy是一個基于底層的應用請求復制(所有基于tcp的packets)開源項目,可用于替代ab做在線模擬壓力測試,可轉發各種在線請求到測試服務器上,進行較為詳盡的近乎實際的測試,從而避免了新業務、系統上線帶來的潛在問題。
tcpcopy的四大功能:
1)分布式壓力測試,將多個前段請求集中到某個后端進行壓力測試
2)上線前測試,檢驗新系統可靠性,提前發現潛在問題
3)對比測試,同樣請求,針對不同或不同版本程序,可以做性能對比等試驗
4)應用熱備份,對于后端的短連接,請求丟失率非常低(1/10萬)
tcpcopy具有以下幾個特點:
1)實時轉發
2)近乎真實效果
3)對在線系統影響很小
4)操作簡單
5)分布式
6)意義非凡
使用tcpcopy非常簡單,下載源碼,編譯,按照說明,幾個步驟很快就能使用。
關于tcpcopy使用的一些注意事項有:
1)Linux平臺,內核2.6+
2)TCPCOPY類似于UDP,所以會丟包,進而丟失請求
3)本系統不支持域名,只支持ip地址
4)Local Requests,請設置lo MTU不超過1500,并且在配置文件中不要設置127.0.0.1地址,
要設置內網或者外網地址
5)TCPCOPY server有可能會成為性能瓶頸
6)丟失請求率跟網絡狀況有關,最好在內網內復制請求
7)TCPCOPY中的tcpcopy和interception程序運行需要root權限
8)TCPCOPY只與ip、tcp層的數據有關,如果請求驗證與tcp層以上的協議有關,則系統不能正常運行。
例如:mysql連接協議,由于權限認證與tcp層上面的mysql協議有關,所以復制過去的請求會被目
標測試服務器認為非法請求,這個時候需要針對mysql協議作具體針對性的處理,tcpcopy程序才能正常運行
9)程序更新非???,所以最新版本在svn上面
svn checkouthttp://tcpcopy.googlecode.com/svn/trunk/tcpcopy
10)目前追求的是功能,性能優化和代碼重構會在穩定以后進行
11)長response目前支持不是很好,將在下一個版本改進
12)如果有問題,請注意error.log文件提示的錯誤信息 (email:163.beijing@gmail.com)
13)源代碼已經轉到github
除了這些,下面是我在用tcpcopy測試mysql時的一些小結:
1) 測試MySQL時,測試機需要開啟 skip-grant-tables,否則無法正常進行,因為MySQL需要進行認證;在線服務器無需調整
2) 測試過程中不能執行flush privileges,否則上述選項會失效
3) 每次啟用tcpcopy時,都需要重啟mysqld,不能在線直接應用,否則不能轉發包(最新版本已經解決這個問題)
4) 用sysbench進行測試過程中,prepare時,在線服務器能創建測試表,測試機無法創建新表
5) 需適當調大內核參數:ip_queue_maxlen,否則會出現大量的queue dropped
6) 無法完全保證在線服務器和測試機的數據一致性,只能做為模擬線上壓力,提前進行bug測試等用途
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com