Linux 操作系統(tǒng)中nproc的值如何得出?

nproc hard的默認值是如何得到的?

一臺1C2G的RHEL6版本虛擬機,用于制作虛擬機模板,在/etc/security/limits.d/90-nproc.conf修改了用戶nproc的soft值,如下:


image.png

該配置設置了root用戶的nproc的soft值為ulimited,其他用戶的nproc的soft值為10240。然而當檢查每個用戶的nproc值的時候驚奇地發(fā)現(xiàn)用戶的nproc的hard和soft值均為7387,如下:


image.png

這個值很奇怪,用戶nproc的soft和hard值并不是10240,但是在其他主機上這個配置能夠達到預期的值。經(jīng)過分析,上面的配置中由于并沒有設置用戶nproc的hard值,導致用戶nproc的soft值受到hard值的限制,取不到預期的值,因此關鍵問題需要搞清楚hard值是由哪個因素決定的。推斷nproc的hard值是在內核獲取到的,所以翻看了內核代碼,果然在內核代碼fork.c中發(fā)現(xiàn)端倪:


image.png

其中mempages是物理內存頁的個數(shù),PAGE_SIZE(內存頁大?。?K,THREAD_SIZE(線程棧大?。﹛86平臺是16K,所以最后默認的nproc值為:

default_nproc = max_threads/2

= MemTotal(KB) / 256(KB)

即默認nproc大小取決于主機內存大小。在筆者2G內存(實際虛擬機內存為1877M,Hypervisor管理虛擬機有內存開銷)的虛擬機上,計算一下:

default_nproc = 1877*1024/256 = 7508

由于kernel會占用一部分的內存,實際的nproc(本例中為7387)要比計算值稍小一些。筆者的案例中僅僅設置了用戶nproc的soft值,所以用戶的nproc的soft值被限制在default_nproc。因此上面例子中有兩種解決方法:

  1. 評估需求,用戶的nproc要是少于7387的話,就降低;

  2. 在配置文件中,設置上用戶nproc的hard值為10240,通過提升hard值來滿足預期。

因此各位看官今后要根據(jù)主機內存配置合理地設置用戶nproc的值。

linux max_threads參數(shù)計算

內核threads線程數(shù)是一定的,具體是跟機器內存有關系
部分參數(shù)獲取方法
PAGE_SIZE:getconf PAGE_SIZE 單位byte 頁的大小 4096即4K
THREAD_SIZE:ulimit -s 8192 線程棧大小,以KB為單位,即8192K,8M

額定具體計算如下
max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 8

mempages是物理內存頁的個數(shù);
mempages計算
mempages = 物理內存大小 ÷ PAGE_SIZE

例如:32G理論內存 實際查看只有 32174M
mempages = 32174 * 1024 * 1024/4*1024 = 8236544 物理內存頁的個數(shù)

max_threads = 8236544/[(81024)/(41024)]/8 = 514784

因為為了保證每個用戶進程總數(shù)不至于超過一半內存fork_init()指定:
init_task.rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.rlim[RLIMIT_NPROC].rlim_max = max_threads/2;

即物理額定線程數(shù)為514784/2=257392
查看系統(tǒng)當前最大線程數(shù)

cat /proc/sys/kernel/threads-max
252574
free -m
              total        used        free      shared  buff/cache   available
Mem:          31596       24180         317           3        7098        6869

31596(M)1024/4=8088576(頁數(shù))
理論最大線程=8088576(頁數(shù))/[(8
1024)/(4*1024)]/8=505536
實際上內存不能都用來啟動線程,所以實際最大線程是理論最大線程的1/2稍小一些(內核運行也會占用一些線程)
理論計算值 505536/2=252768
實際值 252574
鏈接:http://www.itdecent.cn/p/3726af3c9771

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容