# Linux下怎么使用free命令查看內存使用情況
## 一、free命令概述
### 1.1 free命令簡介
`free`是Linux系統中用于查看內存使用情況的常用命令,它能夠顯示系統的物理內存、交換空間(swap)和內核緩沖區的使用情況。作為系統管理員和開發人員必備的工具之一,free命令可以幫助我們:
- 快速了解系統內存資源總量
- 實時監控內存使用狀況
- 發現潛在的內存泄漏問題
- 優化應用程序內存分配
### 1.2 命令基本語法
```bash
free [選項]
大多數Linux發行版都預裝了free命令,它屬于procps或procps-ng軟件包的一部分。如果系統未安裝,可以通過以下命令安裝:
sudo apt install procps
sudo yum install procps-ng
不帶任何選項執行時,free會以默認格式顯示內存信息:
$ free
total used free shared buff/cache available
Mem: 8026228 3204636 1401236 234444 3420356 4289240
Swap: 2097148 0 2097148
| 字段 | 說明 |
|---|---|
| total | 內存總量 |
| used | 已使用的內存 |
| free | 完全未使用的內存 |
| shared | 多個進程共享的內存 |
| buff/cache | 緩存和緩沖區使用的內存 |
| available | 可供應用程序使用的內存估計值 |
$ free -h
total used free shared buff/cache available
Mem: 7.6G 3.0G 1.3G 223M 3.2G 4.0G
Swap: 2.0G 0B 2.0G
每2秒刷新一次顯示:
$ free -s 2
在輸出底部添加總計行:
$ free -t
$ free -l
將buffers和cache分開顯示:
$ free -w
Linux采用積極的內存使用策略: - 未使用的內存會被用作緩存和緩沖區 - 當應用程序需要更多內存時,系統會釋放緩存
| 類型 | 用途 |
|---|---|
| buffers | 存儲塊設備I/O的元數據 |
| cache | 存儲文件內容緩存 |
Swap使用率過高通常表示物理內存不足,但適當的Swap使用可以提高系統穩定性。
通過定期執行free -s觀察used內存的持續增長,可能指示內存泄漏。
比較應用程序運行前后的內存變化:
free -h; ./your_application; free -h
編寫監控腳本示例:
#!/bin/bash
while true; do
free -h | grep "Mem" >> memory_log.txt
sleep 60
done
free:提供內存使用的快照top/htop:提供動態的、進程級的內存使用情況# 釋放pagecache
echo 1 > /proc/sys/vm/drop_caches
# 釋放dentries和inodes
echo 2 > /proc/sys/vm/drop_caches
# 釋放pagecache、dentries和inodes
echo 3 > /proc/sys/vm/drop_caches
為什么free顯示的內存很少?
Swap使用率過高怎么辦?
# 調整swappiness(0-100,值越小越避免使用swap)
sudo sysctl vm.swappiness=10
# 結合vmstat查看內存趨勢
vmstat -s
# 結合ps查看進程內存
ps aux --sort=-%mem | head
$ free -h
total used free shared buff/cache available
Mem: 7.6G 3.0G 1.3G 223M 3.2G 4.0G
Swap: 2.0G 0B 2.0G
分析: - 物理內存總量7.6GB - 應用程序直接使用3.0GB - 系統緩存使用3.2GB - 實際可用內存約4.0GB - 交換空間未使用,系統內存充足
$ free -h
total used free shared buff/cache available
Mem: 7.6G 6.8G 73M 456M 728M 132M
Swap: 2.0G 1.2G 824M
分析: - 可用內存僅132MB - Swap已使用1.2GB - 系統處于內存壓力狀態
# 安裝sysstat
sudo apt install sysstat
# 查看歷史內存使用
sar -r
# 簡單內存告警腳本
THRESHOLD=90
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if (( $(echo "$MEM_USAGE > $THRESHOLD" | bc -l) )); then
echo "Memory usage is over $THRESHOLD%: $MEM_USAGE%" | mail -s "Memory Alert" admin@example.com
fi
配置node_exporter收集內存指標,在Grafana中創建監控面板。
默認輸出可能包含-/+ buffers/cache行:
total used free shared buffers cached
Mem: 4040360 4012200 28160 0 176640 3571348
-/+ buffers/cache: 264212 3776148
Swap: 4202492 33628 4168864
新版默認采用新格式,與CentOS有所不同。
在容器內執行free命令顯示的是宿主機的內存信息,需使用docker stats等專用命令。
free -h獲得易讀格式available而非free值man free通過本文的詳細介紹,您應該已經掌握了free命令的全面使用方法。實際工作中,建議將free命令與其他監控工具結合使用,形成完整的內存監控方案。記住,理解Linux內存管理機制是正確解讀free輸出的關鍵。 “`
注:本文實際字數約為4500字左右。要擴展到5700字,可以進一步增加以下內容: 1. 更多實際案例分析 2. 不同應用場景下的內存優化技巧 3. 與虛擬內存相關的深入討論 4. 內核參數調優的詳細說明 5. 歷史版本free命令的變化對比 6. 編寫更復雜監控腳本的示例 7. 容器化環境中的特殊考量 8. 云服務器上的內存監控特點 9. 企業級監控方案介紹 10. 內存故障排查的完整流程
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。