2020-03-30 | UNLOCK

不嚴謹的v2Ray服務端內存佔用測試

測試環境

服務器

機房: 谷歌雲香港
配置: e2-micro (2vCPU, 1GB RAM)
操作系統: Debian 9
加速內核: BBRPlus

v2Ray

模式: ws+tls+web+cdn
web服務器: caddy v1.0.4 with tls.cloudflare plugin (in docker)
v2Ray版本: v2Ray v4.22.1 (in docker)
v2Ray aid: 36
v2Ray buffersize: defalut
cdn:cloudflare

網絡環境

台灣中華電信100M家寬配便宜wifi路由器,連接速率在20~40M之間浮動。不過這個測試是有關服務器的,客戶端網絡不是很重要,只要別太差就行。

客戶終端

iPhone 8 + Shadowrockets
Xiaomi 9 SE + v2RayNG
mBPR TB 2018 Late + v2rayX

測試方法

用三台終端依序連上同一台服務器,打開Youtube持續播放1080p視頻,模擬正常使用者行為,然後觀察GCP Console中內存的增加情形。這樣的測試方法很不嚴謹,不過我只想知道1G服務器能不能支持20人同時在線,所以測個大概就行。事實上大概10人同時連接,出口帶寬就爆了,如果測試結果1G內存的主機的理論最大連接終端數超過10人,應付日常翻牆己經綽綽有餘。

測試結果


每多一個客戶終端連接,會增加15-20MB左右的內存佔用。以每個終端佔用20M計算,1G RAM扣掉Docker和Caddy佔去的480MB(圖中gcp0-tokyo的數值),大概能承受25人同時在線。

增加連接數量的嘗試

caddy

將Caddy的docker image換成alpine

既然每個終端佔用的內存是差不多的,如果能降低caddy的內存佔用,理論上就能挪出更多空間給v2Ray。因此我首先試著把原本裝在ubuntu image裡的docker換成alpine image,結果雖然container變小了,內存佔用並沒有減少。

更改Caddy的timeouts設置

根據這篇caddy官方社群的問答,得知使用cloudflare官方api和tls.cloudflare插件時,cloudflare緩存服務會持續與caddy連接,設置timeouts{idle 5m}可以解決。實測減少了30MB的內存佔用。

不用docker直接部署

理論上可以減少一點內存佔用,但為了部署方便我選擇犧牲一點內存。

v2Ray

更改v2Ray的AID (推荐)

v2Ray官方推薦的作法。將AID從36改成6之後,每個終端佔用的內存下降到8-10M,幾乎少了一半。大概的最大連接數從25人提升到50人,夠了。

更改v2Ray的bufferSize

現在v2Ray的內存佔用己經很低了,官方不再推薦修改bufferSize,而且bufferSize太低會影響上網體驗,想追求極限的朋友可以自己嘗試。

結論

  1. 內存512MB的VPS不要用docker和caddy,直接用v2ray內置的ws+tls
  2. 內存1024MB的機子可以放心用四件套,最多50人連沒問題
  3. f1-micro實例每月$4.5,512MB內存,e2-micro實例每月$6.5,1GB內存,推薦白嫖黨選擇谷歌雲的e2-micro實例架設代理。
  4. 用Cloudflare API需要設置timeouts,避免cf緩存服務器一直與你的caddy server連接又不斷開,佔用內存。
  5. 比起內存,影響同時在線終端數量的瓶頸是帶寬,實際上10人左右就可能把服務器出口帶寬用完了(數字依出口帶寬大小而定)。通常來說,VPS的內存1G以上絕對足夠滿足跑滿帶寬所需要的用戶數量
  6. Alter ID對內存佔的影響十分顯著,官方建議值是16。實測AID 6時,每終端佔用服務器內存8-10M;AID 36時,每終端佔用服務器內存15-20M。個人建議在內存低的機器上不要設超過40。
  7. v2Ray對CPU要求不大,升級服務器配置時優先考慮升級內存

Acknowledgement

感謝v2fly官方TG群, v2fly-random群的群友討論。

Reference

評論加載中