WebSocket輕松單臺服務器5w并發jmeter實測

測試結論

  1. nginx最多只能維持(65535*后端服務器IP個數)條websocket的長連接,如果后端websocket服務器IP只有一個,那么就只能最多支持65535條連接。瓶頸就產生在了nginx上
  2. 建議采用LVS的DR模式來做負載均衡,這樣最大長連接數目就只和websocket服務器資源(主要是內存)有關了,單臺websocket服務器很輕松可以支撐百萬級連接

websocket 相關配置

<Connector port="9999"  protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" acceptCount="150000"maxThreads="2000" maxConnections="150000" enableLookups="false"  redirectPort="8443"  />
復制代碼
  • connectionTimeout——默認設置為20秒。通過修改該參數,可以修改tomcat的請求超時時間

  • acceptCount——當tomcat的線程數達到maxThreads后,新的請求就會排隊等待,超過排隊數的請求會被拒絕,acceptCount最好大于等于maxThreads

  • maxThreads:

    (1)、部署的程序偏計算型,主要利用cpu資源,應該將該參數設置小一點,減小同一時間搶占cpu資源的線程個數。 (2)、部署的程序對io、數據庫占用時間較長,線程處于等待的時間較長,應該將該參數調大一點,增加處理個數。

  • maxConnections——這個值表示最多可以有多少個socket連接到tomcat上。NIO模式下默認是10000

  • enableLookups——為了消除DNS查詢對性能的影響我們可以關閉DNS查

Nginx

 location ^~ /wnhz/websocket/ {proxy_connect_timeout 60s;——該指令設置與upstream server的連接超時時間,有必要記住,這個超時不能超過75秒proxy_read_timeout 3600s;——該指令設置與代理服務器的讀超時時間。它決定了nginx會等待多長時間來獲得請求的響應。這個時間不是獲得整個response的時間,而是兩次reading操作的時間proxy_send_timeout 60s; ——這個指定設置了發送請求給upstream服務器的超時時間。超時設置不是為了整個發送期間,而是在兩次write操作期間。如果超時后,upstream沒有收到新的數據,nginx會關閉連接proxy_http_version 1.1;——支持websocketproxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_pass http://test/websocket/;}---------------------   官方配置--------------------------------------location /chat/ {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}
復制代碼

用nginx做websocket的反向代理資源瓶頸原理

  1. 內存(相關數據結構的存儲)、cpu、網絡
內存的占用分兩部分,一部分是內核中tcp協議棧結構占用的內存,一部分是nginx中維持雙向連接數據結構占用的內存按照理想狀況,一條tcp連接的數據結構在內存中占用大約4KB左右,nginx的內存占用,沒有統計相關的結構體,這里就等于2KB(nginx的內存利用非常高效,有內存池)對于現在的服務器來說內存、cpu、網絡都不會是瓶頸,因此這里不做討論
復制代碼
  1. 文件描述符數量
可能需要調整內核參數,文件描述符的數量其實也是和內存相關的,因為每打開一個tcp連接,就得占用一個文件描述符。內核參數:fs.file-max這是和系統資源相關的,也不會是瓶頸
復制代碼
  1. 端口號數量
內核參數為:net.ipv4.ip_local_port_range,且最大值為65535linux內核是通過{local_ip, local_port, remote_ip, remote_port}這個四元組來標識一條唯一的tcp連接的。1)對于websocket服務器自身而言,local_ip, local_port是確定的,在內存、cpu足夠的情況下,其可以支撐 (client_ip數量*2^16)條連接。也就是說只要服務器資源足夠,一定不會是瓶頸。2)對于nginx服務器來說,local_ip, local_port也是確定的,不同的是,它還要作為client去連接websocket服務器,這是要占用一個端口的。因此,nginx能支撐的websocket連接數最大為:(代理的websocket服務器IP數量*2^16),如果只有一個websocket服務器IP,那么就只有65536,去掉0端口,就只有65535.
復制代碼

