當前位置:首頁 » 操作系統 » 進程大小linux

進程大小linux

發布時間: 2022-05-19 10:25:47

linux 怎麼查進程佔用內存大小

root@localhost:~# top -bn 1 |grep nginx
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11749 root 20 0 86008 1632 300 S 0.0 0.0 0:00.00 nginx
11750 root 20 0 86984 2932 1052 S 0.0 0.0 2:33.99 nginx
11751 root 20 0 86680 2932 1048 S 0.0 0.0 2:36.48 nginx
11753 root 20 0 86960 2932 1052 S 0.0 0.0 2:31.39 nginx
11754 root 20 0 86680 2932 1044 S 0.0 0.0 2:41.62 nginx
root@localhost:~#
root@localhost:~# top
top - 15:00:52 up 44 days, 5:53, 3 users, load average: 0.46, 0.67, 0.72
Tasks: 221 total, 1 running, 220 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.9 us, 3.4 sy, 0.1 ni, 88.0 id, 0.6 wa, 0.1 hi, 0.0 si, 0.0 st
KiB Mem: 24590068 total, 23478864 used, 1111204 free, 779016 buffers
KiB Swap: 15625212 total, 1400 used, 15623812 free. 18608024 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

㈡ Linux每個進程的HEAP SIZE限制是多少

網上看到的分析:
32位意味著4G的定址空間,Linux把它分為兩部分:最高的1G(虛擬地址從0xC0000000到0xffffffff)用做內核本身,成為「系統空間」,而較低的3G位元組(從0x00000000到0xbffffff)用作各進程的「用戶空間」。這樣,理論上每個進程可以使用的用戶空間都是3G。當然,實際的空間大小收到物理存儲器大小的限制。雖然各個進程擁有其自己的3G用戶空間,系統空間卻由所有的進程共享。從具體進程的角度看,則每個進程都擁有4G的虛擬空間,較低的3G為自己的用戶空間,最高的1G為所有進程以及內核共享的系統空間。

可是經自己測試:
堆區最多開2G - 1大小空間
棧區能開1G多,當接近2G就會報錯

[html] view plain print?
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
const long long MAXN = 1073741824;//2^30即1G
using namespace std;

char s[MAXN * 2 - 1];//開2G內存,多1個都會編譯錯誤(提示:整數溢出之類的錯誤)
int main()
{
char t[MAXN + 1000];//之內開1G多的空間,2G會編譯不通過
memset(t, 0, sizeof(t));
memset(s, 0, sizeof(s));
return 0;
}

㈢ 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下進程佔用多少內存的方法

ps aux:
其中
RSS列:"Resident Set Size", 實際駐留"在內存中"的內存數. 不包括已經交換出去的代碼. 舉一個例子: 如果你有一個程序使用了100K內存, 操作系統交換出40K內存, 那麼RSS為60K. RSS還包括了與其它進程共享的內存區域. 這些區域通常用於libc庫等.

VSZ(或VSS)列:「Virtual Set Size」 一個進程佔用的總的地址空間大小. 它包括了沒有映射到內存中的頁面。

如果查看更詳細的內存使用情況, 可用以下幾種方法, 或者幾種方法結合使用,都需要root許可權
(1). pmap -d $pid

$pid 是正在運行的程序的pid

2). cat /proc/$pid/smaps

smaps的數據比較詳細,可簡單的歸納一下,歸納的命令如下:
cat /proc/$pid/smaps | awk '/Size|Rss|Pss|Shared|Private|Referenced|Swap/{val_name=gensub(/([a-zA-Z_]*).*/,"\\1",1,$1); list[val_name]+=$2; }END{for(val in list)print val,list[val];}'
(3). cat /proc/$pid/maps

(4). cat /proc/$pid/statm
輸出解釋
第一列 size:任務虛擬地址空間大小
第二列 Resident:正在使用的物理內存大小
第三列 Shared:共享頁數
第四列 Trs:程序所擁有的可執行虛擬內存大小
第五列 Lrs:被映像倒任務的虛擬內存空間的庫的大小
第六列 Drs:程序數據段和用戶態的棧的大小
第七列 dt:臟頁數量

㈤ linux 下怎麼查看一個進程佔用內存大小

這里介紹下查看一個進程佔用內存大小的方法。

1、首先單擊桌面左上角的應用程序,選擇系統工具選項,如下圖所示。

㈥ 在linux怎麼限制一個進程運行內存大小

我不知道如何查看。但記得Linux(32位)中每個進程獨享4GB的進程空間,需要注意的是這4G指的是虛擬內存,而非物理內存。可以查閱一下Linux虛擬內存機制相關資料。
要定製的話難度大啊!內核文件里用進程描述符(thread_info)表示一個進程,它是一個結構體,裡面有個關於進程內存分配的欄位(addr_limit)。具體自己研究研究吧!
如果只是對某個進程分配空間的話就簡單多了。假如你要為當前進程設置2M的內存上限,可以通過current->addr_limit=2048實現。

