Linux查看進程內(nèi)存占用的六種方法
我這里整理了 6 種方式,應(yīng)該足夠用了吧,不夠你可以再補充。
- top 命令
- ps 命令
- smaps
- pmap 命令
- smem 命令
- status
top
首先想到的肯定是 top 命令,直接輸入 top 回車即可

輸出參數(shù)介紹:
- PID:進程的ID
- USER:進程所有者
- VIRT:進程占用的虛擬內(nèi)存
- RES:進程占用的物理內(nèi)存
- SHR:進程使用的共享內(nèi)存
- S:進程的狀態(tài)。S表示休眠,R表示正在運行,Z表示僵死狀態(tài),N表示該進程優(yōu)先值為負(fù)數(shù)
- %CPU:進程占用CPU的使用率
- %MEM:進程使用的物理內(nèi)存和總內(nèi)存的百分比
- TIME+:該進程啟動后占用的總的CPU時間,即占用CPU使用時間的累加值
top命令默認(rèn)是以CPU排序輸出的,按字母「****M****」,可以按內(nèi)存占用大小進行排序顯示

顯示的有整體內(nèi)存占用情況和各個進程占用的內(nèi)存情況。
ps
默認(rèn)的 ps 不輸出內(nèi)存相關(guān)的內(nèi)容,可以添加要顯示的字段
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'
- -e 顯示所有進程
- -o 定制顯示信息
- pid 進程ID
- comm 進程名
- args 啟動命令
- pcpu 占用CPU 百分比
- rsz 占用物理內(nèi)存大小
- vsz 占用虛擬內(nèi)存大小
- stime 進程啟動時間
- user 啟動用戶

RSZ: 954184 表示內(nèi)存占用
更多操作指令,按內(nèi)存排序
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | sort -k5nr

也可以使用 --sort -rsz 按 rsz 排序,效果一樣

smaps
smaps 也是進程的一個屬性,可以通過 cat smaps 獲得
cat /proc/7576/smaps | grep Rss | awk '{sum +=$2} END{print sum}' 需要將他們進行加起來

pmap
使用 pmap 也可以查看進程的詳細(xì)內(nèi)存占用情況
pmap -h
Usage:
pmap [options] PID [PID ...]
Options:
-x, --extended show details
-X show even more details
WARNING: format changes according to /proc/PID/smaps
-XX show everything the kernel provides
-c, --read-rc read the default rc
-C, --read-rc-from=<file> read the rc from file
-n, --create-rc create new default rc
-N, --create-rc-to=<file> create new rc to file
NOTE: pid arguments are not allowed with -n, -N
-d, --device show the device format
-q, --quiet do not display header and footer
-p, --show-path show path in the mapping
-A, --range=<low>[,<high>] limit results to the given range
-h, --help display this help and exit
-V, --version output version information and exit
For more details see pmap(1).執(zhí)行 pmap -x pid 可以查看詳情
pmap -x 7576 7576: /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djdk.io.File.enableADS=true -Djruby.compile.invokedynamic=true -Djruby.jit.threshold=0 -Djruby.regexp.interruptible=true -XX:+HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/urandom -Dlog4j2.isThreadContextMapInheritable=true -cp /usr/share/logstash/logstash-core/lib/jars/animal-sniffer-annotations-1.14.jar:/ Address Kbytes RSS Dirty Mode Mapping ............... ---------------- ------- ------- ------- total kB 3725156 626940 619032
RSS: 626940 即內(nèi)存占用。
smem
一般系統(tǒng)沒有自帶,需要安裝一下,根據(jù)你的系統(tǒng)選擇合適的安裝工具

apt-get update apt-get install -y smem smem --help

自帶排序,直接輸出排好序的數(shù)據(jù),可以使用 -r 參數(shù)從大到小排列
smem smem -r

status
Linux 中每個進程在 /proc 目錄下都有對應(yīng)的目錄,其中某個進程目錄下有一個 status 文件,通過 status 文件內(nèi)容可以查看到當(dāng)前占用資源的情況
cat /proc/7576/status Name: java Umask: 0022 State: S (sleeping) Tgid: 7576 Ngid: 0 Pid: 7576 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 256 Groups: 0 VmPeak: 3724360 kB VmSize: 3724360 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 638308 kB VmRSS: 621528 kB RssAnon: 613808 kB RssFile: 7720 kB RssShmem: 0 kB VmData: 3524964 kB VmStk: 136 kB VmExe: 4 kB VmLib: 22520 kB VmPTE: 1604 kB VmSwap: 0 kB Threads: 34 SigQ: 0/14503 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000000000 SigCgt: 2000000181005ccf CapInh: 0000000000000000 CapPrm: 00000000a80425fb CapEff: 00000000a80425fb CapBnd: 00000000a80425fb CapAmb: 0000000000000000 Seccomp: 2 Speculation_Store_Bypass: vulnerable Cpus_allowed: 3 Cpus_allowed_list: 0-1 Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 Mems_allowed_list: 0 voluntary_ctxt_switches: 22 nonvoluntary_ctxt_switches: 29
VmRSS: 621528 kB 就表示占用的內(nèi)存大小。
END
到此這篇關(guān)于Linux查看進程內(nèi)存占用的六種方法的文章就介紹到這了,更多相關(guān)Linux查看進程內(nèi)存占用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個數(shù)淺析
Linux的shell腳本,有時候我們在運行shell腳本時會給腳本傳入?yún)?shù),出于邏輯上的嚴(yán)謹(jǐn),在腳本中可能會做一些邏輯判斷或處理,例如判斷腳本傳入?yún)?shù)的個數(shù),這篇文章主要介紹了shell腳本中main函數(shù)中$#獲取不到腳本傳入?yún)?shù)個數(shù)淺析,需要的朋友可以參考下2024-03-03
bash提取字符串${string:position:length}的具體使用
本文主要介紹了bash提取字符串${string:position:length}的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
一個簡潔的全自動安裝LNMP服務(wù)器環(huán)境的Shell腳本分享
這篇文章主要介紹了一個簡潔的全自動安裝LNMP服務(wù)器環(huán)境的Shell腳本分享,本文腳本在生產(chǎn)環(huán)境上使用了一年多,腳本代碼簡單唯美,需要的朋友可以參考下2014-12-12
簡介Linux中cp和mv搭配{,}在shell當(dāng)中的用法
這篇文章主要介紹了簡介Linux中cp和mv搭配{,}在shell當(dāng)中的用法,作者舉了四個這樣的大括號擴展示例,需要的朋友可以參考下2015-06-06