Linux測試5wWebSocket連接

百度介紹相關可自行測試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536465.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536465.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536465.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人工智能的歷史

AI(Artificial Intelligence)即人工智能&#xff0c;最初是在1956 年被提出&#xff0c;人工智能研究如何用計算機去模擬、延伸和擴展人的智能&#xff1b;如何把計算機用得更聰明&#xff1b;如何設計和建造具有高智能水平的計算機應用系統&#xff1b;如何設計和制造更聰明的…

nginx配置 vue打包后的項目 解決刷新頁面404問題|nginx配置多端訪問

訪問vue頁面時&#xff0c;/# 使url看著不美觀&#xff0c;使用 H5 history模式可以完美解決這個問題&#xff0c;但需要后端nginx幫助。接下來我們自己配置一下。 使用前端路由&#xff0c;但切換新路由時&#xff0c;想要滾動到頁面頂部&#xff0c;或者保持原先的滾動位置&a…

算法導論2nd 10.1-7

為什么80%的碼農都做不了架構師&#xff1f;>>> 思路&#xff1a;兩個隊列q1和q2&#xff0c;兩個隊列指針pusher和poper分別指向q1和q2&#xff0c;push時調用pusher->enqueue&#xff0c;然后將poper里的元素全部dequeue并enqueue到pusher&#xff0c;最后交換…

阿里云Windows2012 R2服務器IPV6配置記錄

要上蘋果APP&#xff0c;則必須要支持IPV6和HTTPS&#xff0c;阿里云本身沒有開放IPV6地址。因此需要進行IPV6的相關配置。查了很多IPV6的配置資料&#xff0c;最終選擇用HE進行IPV6設置。在這過程中遇到一些問題&#xff0c;以記錄下來以備注。 1、IPV6 Tunnel Broker設置 在H…

mycat 1.6.5 for mysql 8分表攻略

2019獨角獸企業重金招聘Python工程師標準>>> 簡述 mycat 對于 mysql 的支持有版本要求&#xff0c;目前 1.6.5 不支持 mysql 8.0 版本。因為mysql 8.0 的加密方式發生了變化。 mycat 1.6.5 連接 mysql 8.0 的兩個方式 mysql 8.0 采用兼容方式&#xff0c;&#xff0…

Funcode-貪吃蛇

自己編寫的一個小游戲&#xff0c;本來打算做貪吃蛇&#xff0c;結果不會使蛇的身子隨蛇頭方向改變而改變就換了種想法&#xff0c;最后變成了這樣一個另類的小游戲&#xff0c;“笑哭“&#xff0c;下面是程序的主要代碼&#xff0c;如果有興趣也可以下載完整程序代碼資源&…

mac 使用遠程連接

https://www.jianshu.com/p/9cc90361f37a轉載于:https://www.cnblogs.com/xiangsj/p/10876400.html

systemtap執行過程中報probe timer.profile registration error

probe timer.profile registration error 今天在執行火焰圖的過程中&#xff0c;代碼報錯&#xff0c;probe timer.profile registration error 經過查詢、分析可能是在該平臺該函數是不安全、不共享的。 將 probe timer.profile { 用該代碼替換即可 probe perf.sw.cpu_clock !…

(十三)java版spring cloud+spring boot+redis社交電子商務平臺-springboot集成spring cache...

電子商務社交平臺源碼請加企鵝求求&#xff1a;一零三八七七四六二六。本文介紹如何在springboot中使用默認的spring cache&#xff0c;聲明式緩存Spring 定義 CacheManager 和 Cache 接口用來統一不同的緩存技術。例如 JCache、 EhCache、 Hazelcast、 Guava、 Redis 等。在使…

搭建gitlab及部署gitlab-runner

