檢視 Linux 系統中程序和使用者的記憶體使用情況
有一些命令可以用來檢查 Linux 系統中的記憶體使用情況,下面是一些更好的命令。
有許多工具可以檢視 Linux 系統中的記憶體使用情況。一些命令被廣泛使用,比如 free
、ps
。而另一些命令允許通過多種方式展示系統的效能統計資訊,比如 top
。在這篇文章中,我們將介紹一些命令以幫助你確定當前佔用著最多記憶體資源的使用者或者程式。
下面是一些按照程式檢視記憶體使用情況的命令:
按照程式檢視記憶體使用情況
使用 top
top
是最好的檢視記憶體使用情況的命令之一。為了檢視哪個程式使用著最多的記憶體,一個簡單的辦法就是啟動 top
,然後按下 shift+m
,這樣便可以檢視按照記憶體佔用百分比從高到底排列的程式。當你按下了 shift+m
,你的 top
應該會得到類似於下面這樣的輸出結果:
$top
top - 09:39:34 up 5 days, 3 min, 3 users, load average: 4.77, 4.43, 3.72
Tasks: 251 total, 3 running, 247 sleeping, 1 stopped, 0 zombie
%Cpu(s): 50.6 us, 35.9 sy, 0.0 ni, 13.4 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 5944.4 total, 128.9 free, 2509.3 used, 3306.2 buff/cache
MiB Swap: 2048.0 total, 2045.7 free, 2.2 used. 3053.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
400 nemo 20 0 3309580 550188 168372 S 0.3 9.0 1:33.27 Web Content
32469 nemo 20 0 3492840 447372 163296 S 7.3 7.3 3:55.60 firefox
32542 nemo 20 0 2845732 433388 140984 S 6.0 7.1 4:11.16 Web Content
342 nemo 20 0 2848520 352288 118972 S 10.3 5.8 4:04.89 Web Content
2389 nemo 20 0 1774412 236700 90044 S 39.7 3.9 9:32.64 vlc
29527 nemo 20 0 2735792 225980 84744 S 9.6 3.7 3:02.35 gnome-shell
30497 nemo 30 10 1088476 159636 88884 S 0.0 2.6 0:11.99 update-manager
30058 nemo 20 0 1089464 140952 33128 S 0.0 2.3 0:04.58 gnome-software
32533 nemo 20 0 2389088 104712 79544 S 0.0 1.7 0:01.43 WebExtensions
2256 nemo 20 0 1217884 103424 31304 T 0.0 1.7 0:00.28 vlc
1713 nemo 20 0 2374396 79588 61452 S 0.0 1.3 0:00.49 Web Content
29306 nemo 20 0 389668 74376 54340 S 2.3 1.2 0:57.25 Xorg
32739 nemo 20 0 289528 58900 34480 S 1.0 1.0 1:04.08 RDD Process
29732 nemo 20 0 789196 57724 42428 S 0.0 0.9 0:00.38 evolution-alarm
2373 root 20 0 150408 57000 9924 S 0.3 0.9 10:15.35 nessusd
注意 %MEM
排序。列表的大小取決於你的視窗大小,但是佔據著最多的記憶體的程式將會顯示在列表的頂端。
使用 ps
ps
命令中的一列用來展示每個程式的記憶體使用情況。為了展示和檢視哪個程式使用著最多的記憶體,你可以將 ps
命令的結果傳遞給 sort
命令。下面是一個有用的示例:
$ ps aux | sort -rnk 4 | head -5
nemo 400 3.4 9.2 3309580 563336 ? Sl 08:59 1:36 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 9086 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 32469 8.2 7.7 3492840 469516 ? Sl 08:54 4:15 /usr/lib/firefox/firefox -new-window
nemo 32542 8.9 7.6 2875428 462720 ? Sl 08:55 4:36 /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 1 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 342 9.9 5.9 2854664 363528 ? Sl 08:59 4:44 /usr/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 8763 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 2389 39.5 3.8 1774412 236116 pts/1 Sl+ 09:15 12:21 vlc videos/edge_computing.mp4
在上面的例子中(文中已截斷),sort
命令使用了 -r
選項(反轉)、-n
選項(數字值)、-k
選項(關鍵字),使 sort
命令對 ps
命令的結果按照第四列(記憶體使用情況)中的數字逆序進行排列並輸出。如果我們首先顯示 ps
命令的標題,那麼將會便於檢視。
$ ps aux | head -1; ps aux | sort -rnk 4 | head -5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
nemo 400 3.4 9.2 3309580 563336 ? Sl 08:59 1:36 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 9086 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 32469 8.2 7.7 3492840 469516 ? Sl 08:54 4:15 /usr/lib/firefox/firefox -new-window
nemo 32542 8.9 7.6 2875428 462720 ? Sl 08:55 4:36 /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 1 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 342 9.9 5.9 2854664 363528 ? Sl 08:59 4:44 /usr/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 8763 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 2389 39.5 3.8 1774412 236116 pts/1 Sl+ 09:15 12:21 vlc videos/edge_computing.mp4
如果你喜歡這個命令,你可以用下面的命令為他指定一個別名,如果你想一直使用它,不要忘記把該命令新增到你的 ~/.bashrc
檔案中。
$ alias mem-by-proc="ps aux | head -1; ps aux | sort -rnk 4"
下面是一些根據使用者檢視記憶體使用情況的命令:
按使用者檢視記憶體使用情況
使用 top
按照使用者檢查記憶體使用情況會更復雜一些,因為你需要找到一種方法把使用者所擁有的所有程式統計為單一的記憶體使用量。
如果你只想檢視單個使用者程式使用情況,top
命令可以採用與上文中同樣的方法進行使用。只需要新增 -U
選項並在其後面指定你要檢視的使用者名稱,然後按下 shift+m
便可以按照記憶體使用有多到少進行檢視。
$ top -U nemo
top - 10:16:33 up 5 days, 40 min, 3 users, load average: 1.91, 1.82, 2.15
Tasks: 253 total, 2 running, 250 sleeping, 1 stopped, 0 zombie
%Cpu(s): 28.5 us, 36.8 sy, 0.0 ni, 34.4 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 5944.4 total, 224.1 free, 2752.9 used, 2967.4 buff/cache
MiB Swap: 2048.0 total, 2042.7 free, 5.2 used. 2812.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
400 nemo 20 0 3315724 623748 165440 S 1.0 10.2 1:48.78 Web Content
32469 nemo 20 0 3629380 607492 161688 S 2.3 10.0 6:06.89 firefox
32542 nemo 20 0 2886700 404980 136648 S 5.6 6.7 6:50.01 Web Content
342 nemo 20 0 2922248 375784 116096 S 19.5 6.2 8:16.07 Web Content
2389 nemo 20 0 1762960 234644 87452 S 0.0 3.9 13:57.53 vlc
29527 nemo 20 0 2736924 227260 86092 S 0.0 3.7 4:09.11 gnome-shell
30497 nemo 30 10 1088476 156372 85620 S 0.0 2.6 0:11.99 update-manager
30058 nemo 20 0 1089464 138160 30336 S 0.0 2.3 0:04.62 gnome-software
32533 nemo 20 0 2389088 102532 76808 S 0.0 1.7 0:01.79 WebExtensions
使用 ps
你依舊可以使用 ps
命令通過記憶體使用情況來排列某個使用者的程式。在這個例子中,我們將使用 grep
命令來篩選得到某個使用者的所有程式。
$ ps aux | head -1; ps aux | grep ^nemo| sort -rnk 4 | more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
nemo 32469 7.1 11.5 3724364 701388 ? Sl 08:54 7:21 /usr/lib/firefox/firefox -new-window
nemo 400 2.0 8.9 3308556 543232 ? Sl 08:59 2:01 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 9086 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni/usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 32542 7.9 7.1 2903084 436196 ? Sl 08:55 8:07 /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 1 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 342 10.8 7.0 2941056 426484 ? Rl 08:59 10:45 /usr/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 8763 -prefMapSize 210653 -parentBuildID 20200107212822 -greomni /usr/lib/firefox/omni.ja -appomni /usr/lib/firefox/browser/omni.ja -appdir /usr/lib/firefox/browser 32469 true tab
nemo 2389 16.9 3.8 1762960 234644 pts/1 Sl+ 09:15 13:57 vlc videos/edge_computing.mp4
nemo 29527 3.9 3.7 2736924 227448 ? Ssl 08:50 4:11 /usr/bin/gnome-shell
使用 ps 和其他命令的搭配
如果你想比較某個使用者與其他使用者記憶體使用情況將會比較複雜。在這種情況中,建立並排序一個按照使用者總的記憶體使用量是一個不錯的方法,但是它需要做一些更多的工作,並涉及到許多命令。在下面的指令碼中,我們使用 ps aux | grep -v COMMAND | awk '{print $1}' | sort -u
命令得到了使用者列表。其中包含了系統使用者比如 syslog
。我們對每個任務使用 awk
命令以收集每個使用者總的記憶體使用情況。在最後一步中,我們展示每個使用者總的記憶體使用量(按照從大到小的順序)。
#!/bin/bash
stats=””
echo "% user"
echo "============"
# collect the data
for user in `ps aux | grep -v COMMAND | awk '{print $1}' | sort -u`
do
stats="$stats\n`ps aux | egrep ^$user | awk 'BEGIN{total=0}; \
{total += $4};END{print total,$1}'`"
done
# sort data numerically (largest first)
echo -e $stats | grep -v ^$ | sort -rn | head
這個指令碼的輸出可能如下:
$ ./show_user_mem_usage
% user
============
69.6 nemo
5.8 root
0.5 www-data
0.3 shs
0.2 whoopsie
0.2 systemd+
0.2 colord
0.2 clamav
0 syslog
0 rtkit
在 Linux 有許多方法可以報告記憶體使用情況。可以通過一些用心設計的工具和命令,來檢視並獲得某個程式或者使用者佔用著最多的記憶體。
via: https://www.networkworld.com/article/3516319/showing-memory-usage-in-linux-by-process-and-user.html
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:萌新阿巖 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- linux 檢視某個程序和服務記憶體佔用情況命令Linux記憶體
- 檢視LINUX程式記憶體佔用情況Linux記憶體
- 在Linux中,如何檢查系統的CPU和記憶體使用情況?Linux記憶體
- Linux 檢視記憶體使用情況的幾種方法Linux記憶體
- Linux檢視伺服器記憶體使用情況的命令Linux伺服器記憶體
- 檢查 Linux 中記憶體使用情況的 8 條命令Linux記憶體
- 在Linux中,如何檢視系統的磁碟使用情況?Linux
- 總結Linux下檢視記憶體使用情況的多種方法Linux記憶體
- 在Linux中,如何檢視系統資源使用情況?Linux
- Linux系統中的程序和埠檢視命令Linux
- 使用show engine innodb status 檢視記憶體使用情況記憶體
- 在Linux中,如何檢視linux中記憶體使用率最高的程序?Linux記憶體
- Linux系統下分析記憶體使用情況的管理工具Linux記憶體
- java程式碼實現檢視Tomcat記憶體使用情況JavaTomcat記憶體
- 如何檢視Linux的記憶體使用狀況Linux記憶體
- linux檢視埠占用情況Linux
- Linux效能優化:記憶體使用情況分析Linux優化記憶體
- 轉:Linux檢視GPU資訊和使用情況LinuxGPU
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- 看下Linux 如何檢視埠占用情況Linux
- 在Linux中,如何檢視磁碟詳細使用情況?Linux
- Linux 伺服器硬碟使用情況檢視Linux伺服器硬碟
- 用 Bash 指令碼監控 Linux 上的記憶體使用情況指令碼Linux記憶體
- Linux系統如何檢視伺服器頻寬及網路使用情況?Linux伺服器
- Linux_程式到程序-記憶體模型和程序管理Linux記憶體模型
- 如何在 Linux 中找出記憶體消耗最大的程序Linux記憶體
- 使用 vmstat 命令確定記憶體使用情況記憶體
- 17 種檢視 Linux 實體記憶體的方法Linux記憶體
- 使用 top 命令瞭解 Fedora 的記憶體使用情況記憶體
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體
- 在Linux中,如何監控系統資源使用情況?Linux
- 華納雲:如何檢視Linux硬碟空間使用情況Linux硬碟
- Redis 記憶體突增時,如何定量分析其記憶體使用情況Redis記憶體
- 使用netstat命令檢視埠的使用情況
- DB2檢視索引的使用情況DB2索引
- 監控 Python 記憶體使用情況和程式碼執行時間!Python記憶體
- Linux 系統檢視使用者組Linux
- 在Linux中,如何檢視和結束正在執行的程序?Linux