㈦ Linux進程內存如何管理

Linux系統提供了復雜的存儲管理系統,使得進程所能訪問的內存達到4GB。在Linux系統中,進程的4GB內存空間被分為兩個部分——用戶空間與內核空間。用戶空間的地址一般分布為0~3GB(即PAGE_OFFSET,在Ox86中它等於OxC0000000),這樣,剩下的3~4GB為內核空間,用戶進程通常只能訪問用戶空間的虛擬地址,不能訪問內核空間的虛擬地址。用戶進程只有通過系統調用(代表用戶進程在內核態執行)等方式才可以訪問到內核空間。每個進程的用戶空間都是完全獨立、互不相乾的,用戶進程各自有不同的頁表。而內核空間是由內核負責映射,它並不會跟著進程改變,是固定的。內核空間的虛擬地址到物理地址映射是被所有進程共享的,內核的虛擬空間獨立於其他程序。Linux中1GB的內核地址空間又被劃分為物理內存映射區、虛擬內存分配區、高端頁面映射區、專用頁面映射區和系統保留映射區這幾個區域。對於x86系統而言,一般情況下,物理內存映射區最大長度為896MB,系統的物理內存被順序映射在內核空間的這個區域中。當系統物理內存大於896MB時,超過物理內存映射區的那部分內存稱為高端內存(而未超過物理內存映射區的內存通常被稱為常規內存),內核在存取高端內存時必須將它們映射到高端頁面映射區。Linux保留內核空間最頂部FIXADDR_TOP~4GB的區域作為保留區。當系統物理內存超過4GB時,必須使用CPU的擴展分頁(PAE)模式所提供的64位頁目錄項才能存取到4GB以上的物理內存,這需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以後的CPU允許內存最大可配置到64GB,它們具備36位物理地址空間定址能力。由此可見,對於32位的x86而言,在3~4GB之間的內核空間中,從低地址到高地址依次為:物理內存映射區隔離帶vmalloc虛擬內存分配器區隔離帶高端內存映射區專用頁面映射區保留區。

㈧ 如何按佔用內存大小查看Linux下的進程

那麼如何按佔用內存大小查看Linux下的進程呢?

ps

常用參數

-A 所有進程均顯示出來
-a 不與terminal有關的所有進程
-u 有效使用者相關的進程
-x 通常與a一起用,可列出較完整信息

按內存大小排序

ps -aux默認是按PID從小到大顯示的,若想按佔用內存大小排序則需要藉助另外sort命令針對第4列(內存所在列)排序:

ps -aux | sort -k4rn

如果我們只想看前n個進程, 還可以藉助head命令,比如查看前10個佔用內存最大的進程:

ps -aux | sort -k4rn | head -n 10

我們還可以藉助awk來指定顯示哪幾列信息:

ps -aux |awk '{print $2, $4, $11}' | sort -k2rn | head -n 10

注意:我們先用awk指定了要顯示的列, 這時sort的參數也要變化了.

top

常用參數

-d: 後面加數字指定數據刷新的頻率, 預設是5秒
-p: 指定某些個pid進行觀察

top執行過程中可使用的按鍵命令

?: 顯示top中可以輸入的按鍵命令
P: 以cpu使用率排序顯示

M: 以內存使用率排序顯示

N: 以PID排序顯示

㈨ linux如何查看每個進程使用內存大小

我不知道如何查看。但記得linux(32位)中每個進程獨享4gb的進程空間,需要注意的是這4g指的是虛擬內存,而非物理內存。可以查閱一下linux虛擬內存機制相關資料。
要定製的話難度大啊!內核文件里用進程描述符(thread_info)表示一個進程,它是一個結構體,裡面有個關於進程內存分配的欄位(addr_limit)。具體自己研究研究吧!
如果只是對某個進程分配空間的話就簡單多了。假如你要為當前進程設置2m的內存上限,可以通過current->addr_limit=2048實現。

㈩ 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個線程。

熱點內容
python中或者怎麼表示 發布:2025-01-13 16:32:33 瀏覽:288
易達加密鎖 發布:2025-01-13 16:27:23 瀏覽:514
前端編譯工具配置 發布:2025-01-13 16:26:43 瀏覽:585
資料庫百度雲 發布:2025-01-13 16:19:38 瀏覽:539
java連接sqlite資料庫 發布:2025-01-13 16:19:36 瀏覽:768
htmlajax上傳文件 發布:2025-01-13 16:19:33 瀏覽:514
安卓怎麼時間顯秒 發布:2025-01-13 16:19:33 瀏覽:474
我的世界java伺服器管理員設置 發布:2025-01-13 16:18:44 瀏覽:493
大秦國之裂變ftp 發布:2025-01-13 15:59:01 瀏覽:371
谷能壓縮機 發布:2025-01-13 15:44:30 瀏覽:413