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

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

顯示的有整體內(nèi)存占用情況和各個(gè)進(jìn)程占用的內(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 顯示所有進(jìn)程
- -o 定制顯示信息
- pid 進(jìn)程ID
- comm 進(jìn)程名
- args 啟動(dòng)命令
- pcpu 占用CPU 百分比
- rsz 占用物理內(nèi)存大小
- vsz 占用虛擬內(nèi)存大小
- stime 進(jìn)程啟動(dòng)時(shí)間
- user 啟動(dòng)用戶

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 也是進(jìn)程的一個(gè)屬性,可以通過 cat smaps 獲得
cat /proc/7576/smaps | grep Rss | awk '{sum +=$2} END{print sum}' 需要將他們進(jìn)行加起來

pmap
使用 pmap 也可以查看進(jìn)程的詳細(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 中每個(gè)進(jìn)程在 /proc 目錄下都有對(duì)應(yīng)的目錄,其中某個(gè)進(jìn)程目錄下有一個(gè) 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查看進(jìn)程內(nèi)存占用的六種方法的文章就介紹到這了,更多相關(guān)Linux查看進(jìn)程內(nèi)存占用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux下使用nmcli命令連接網(wǎng)絡(luò)的流程步驟
在使用ubuntu系統(tǒng)的時(shí)候,有時(shí)候不方便使用桌面,使用ssh遠(yuǎn)程連接,可能需要使用nmcli命令來連接網(wǎng)絡(luò),本文將介紹如何使用nmcli命令連接網(wǎng)絡(luò),需要的朋友可以參考下2025-06-06
一個(gè)shell for循環(huán)與case結(jié)合的腳本(監(jiān)控程序狀態(tài))
分享一個(gè)for循環(huán)+case的腳本(監(jiān)控程序狀態(tài)并執(zhí)行相關(guān)操作) ,供大家學(xué)習(xí)參考2013-11-11
shell進(jìn)度條追蹤指令執(zhí)行時(shí)間的場(chǎng)景分析
這篇文章主要介紹了shell進(jìn)度條如何追蹤指令執(zhí)行時(shí)間,本文中的進(jìn)度條可以應(yīng)用于大部分場(chǎng)景。不用修改進(jìn)度條函數(shù)的任何代碼,就可以直接使用,特別適合那些可預(yù)估指令執(zhí)行時(shí)間的場(chǎng)景,需要的朋友可以參考下2022-06-06
淺談安裝ORACLE時(shí)在Linux上設(shè)置內(nèi)核參數(shù)的含義
下面小編就為大家?guī)硪黄獪\談安裝ORACLE時(shí)在Linux上設(shè)置內(nèi)核參數(shù)的含義。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03

