Erlang C1500K長連線推送服務 效能

2022-02-12 18:38:23 字數 2350 閱讀 7702

erlang 作為長連線閘道器有著天生的優勢:

- 擅長與io密集型業務,也要求將閘道器設計盡量簡單,認證完後,簡單解析報頭,就直接將請求**給後端服務處理

- 網路層有beam c 實現得非常高效 ,erlang **只是簡單流程控制,也就是說**效能很接近優化的很好c程式

- **簡單,易維護,erlang 程序和連線一對一關係,**500行左右

- 基於程序gc,node 記憶體多大也不用擔心stop of word

- 熱公升級,閘道器設計本盡量簡單,減少公升級,但也不可避免,熱公升級保證不斷連線

- 穩定,beam 足夠穩定,即使天天更新的服務,連續一兩年不重啟也正常

- 多語言混合,後端可很容易使用其他語言實現

劣勢:cpu密集型業務,效能差,如果不想用c解包,盡量使用二進位制協議,盡量將包協議標識放在包體固定位置,方便dispatch

- 服務端: r620 2*(e5-2620 6核心12執行緒)/mem:128gb

- 客戶端:r620 2*(e5-2620 6核心12執行緒)/mem:48gb(5臺*5 ip,共25ip)

1. beam 啟動引數

+sbt db 繫結排程器與cpu的親緣性

+p 2000000 程序數限制(合適即可)

+k true 啟用epoll

+sbwt none 關閉beam 排程器 spinlock,降低cpu

+swt low 提高排程器喚醒靈敏度,避免長時間執行睡死問題

參考我另外一篇:erlang cpu 相關引數調整

2. erlang 網路庫:ranch 需要修改

- 配置acceptors 數量1024,backlog 32768

同時系統backlog調整: net.core.somaxconn, net.core.netdev_max_backlog, net.ipv4.tcp_max_syn_backlog 32768

- 刪除新加連線時的 ranch_sup 和 connection monitor,占用記憶體且用處不大,同時單程序熱點問題,也造成backlog 無法及時處理

- acceptor 設定 process_flag(prority, high),否則因為公平排程問題,即使cpu不高,backlog 無法及時得到處理

3. erlang記憶體占用

因為erlang gc 基於程序,每個連線對應乙個程序,每個連線的業務量都很小。那樣就會造成一種現象數百w程序內都有一點垃圾,無法得到gc。

使用hibernate,erlang:hibernate 會清空但前呼叫棧,並強制gc,下次程序收到訊息後,會通過引數mfa繼續執行。

使用gen_server 簡單的在沒有個包處理完後,都加上hibernate, cpu無明顯增加情況下,可將記憶體使用降低到1/3 以下,非常值得使用。

-客戶端在5臺機器,25個ip,開啟 tcp_tw_reuse tcp_tw_recycle 後每個ip穩定跑6w連線還是沒問題的。

- 6k/s 登陸、認證、心跳、退出 操作

- 1w/s 訊息推送、ack

- 執行12 小時

ss -s

total: 1500254 (kernel 1500317)

tcp: 1500090 (estab 1500077, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 74transport total ip ipv6

* 1500317 - -raw 0 0 0udp 0 0 0tcp 1500090 1500090 0inet 1500090 1500090 0frag 0 0 0

閘道器機器:

- cpu 500%

- 網絡卡 6w/s tcp packet in/out

- node mem 12gb (內部memory(total) 顯示實際使用9gb)

- kernel mem 11gb

- 也就是150w連線,使用了23gb記憶體,每個連線占用15kb,約一半是核心使用,erlang 使用記憶體並不多。

- 在如此業務量壓力下,500% cpu表現也不俗,隨無法和c相比,但其多核擴充套件性好。

- 伺服器有24核心,但環境其他服務、客戶端ip數限制,沒有繼續增大壓力,理論上單機200~300w 連線,5w/s 訊息推送 應該不是問題。

erlang c 跨語言呼叫設計

我們的 倉庫裡面存在很多c語言的庫,基於執行效率或工作量的考慮,我們不想 使用erlang重寫相關庫,我們想在erlang中像使用erlang庫一樣方便地使用c庫,vcall erlang版 正是在這種背景下出現的。vcall erlang版本 後面簡稱 vcall。使用vcall時,我們只需要呼叫...

早到的加分150

首先,因為我去青島出差,耽誤了一周的課程向大家道歉,耽誤的課程都會補回來。對於某一專業或學科的興趣,其實是乙個很難回答的問題。有很多人因為各種各樣的原因,最終從事的工作和自己的興趣一點關係都沒有,但是生活就是生活,人必須的生存下去,生存是發展的根本。因此既然選擇了這個專業,就得走下去,除非具有依賴別...

佳能fax l150如何列印 佳能l150說明書

佳能l150傳真機說明書,佳能官方為了保證使用者盡快掌握l150的使用方法專門製作了這份說明書,使用者可以從這份說明書裡學習到驅動安裝 裝置安裝 日常使用 各個功能設定 故障排除和維護的方法和操作,是使用前必須要看的資料。佳能l150傳真機說明書內容介紹 1 驅動安裝指南 這款傳真機的驅動安裝方法 ...