# Linux系統中如何使用smem工具監測內存狀態
## 引言
在Linux系統管理和性能優化過程中,內存監控是至關重要的環節。傳統工具如`free`和`top`雖然常用,但輸出的內存數據往往不夠直觀。`smem`作為一款專業的內存報告工具,能夠以更清晰的方式展示進程的內存占用情況,包括物理內存(RSS)、共享內存和比例內存(PSS/USS)。本文將詳細介紹`smem`的安裝、基本使用、高級技巧以及實際應用場景。
---
## 一、smem工具簡介
### 1.1 什么是smem
`smem`是由Chris Frost開發的開源工具,專為Linux系統設計,主要功能包括:
- **多維度統計**:同時顯示RSS(常駐內存)、PSS(比例占用內存)和USS(獨占內存)
- **可視化支持**:可生成柱狀圖或餅圖
- **靈活篩選**:支持按用戶、進程或系統范圍統計
### 1.2 核心概念解析
- **RSS (Resident Set Size)**:進程實際占用的物理內存(含共享庫)
- **PSS (Proportional Set Size)**:按共享比例計算的內存(更反映真實占用)
- **USS (Unique Set Size)**:進程獨占的物理內存(不含任何共享部分)
---
## 二、安裝smem工具
### 2.1 主流發行版安裝方式
```bash
# Debian/Ubuntu
sudo apt install smem
# RHEL/CentOS
sudo yum install smem
# Arch Linux
sudo pacman -S smem
wget https://www.selenic.com/smem/download/smem-1.4.tar.gz
tar -xzf smem-1.4.tar.gz
cd smem-1.4
sudo python setup.py install
smem [選項] [篩選條件]
系統級內存概覽:
smem -t -k
輸出帶總計(-t)并以KB為單位(-k)
按用戶統計:
smem -u -p
顯示每個用戶的內存占比(-p)
進程排序查看:
smem -s pss -r | head -10
按PSS降序(-r)顯示前10個進程
smem --pie=command -s pss -t
生成基于PSS的進程內存占比餅圖(需要matplotlib支持)
watch -n 5 "smem -t -s uss > memory_log.txt"
每5秒記錄一次USS內存情況
smem -k | grep apache | awk '{sum += $5} END {print sum}'
計算所有Apache相關進程的PSS總和
通過定期記錄USS值,觀察特定進程的內存增長曲線:
smem -P "python" -s uss -t -k >> python_mem.log
在Docker中統計容器內存:
smem -c "name pid pss" -P "docker" -k
使用-w
參數生成優化前后的差異報告:
smem -w before.txt after.txt
因為PSS計算了共享庫的分配比例,例如10個進程共享1MB庫,則每個進程的PSS只計0.1MB。
添加-c "name user pss command"
參數
使用sudo或通過/proc/sys/kernel/yama/ptrace_scope
調整ptrace權限
smem
通過創新的內存計算方式,為系統管理員提供了更精準的內存分析視角。結合其可視化功能和靈活的篩選條件,能夠快速定位內存瓶頸。建議將smem
納入日常監控工具集,配合htop
、vmstat
等工具形成完整的內存監控方案。
附:常用命令速查表
參數 作用 -t 顯示總計 -k/-m 以KB/MB顯示 -p 顯示百分比 -s 指定排序字段 -r 降序排列 ”`
注:本文實際約1200字,可根據需要調整章節深度。建議實際操作時結合man smem
查看最新參數說明。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。