導航:首頁 > 操作系統 > linux進程內存限制

linux進程內存限制

發布時間:2022-08-07 15:15:17

❶ 在linux下,如何用shell控制一個進程的內存使用上限,以及運行時間上限

需求有點奇怪。
使用多少內存是可執行文件本身決定的,shell腳本只有等程序開始運行了再去檢查進程佔用內存大小,沒有辦法先行控制。
而且任何腳本語言的通病就是,執行效率低(相對於高級語言)。腳本是解釋執行的(如通過命令解釋器bash),本身語句執行就需要時間。1s對腳本來說太短了,無法做到精確控制。

腳本的優點就是:不用編譯;開發效率高(難度低,上手快);但能做的東西有限,很多操作需要調用外部工具來完成。
所以,根據要做的工作選取合適的工具,是很必要的。

❷ 如何調高linux單進程使用的內存上限

修改/etc/security/limits.conf可以調整進程內存上限, 具體看 man limits.conf
但是我覺得你的問題可能在於java
一個是java版本,我估計32位版本可能只能用4GB,若是64位的版本就不會
另一個是 java 參數 -Xmx 你先看看現在的設置然後嘗試調高,看看是否有效

❸ linux限制內存大小和時間的情況下運行程序

命令行用
ulimit -m 最大佔用內存(K)
ulimit -t 最大實際佔用cpu時間(秒)
執行以上兩個命令後 再在同一個shell進程里執行你的程序。

代碼里可以用 setrlimit 函數做限制,頭文件大概是 sys/resource.h 。

❹ Linux進程的內存使用解析

進程XXX佔用了多少內存?這是個經常被問到,也經常被答錯的問題。linux進程的內存分配是個比較復雜的話題,而linux上的工具往往把這個問題過分簡單化,因此引出不少誤解和困惑。首先把ps,
top這類工具扔掉,然後看這么一個簡單程序:[root@pczou
pczou]#
cat
./prog.c#i
nclude#i
nclude#i
nclude#i
nclude#define
ONEM
(1024*1024)
www.shiwu.com
int
func(){char
s[16*ONEM];char*
p;p
=
malloc(32*ONEM);pause();return
0;}int
main(){printf(pid:
%d/n,
getpid());func();return
0;}其中func()這個函數分配了32MB的內存,以及16MB的堆棧。運行一下這個prog程序,prog會停在pause()的位置,看看ps怎麼說:USER
PID
%CPU
%MEM
VSZ
RSS
TTY
STAT
START
TIME
COMMANDroot
4238
0.0
0.0
52396
352
pts/0
S
21:29
0:00
./progVSZ指的是進程內存空間的大小,這里是52396KB;RSS指的是駐留物理內存中的內存大小,這里是352KB。一般系統管理員知道VSZ並不代表進程真正用到的內存,因為有些空間會僅在頁表中掛個名,也就是說只是虛擬存在著,只有真正用到的時候內核才會把虛擬頁面和真正的物理頁面映射起來。比如,prog.c中用malloc()分配的32MB內存,由於程序中並沒有用到這些內存,沒有物理內存被分配,也就不應算到進程的帳上。
www.shiwu.com
進程的內存使用情況比較復雜,這是因為:進程所申請的內存不一定真正會被用到真正用到了的內存也不一定是只有該進程自己在用
(比如動態共享庫)所以酒足飯飽結帳的時候,飯館打出的帳單中往往漏洞百出,不是計入了沒上的菜,就是一個菜算了兩份錢。而ps給出的就是這樣的糊塗帳單,不足為憑。算清楚帳的唯一辦法是把每個菜都仔細過一遍,看看有沒有上,有沒有重復。下面的帳單要清楚多了:Virtual
memory
:
52396
KBEffective
VM
:
52120
KBMapped
:
352
KBEffective
mapped:
76.6
KBSole
use
:
72
KBPer
file
memory
useld-2.3.4.so
:
VM
94208
B,
M
90112
B,
S
8192
Bprog
:
VM
8192
B,
M
8192
B,
S
8192
Blibc-2.3.4.so
:
VM
1180
KB,
M
221184
B,
S
16384
B可以看出,雖然虛擬地址空間是52396KB,實際映射(a.k.a.
分配)的空間是352KB,這和ps給出的結果一致。再看Effective
Mapped這個值,僅為76.6
KB。這個值的計算方法是:有效的實際使用內存
=
該進程獨占的內存
+
共享的內存A
/共享A的進程數目
+
共享的內存B
/共享B的進程數目
+
...比如對於一個kde應用程序kontact,它用的Qt庫的虛擬地址空間為
7M,而實際映射的空間有4.5M,也就是說真正給
Qt分配物理內存大小為4.5M。假設有10個KDE應用正在運行,那麼記到kontact帳上的就不應該是4.5M,而是A-A之後的0.45M。這么算帳雖然並不十分准確,但Effective
Mapped已經足以說明進程所佔用內存的實際大小了。
www.shiwu.com
OK,最後用這個方法給系統中所有進程都結下帳:從上面的統計結果可以看出:雖然firefox的佔用虛擬空間是最大的,但其實際佔用的內存卻比X
Server要少。firefox
的實際佔用的內存和其RSS
(a.k.a.
mapped)差別不大,佔RSS的99%;而kontact的實際佔用內存卻僅佔RSS的63%,有27%的內存是共享的。由此可以粗略看出我用的窗口管理器是KDE而非Gnome,why?
因為Qt之類的共享庫被很多KDE進程分擔了。sole值可以理解為private
mapped,也就是這個進程退出後可能被釋放的內存
(對於非匿名的映射頁面可能還會存留一段時間)。作者
railon

