我正在為我的公司創建工具來對我們的系統進行負載測試。我目前有用 Python 編寫的工具,但我正在探索使用 Go 的選項,希望能夠提高效率和性能,因為我們需要同時生成數百萬個用戶(每個盒子有數千個用戶)并且每一點都很重要。我的用戶主要對我們的系統進行 http 調用,我需要一個非常輕量且高效的 http 客戶端。對于我們的Python工具,以前的員工有一些手動處理和重用套接字的功能,并且完全忽略了cookie。雖然我對 Go 完全陌生,但到目前為止我已經比較了多種 Go 網絡實現,并且我對 CPU 和網絡使用情況感到滿意,因此我認為我還不需要手動管理套接字,但是RAM 使用量比我們的 Python 解決方案高出數倍。我懷疑這是由于這些 Go 實現自動維護和管理 cookie,因為其他更高級別的 Python 庫也做了同樣的事情。我正在尋找方法讓我的http客戶端禁用/阻止/忽略所有cookie來解決我的問題或排除cookie作為我的內存膨脹的罪魁禍首。我使用了一個簡單的net/http Get()調用fasthttp來創建一個客戶端,該客戶端重用每個主機的不同數量的連接(1000+),并創建一個net/http.Client帶或不帶自定義Transport. 我已經習慣了pprof記住每一個配置文件。在不覆蓋 cookie 的情況下,我的 http.Client 流程似乎內存膨脹最少,而 fasthttp 內存膨脹最多。我嘗試瀏覽他們的所有文檔并搜索 SO 和網絡,但找不到任何明確忽略或阻止 cookie 的內容。我發現最接近的是用于請求和響應的 fasthttp DelAllCookies(),但是調用它們對內存使用沒有明顯的影響。我已經研究過net/http/cookiejar設置自定義 jar 和策略net/http.Client但這看起來更像是一種存儲和使用 cookie 數據的方法,我不想這樣做,而且我沒有看到一種方法來設置完全忽略 cookie 的策略。同樣,這些可以正常工作,但是當我使用boomer同時運行數千個這些時,我最終會使用多個 GB 的 RAM,而我們的 Python 套接字實現則使用 1-1.5 GB 的 RAM。我如何阻止/忽略 cookie,或者確保 cookie 不會耗盡我的所有內存?
2 回答

一只甜甜圈
TA貢獻1836條經驗 獲得超5個贊
Fasthttp 總是將完整的響應加載到內存中。因此,如果您有較大的響應主體并希望限制內存使用,那么它可能不是您的最佳解決方案。
Fasthttp 還通過將緩沖區保留在內存中并重用它來以內存使用換取 CPU 使用,而不是花費 CPU 周期讓垃圾收集器收集這些緩沖區。
使用多個 GB 內存似乎很多。在這種情況下,您正在查看 RSS 還是虛擬內存?

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
cookie 只是響應中包含的標頭。您無法阻止服務器返回標頭。你只能接受并在記憶中閱讀。雖然瀏覽器可以禁用本地 cookie,但仍然無法阻止服務器返回帶有 set-cookie 標頭的標頭。
至于Fasthttp,我看了一些源代碼,發現它使用了很多同步。Pool是為了提高性能,但是我沒有發現它的目的是為了節省內存。它的目的只是為了快。
如果你非常看重內存,我建議干脆把它包在http/net上或者另找一個包,而不是使用fasthttp,因為fasthttp不適合壓力測試。
- 2 回答
- 0 關注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消