2019獨角獸企業重金招聘Python工程師標準>>> 1、搭建gitlab,之前yum安裝gitlab,安裝后一直報502錯誤,網上百度試過還是無法使用; 所以這次部署在docker里面;如下命令&#xff1a; docker run --detach --hostname gitlab.forebix.com --publish 4433:443 --publish …

母牛的故事

母牛的故事 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 有一對夫婦買了一頭母牛&#xff0c;它從第2年起每年年初生一頭小母牛。每頭小母牛從第四個年頭開始&#xff0c;每年年初也生一頭小母牛。請編程實現在第n年的時候…

軟件性能測試

通常&#xff0c;衡量一個軟件系統性能的常見指標有&#xff1a; 1、響應時間&#xff08;服務器端響應時間、網絡響應時間、客戶端響應時間&#xff09; 那客戶感受的響應時間其實是等于客戶端服務器端網絡響應時間 2、吞吐量 軟件系統在每單位時間內能處理多少個事務/請求/單…

王小二切餅

王小二切餅 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 王小二自夸刀工不錯&#xff0c;有人放一張大的煎餅在砧板上&#xff0c;問他&#xff1a;“餅不許離開砧板&#xff0c;切n(1<n<100)刀最多能分成多少塊&…

SmoothNLP 中文NLP文本處理工具 Python 實戰示范

SmoothNLP pythonJavaPython python interfaces for SmoothNLP 的 Python 接口&#xff0c; 支持自動下載底層jar包 &#xff0c;目前支持Python3 Pypi 官方安裝 pip3 install smoothnlp 復制代碼請注意使用python3安裝smoothnlp項目&#xff0c;當前版本 version0.2.4 如果您使…

本地緩存Caffeine

Caffeine 說起Guava Cache&#xff0c;很多人都不會陌生&#xff0c;它是Google Guava工具包中的一個非常方便易用的本地化緩存實現&#xff0c;基于LRU算法實現&#xff0c;支持多種緩存過期策略。由于Guava的大量使用&#xff0c;Guava Cache也得到了大量的應用。但是&#x…

《圖解HTTP》核心知識總結

HTTP協議的簡介 HTTP是超文本傳輸協議&#xff0c;用于客戶端和服務器端之間的通信&#xff0c;屬于TCP/IP中的應用層。 HTTP協議的基礎知識 客戶端和服務器端 客戶端是服務請求方&#xff0c;服務器端是服務提供方。 URI和URL URI:URI是統一資源標識符&#xff1b; URL:是統一…

1042: 篩法求素數

1042: 篩法求素數 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1387 Solved: 918 [Submit][Status][Web Board] Description 用篩法求之N內的素數。 Input N Output 0&#xff5e;N的素數 Sample Input 100 Sample Output 2 3 5 7 11 13 17 19 23 29 31 37 4…

狀態機解析請求行

微信公眾號&#xff1a;鄭爾多斯關注「鄭爾多斯」公眾號 &#xff0c;回復「領取資源」&#xff0c;獲取IT資源500G干貨。升職加薪、當上總經理、出任CEO、迎娶白富美、走上人生巔峰&#xff01;想想還有點小激動關注可了解更多的Nginx知識。任何問題或建議&#xff0c;請公眾號…

GO 從零開始的語法學習二

for循環 if條件里不需要括號 err ! nil 判斷是否為空 func main(){const filename "abc.txt"contents , err : ioutil.ReadFile(filename); err ! nil{fmt.Println(err)} else{fmt.Printf("%s\n",contents)} } 復制代碼if的條件里可以進行賦值if的條件里…

7個有用的Vue開發技巧

1 狀態共享 隨著組件的細化&#xff0c;就會遇到多組件狀態共享的情況&#xff0c;Vuex當然可以解決這類問題&#xff0c;不過就像Vuex官方文檔所說的&#xff0c;如果應用不夠大&#xff0c;為避免代碼繁瑣冗余&#xff0c;最好不要使用它&#xff0c;今天我們介紹的是vue.js …