Java程序記憶體分析

2021-09-24 23:54:16 字數 4721 閱讀 4066

ps aux命令執行結果的幾個列的資訊的含義

user    程序所屬使用者

pid 程序id

%cpu 程序占用cpu百分比

%mem 程序占用記憶體百分比

vsz 虛擬記憶體占用大小 單位:kb(killobytes)

rss 實際記憶體占用大小 單位:kb(killobytes)

tty 終端型別

stat 程序狀態

start 程序啟動時刻

time 程序執行時長,程序已經消耗的cpu時間

command 啟動程序的命令的名稱和引數

top 命令 vsz,rss,tty,stat, virt,res,shr,data的含義

virt:virtual memory usage 虛擬記憶體

1、程序「需要的」虛擬記憶體大小,包括程序使用的庫、**、資料等

2、假如程序申請100m的記憶體,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量

res:resident memory usage 常駐記憶體

1、程序當前使用的記憶體大小,但不包括swap out

2、包含其他程序的共享

3、如果申請100m的記憶體,實際使用10m,它只增長10m,與virt相反

4、關於庫占用記憶體的情況,它只統計載入的庫檔案所佔記憶體大小

shr:shared memory 共享記憶體

1、除了自身程序的共享記憶體,也包括其他程序的共享記憶體

2、雖然程序只使用了幾個共享庫的函式,但它包含了整個共享庫的大小

3、計算某個程序所佔的物理記憶體大小公式:res – shr

4、swap out後,它將會降下來

data

1、資料占用的記憶體。如果top沒有顯示,按f鍵可以顯示出來。

2、真正的該程式要求的資料空間,是真正在執行中要使用的。

top 執行中可以通過 top 的內部命令對程序的顯示方式進行控制。內部命令如下:

s – 改變畫面更新頻率

l – 關閉或開啟第一部分第一行 top 資訊的表示

t – 關閉或開啟第一部分第二行 tasks 和第三行 cpus 資訊的表示

m – 關閉或開啟第一部分第四行 mem 和 第五行 swap 資訊的表示

n – 以 pid 的大小的順序排列表示程序列表

p – 以 cpu 佔用率大小的順序排列程序列表

m – 以記憶體佔用率大小的順序排列程序列表

h – 顯示幫助

n – 設定在程序列表所顯示程序的數量

q – 退出 top

s – 改變畫面更新週期

序號 列名 含義

a pid 程序id

b ppid 父程序id

c ruser real user name

d uid 程序所有者的使用者id

e user 程序所有者的使用者名稱

f group 程序所有者的組名

g tty 啟動程序的終端名。不是從終端啟動的程序則顯示為 ?

h pr 優先順序

i ni nice值。負值表示高優先順序,正值表示低優先順序

j p 最後使用的cpu,僅在多cpu環境下有意義

k %cpu 上次更新到現在的cpu時間占用百分比

l time 程序使用的cpu時間總計,單位秒

m time+ 程序使用的cpu時間總計,單位1/100秒

n %mem 程序使用的物理記憶體百分比

o virt 程序使用的虛擬記憶體總量,單位kb。virt=swap+res

p swap 程序使用的虛擬記憶體中,被換出的大小,單位kb。

q res 程序使用的、未被換出的物理記憶體大小,單位kb。res=code+data

r code 可執行**占用的物理記憶體大小,單位kb

s data 可執行**以外的部分(資料段+棧)占用的物理記憶體大小,單位kb

t shr 共享記憶體大小,單位kb

u nflt 頁面錯誤次數

v ndrt 最後一次寫入到現在,被修改過的頁面數。

w s 程序狀態。(d=不可中斷的睡眠狀態,r=執行,s=睡眠,t=跟蹤/停止,z=殭屍程序)

x command 命令名/命令列

y wchan 若該程序在睡眠,則顯示睡眠中的系統函式名

z flags 任務標誌,參考 sched.h

預設情況下僅顯示比較重要的 pid、user、pr、ni、virt、res、shr、s、%cpu、%mem、time+、command 列。

可以通過下面的快捷鍵來更改顯示內容。

通過 f 鍵可以選擇顯示的內容。按 f 鍵之後會顯示列的列表,按 a-z 即可顯示或隱藏對應的列,最後按回車鍵確定。

按 o 鍵可以改變列的顯示順序。按小寫的 a-z 可以將相應的列向右移動,而大寫的 a-z 可以將相應的列向左移動。

最後按回車鍵確定。

按大寫的 f 或 o 鍵,然後按 a-z 可以將程序按照相應的列進行排序。而大寫的 r 鍵可以將當前的排序倒轉。

3. ps命令

ps -p 程序id -o vsz,rss

vsz rss

3701784 413924

vsz是指已分配的線性空間大小,這個大小通常並不等於程式實際用到的記憶體大小,

產生這個的可能性很多,比如記憶體對映,共享的動態庫,或者向系統申請了更多的堆,都會擴充套件線性空間大小。

rss 是resident set size,常駐記憶體大小,即程序實際占用的物理記憶體大小

jmap命令

[root@iz2zee010yjby4eyu51q0xz conf]# jmap -heap 20041

attaching to process id 20041, please wait...

debugger attached successfully.

server compiler detected.

jvm version is 25.181-b13

using thread-local object allocation.

parallel gc with 2 thread(s)

heap configuration:

minheapfreeratio = 0

maxheapfreeratio = 100

maxheapsize = 2147483648 (2048.0mb) #當前jvm最大堆大小

newsize = 89128960 (85.0mb)

maxnewsize = 715653120 (682.5mb)

oldsize = 179306496 (171.0mb)

newratio = 2

survivorratio = 8

metaspacesize = 21807104 (20.796875mb)

compressedclassspacesize = 1073741824 (1024.0mb)

maxmetaspacesize = 17592186044415 mb

g1heapregionsize = 0 (0.0mb)

heap usage:

ps young generation

eden space:

capacity = 67108864 (64.0mb)

used = 53819296 (51.326080322265625mb)

free = 13289568 (12.673919677734375mb)

80.19700050354004% used

from space:

capacity = 10485760 (10.0mb)

used = 9489872 (9.050247192382812mb)

free = 995888 (0.9497528076171875mb)

90.50247192382812% used

to space:

capacity = 11010048 (10.5mb)

used = 0 (0.0mb)

free = 11010048 (10.5mb)

0.0% used

ps old generation

capacity = 179306496 (171.0mb)

used = 35467768 (33.82469940185547mb)

free = 143838728 (137.17530059814453mb)

19.78052596599735% used

15392 interned strings occupying 1677832 bytes.

[root@iz2zee010yjby4eyu51q0xz conf]#

channel(socket) closed from remote host(dix) at 10:18:29.

linux linux程序記憶體分析

在產品的開發中,通過對當前系統消耗記憶體總量的統計,可以對產品所需記憶體總量進行精確的評估,從而選擇合適的記憶體晶元與大小,降低產品的成本。在遇到記憶體洩露類問題時,經常會對此束手無策,本文通過對proc下程序相關的檔案進行分析,精確評估系統消耗記憶體的大小,還可以對記憶體洩露類問題的解決提供一種定...

Linux pmap 程序記憶體分析

linux pmap root hankyoon pmap help usage pmap options pid pid options x,extended show details 顯示擴充套件格式 x show even more details warning format changes...

java陣列記憶體分析

首先學習幾個單詞 index 索引 bounds 邊界 assigned 指定 陣列 相同資料型別的有序集合 陣列也是物件 長度是不可變的,越界報array index out of bounds exception 陣列語法 宣告int a int a 建立 new int 4 初始化 預設初始化...