伺服器的執行緒承載量詳細的計算推理過程

2021-10-19 21:41:38 字數 801 閱讀 3318

jvm記憶體

stack:棧空間。用於執行**塊的。每乙個執行緒獨享乙個stack

heap:堆空間。用於儲存物件的。所有執行緒共享乙個heap

method area:方法區。在jdk1.8中,hotspot提供的jvm中沒有方法區,取而代之是堆記憶體中的永久代和元空間。用於類資訊的/用於儲存類的位元組碼物件的。所有執行緒共享乙個method area

native stack:本地方法棧。用於執行本地方法的 - 被native修飾的用其他語言完成的方法稱之為本地方法。每乙個執行緒獨享乙個native stack

program counter:程式計數器。對指令來進行計數的。每乙個執行緒獨享乙個program counter

一台伺服器的執行緒承載量由cpu、記憶體共同決定,其中記憶體影響更大

考慮:棧記憶體、本地方法棧、pc計數器更能影響執行緒的數量

pc計數器非常小,只佔幾個位元組大小,可以忽略不計

本地方法棧的大小由執行的方法的邏輯和語言決定

棧內存在jdk1.8中規定不能小於128kb

考慮極端情況:忽略pc計數器以及本地方法棧,棧記憶體按最小來算,這種情況下,一台伺服器能夠承載多少執行緒

在jvm中,規定棧記憶體之和不能超過物理記憶體的2/3

假設一台伺服器的記憶體條為128g,那麼實際使用記憶體大概在115g

115g*2/3/128k≈628053

實際執行過程中,能否忽略掉本地方法棧? - 不能

那麼這個時候算出來的數量就需要至少進行折半

628053 -> 314026

如果執行邏輯複雜,棧記憶體不是按照最小來算,那麼這個數量還得減少

關於伺服器併發量的簡單計算

最簡單的計算方式就是根據伺服器頻寬與頁面的大小 1.假設機房頻寬為10mbs,頁面的大小為20kb 包含所有的js css 同時併發量的理論值 10 1024 8 20 64個請求 秒 理論上1秒鐘同時可以有64個請求訪問頁面。注意 10mbs是位 b 1個位元組8位,所以要除8。2.假設進來的人是...

多執行緒的伺服器

許多實際應用要求伺服器具有同時為多個客戶提供服務的能力。用多個執行緒來同時為多個客戶提供服務,這是提高伺服器的併發效能的最常用的手段。主要有3種方式來實現 第一種方式的不足之處 執行緒池為執行緒生命週期開銷問題和系統資源不足問題提供了解決方案。執行緒池中預先建立了一些工作執行緒,它們不斷從工作佇列中...

配置jupyter伺服器的密碼 詳細

配置jupyter伺服器的密碼,有什麼用呢?1.安全性 2.方便記住密碼 因為是自己設定的嘛 首先,使用pip或者conda安裝好jupyter並按照慣例配置好環境變數之後,生成jupyter配置檔案目錄和檔案 在shell下面執行下述命令,在windows10的user jupyter下面會生成乙...