❺ linux正常進程數是多少.

不同發行版是不同的,而且同一發行版的不同安裝(工作站、伺服器、自定義等)默認啟動的進程數也是不同的。

linux 系統中單個進程的最大線程數有其最大的限制 PTHREAD_THREADS_MAX
這個限制可以在 /usr/include/bits/local_lim.h 中查看
對 linuxthreads 這個值一般是 1024,對於 nptl 則沒有硬性的限制,僅僅受限於系統的資源。
這個系統的資源主要就是線程的 stack 所佔用的內存,用 ulimit -s 可以查看默認的線程棧大小,一般情況下,這個值是 8M。
可以寫一段簡單的代碼驗證最多可以創建多少個線程。

試驗顯示,在 linuxthreads 上最多可以創建 381 個線程,之後就會返回 EAGAIN
在 nptl 上最多可以創建 382 個線程,之後就會返回 ENOMEM
這個值和理論完全相符,因為 32 位 linux 下的進程用戶空間是 3G 的大小,也就是 3072M,用 3072M 除以 8M 得 384,但是實際上代碼段和數據段等還要佔用一些空間,這個值應該向下取整到 383,再減去主線程,得到 382。
那為什麼 linuxthreads 上還要少一個線程呢?這可太對了,因為 linuxthreads 還需要一個管理線程。
為了突破內存的限制,可以有兩種方法:
1) 用 ulimit -s 1024 減小默認的棧大小
2) 調用 pthread_create 的時候用 pthread_attr_getstacksize 設置一個較小的棧大小
要注意的是,即使這樣的也無法突破 1024 個線程的硬限制,除非重新編譯 C 庫<=此處值得討論,我在ubuntu 7.04+3G內存上用ulimit -s 1024,則可以得到3054個線程。

❻ 如何限制linux所有進程可使用的總內存

下面的shell腳本可以實時的監控系統中各個進程的CPU和內存的佔用情況,用於限制進程CPU佔用 率更加合理。

#!/bin/sh
PIDS=`top-bn1|grep"^*[1-9]"|awk』{if($9>50||$10>25&&id-u$2>500)print$1}』`
forPIDin$PIDS
do
renice+10$PID
echo"renice+10$PID"
done

能夠將這個腳本放到cron中運行,比如每分鍾檢查一次,只需以root身份添加crontab項:
#crontab -e
* * * * * limit.sh
以後每個一分鍾就會檢查一次,調整佔用50%以上CPU或25%內存的進程的nice值,從而使這樣的進程優先順序變低,被調度的機會減少,同時會向root發郵件提示該進程被調整過。
但是,限制內存使用最好還是用PAM,RedHat能夠在/etc/security/limits.conf中配置。

❼ 怎麼查看linux每個進程的內存大小限制

我不知道如何查看。但記得Linux(32位)中每個進程獨享4GB的進程空間,需要注意的是這4G指的是虛擬內存,而非物理內存。可以查閱一下Linux虛擬內存機制相關資料。

要定製的話難度大啊!內核文件里用進程描述符(thread_info)表示一個進程,它是一個結構體,裡面有個關於進程內存分配的欄位(addr_limit)。具體自己研究研究吧!

如果只是對某個進程分配空間的話就簡單多了。假如你要為當前進程設置2M的內存上限,可以通過current->addr_limit=2048實現。

❽ 請問使用何命令查詢linux系統默認單進程內存限制數,如需修改應如何操作。

需要自己去配置內核。內核設置裡面有個4GB大內存的選項,如果你的內存大於4G,需要把這個打開。

閱讀全文

與linux進程內存限制相關的資料

熱點內容
文件夾無限制壓縮會不會降低內存 瀏覽:410
榮耀怎樣創建文件夾 瀏覽:627
如何用本機登陸遠程伺服器地址 瀏覽:680
黃小鴨解壓文具盒 瀏覽:670
女程序員的轉行方法 瀏覽:881
東風啟辰車聯網安裝文件夾 瀏覽:524
華為怎麼設置app時間鎖 瀏覽:660
後宮app視頻怎麼下載 瀏覽:525
如何把圖片轉換從PDF格式 瀏覽:259
重寫和重載的區別java 瀏覽:234
expressvpnandroid 瀏覽:84
儲存卡被加密怎麼解除 瀏覽:169
地球怎麼壓縮直徑 瀏覽:780
金鏟鏟之戰伺服器爆滿怎麼進 瀏覽:160
同仁堂pdf 瀏覽:935
如何編譯原理課程教材 瀏覽:730
單片機控制顯示器 瀏覽:776
頂好花app下載怎麼找不到 瀏覽:989
手機命令大全 瀏覽:808
怎麼下郵政銀行app 瀏覽:250