Linux系統(tǒng)負(fù)載怎么查?監(jiān)控負(fù)載平均值與CPU內(nèi)存磁盤網(wǎng)絡(luò)實用指南
監(jiān)控系統(tǒng)負(fù)載
系統(tǒng)負(fù)載介紹
系統(tǒng)負(fù)載平均值:Linux內(nèi)核以活動請求數(shù)的指數(shù)移動平均值來表示。
- 活動請求數(shù)不僅包含運行中進程,還包含等待IO的進程,對應(yīng)于R和D。等待IO包括處于睡眠等待預(yù)期磁盤和網(wǎng)絡(luò)響應(yīng)的任務(wù)。
- 指數(shù)移動平均值是一個數(shù)學(xué)公式,可以平滑趨勢數(shù)據(jù)的高值和低值,更加準(zhǔn)確地表示一段時間內(nèi)系統(tǒng)負(fù)載,并確定系統(tǒng)負(fù)載是隨著時間增加還是減少。
- 根據(jù)所有CPU活動請求數(shù),每5秒計算一次Load Average。通過匯總這些值,可以得到最近1分鐘,5分鐘和15分鐘內(nèi)的指數(shù)移動平均值。
- 一些UNIX系統(tǒng)僅考慮CPU使用率或運行隊列長度。Linux中負(fù)載平均值中還包含了對IO的考量,遇到負(fù)載平均值很高但CPU活動很低時,檢查磁盤和網(wǎng)絡(luò)活動。
- Linux將各個物理CPU核心和微處理器超線程計為獨立執(zhí)行單元。每個獨立的執(zhí)行單元擁有獨立的請求隊列。
stress工具
Linux 中的 stress 工具用于對系統(tǒng)進行壓力測試,可模擬 CPU、內(nèi)存、I/O 和磁盤等資源的高負(fù)載狀態(tài)。通過指定參數(shù)(如 -c 壓 CPU、-m 壓內(nèi)存)可創(chuàng)建負(fù)載,幫助發(fā)現(xiàn)系統(tǒng)在壓力下的穩(wěn)定性問題,常用于性能調(diào)優(yōu)或硬件驗證。
壓力測試cpu
#啟動兩個終端,一個終端進行消耗另一個終端監(jiān)控 [root@centos7 ~ 17:00:03]# stress -c 2 stress: info: [2178] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd #stress -c 2 stress -c 是針對cpu的后面的數(shù)字是幾個,這里的2會讓電腦2個cpu跑滿,另一臺監(jiān)控終端是我們通過top監(jiān)控 top - 17:03:21 up 5 min, 2 users, load average: 0.76, 0.26, 0.10 Tasks: 203 total, 3 running, 200 sleeping, 0 stopped, 0 zombie %Cpu0 : 100.0/0.0 100[|||||||||||||||||||||||||||||||||||||||||||||||||||| %Cpu1 : 100.0/0.0 100[|||||||||||||||||||||||||||||||||||||||||||||||||||| %Cpu2 : 0.0/0.0 0[ %Cpu3 : 0.0/0.0 0[ #4個cpu2個已經(jīng)跑滿,回測試終端ctrl+c結(jié)束
壓力測試-內(nèi)存
#先查看消耗前的內(nèi)存,通過free命令去查看-m 以mb為單位
[root@centos7 ~ 17:05:01]# free -m
total used free shared buff/cache available
Mem: 3931 479 3113 14 338 3220
Swap: 3967 0 3967
#消耗1Gb的內(nèi)存
[root@centos7 ~ 17:07:12]# stress -m 1 --vm-bytes 1G
stress: info: [2527] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd
#查看消耗后的內(nèi)存
[root@centos7 ~ 17:03:23]# free -m
total used free shared buff/cache available
Mem: 3931 1378 2214 14 338 2321
Swap: 3967 0 3967
**注意?。?!**Mem表示物理區(qū)域也就是內(nèi)存,total是共計多少內(nèi)存,used表示使用了多少,free是空閑,shared是共享,buff/cache是緩存,available當(dāng)前可用。 Swap是交互區(qū)域,是磁盤的存儲,當(dāng)物理區(qū)域不夠時會像交互區(qū)域借用內(nèi)存。
壓力測試-磁盤
[root@centos7 ~ 17:11:54]# stress -m 1 --vm-bytes 4G #創(chuàng)建一個消耗磁盤的進程,一個進程消耗4Gb [root@centos7 ~ 17:24:20]# sar -dp 1 Linux 3.10.0-1160.71.1.el7.x86_64 (centos7.xiaoliu.cloud) 2026年07月22日 _x86_64_ (4 CPU) 17時24分23秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 17時24分25秒 sda 209.00 0.00 214016.00 1024.00 115.94 684.98 4.79 100.20 17時24分25秒 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17時24分25秒 centos-root 98.00 0.00 100352.00 1024.00 116.51 1470.18 10.22 100.20 # 監(jiān)控磁盤讀寫速度,重點關(guān)注rd_sec/s和wr_sec/s,單位是0.5k/每秒,每個sec(sector)是512Byte。
網(wǎng)絡(luò)測試
# 傳送一個大size的文件 # 監(jiān)控帶寬 [root@centos7 ~ 17:27:37]# sar -n DEV 1 Linux 3.10.0-1160.71.1.el7.x86_64 (centos7.xiaoliu.cloud) 2026年07月22日 _x86_64_ (4 CPU) 17時28分04秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 17時28分05秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17時28分05秒 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17時28分05秒 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17時28分05秒 ens33 45963.00 6858.00 67666.94 402.50 0.00 0.00 0.00
監(jiān)控總結(jié)
以下是針對 Linux 系統(tǒng)監(jiān)控的幾條實用建議,涵蓋關(guān)鍵監(jiān)控維度和最佳實踐:
- 核心指標(biāo)實時監(jiān)控 重點跟蹤 CPU 使用率(用戶態(tài) / 系統(tǒng)態(tài)占比)、內(nèi)存占用(含緩存 /swap 使用率)、磁盤 I/O(讀寫吞吐量、IOPS)和網(wǎng)絡(luò)流量(帶寬利用率、連接數(shù))??赏ㄟ^
top/htop(實時)、vmstat/iostat(系統(tǒng)級)等工具快速查看。 - 部署專業(yè)監(jiān)控工具 對于服務(wù)器集群或長期監(jiān)控需求,建議使用 Prometheus + Grafana(可視化強)、Zabbix(全功能監(jiān)控)或 Nagios(輕量告警)等工具,實現(xiàn)指標(biāo)集中收集、趨勢分析和歷史數(shù)據(jù)查詢。
- 設(shè)置關(guān)鍵閾值告警 針對核心指標(biāo)配置告警閾值(如 CPU 持續(xù) 5 分鐘超 80%、磁盤空間不足 10%),通過郵件、短信或即時通訊工具推送告警,避免故障擴大。注意避免告警風(fēng)暴(可設(shè)置告警合并或延遲)。
- 監(jiān)控進程與服務(wù)狀態(tài) 定期檢查關(guān)鍵服務(wù)(如 Nginx、MySQL)的運行狀態(tài)、進程數(shù)及資源消耗,可通過
systemctl status或自定義腳本實現(xiàn)。對異常退出的進程,結(jié)合日志排查崩潰原因。 - 日志集中管理與分析 將系統(tǒng)日志(
/var/log/messages)、應(yīng)用日志集中存儲(如使用 ELK 棧),關(guān)注錯誤信息(ERROR級別)、登錄異常(/var/log/auth.log)和磁盤錯誤(dmesg | grep error),必要時配置日志告警規(guī)則。 - 磁盤健康監(jiān)控 除空間使用率外,需關(guān)注磁盤壞塊(
smartctl工具檢測 S.M.A.R.T 信息)和文件系統(tǒng)完整性(定期運行fsck,非掛載狀態(tài)下),避免硬件故障導(dǎo)致數(shù)據(jù)丟失。 - 網(wǎng)絡(luò)與安全監(jiān)控 監(jiān)控端口開放狀態(tài)(
netstat/ss)、異常連接(尤其是外部 IP 的高頻訪問)和防火墻規(guī)則生效情況。可結(jié)合tcpdump抓包分析可疑流量。 - 定期性能基線分析 記錄系統(tǒng)正常運行時的指標(biāo)基線(如平均負(fù)載、內(nèi)存使用峰值),當(dāng)指標(biāo)偏離基線時及時排查,避免微小異常累積成故障。
- 自動化監(jiān)控腳本 對個性化需求(如特定目錄文件數(shù)、應(yīng)用響應(yīng)時間),編寫 Shell 或 Python 腳本定期執(zhí)行檢查,輸出結(jié)果至監(jiān)控系統(tǒng)或直接觸發(fā)告警。
- 監(jiān)控權(quán)限與安全 限制監(jiān)控工具的權(quán)限(如僅授予讀取日志和指標(biāo)的權(quán)限),加密傳輸監(jiān)控數(shù)據(jù),防止監(jiān)控系統(tǒng)本身成為安全薄弱點。
通過分層監(jiān)控(基礎(chǔ)指標(biāo)→服務(wù)狀態(tài)→業(yè)務(wù)性能)和主動預(yù)警,可顯著提升系統(tǒng)穩(wěn)定性和故障響應(yīng)效率。
Linux 服務(wù)管理
systemd 介紹
基本概念
CentOS 7 使用 Systemd 引導(dǎo)系統(tǒng)啟動,速度最快,所有進程無論有無依賴關(guān)系則都是并行啟動(很多時候進程沒有真正啟動而是只有一個信號或者說是標(biāo)記而已,在真正利用的時候才會真正啟動)。Systemd為了解決上文的問題而誕生。它的目標(biāo)是,為系統(tǒng)的啟動和管理提供一套完整的解決方案。
系統(tǒng)引導(dǎo)程序:
- 用戶空間,systemd,pid為1
- 內(nèi)核空間,kthreadd,pid為2
服務(wù):從業(yè)務(wù)角度來稱呼,例如 web 服務(wù),數(shù)據(jù)庫服務(wù)。
守護進程(daemon):web 服務(wù)器對外提供 web 服務(wù),由 web 相關(guān)的進程提供支持。
以web服務(wù)為例:
- 服務(wù):web服務(wù)
- 守護進程:httpd
重點:一個服務(wù)的正常運行是有非常多大進程在維持,這個功能可能對應(yīng)部分進程,比如我們電腦開機,還沒有打開任何軟件,打開后臺管理器,有非常多的進程是啟動的,這些進程維持著服務(wù)正常的 運行,所以稱之為守護進程。
例如:
#我們在虛擬機上安裝軟件包httpd #啟動這個服務(wù) [root@centos7 ~ 18:40:18]# systemctl start httpd #啟動httpd #查看進程 [root@centos7 ~ 18:41:07]# ps -C httpd f PID TTY STAT TIME COMMAND 5745 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND 5751 ? S 0:00 \_ /usr/sbin/httpd -DFOREGROUND 5752 ? S 0:00 \_ /usr/sbin/httpd -DFOREGROUND 5753 ? S 0:00 \_ /usr/sbin/httpd -DFOREGROUND 5754 ? S 0:00 \_ /usr/sbin/httpd -DFOREGROUND 5755 ? S 0:00 \_ /usr/sbin/httpd -DFOREGROUND #f我們查看樹形結(jié)構(gòu)可以看出進程之間的關(guān)系,這六個進程就是httpd的守護進程
systemd 架構(gòu)
守護進程:systemd,由守護進程干活。
工具:systemctl,提供給用戶要、用來根機器交互的工具。
unit類型
systemctl 命令用于管理不同類型的系統(tǒng)對象,這些對象稱之為 units。
- Service unit:用于定義系統(tǒng)服務(wù),文件擴展名為**.service**,例如httpd.service
- Socket unit:用于標(biāo)識進程間通信用的 socket文件,文件擴展名為.socket
- Target unit:用于模擬實現(xiàn)“運行級別”,文件擴展名為.target
- Timer unit:用于管理計劃任務(wù),文件擴展名為.timer
- Device unit:用于定義內(nèi)核識別的設(shè)備,文件擴展名為.device
- Mount unit:用于定義文件系統(tǒng)掛載點,文件擴展名為.mount
- Snapshot unit:管理系統(tǒng)快照,文件擴展名為.snapshot
- Swap unit:用于標(biāo)識swap設(shè)備,文件擴展名為.swap
- Automount unit:文件系統(tǒng)的自動掛載點,文件擴展名為.automount
- Path unit:用于根據(jù)文件系統(tǒng)上特定對象的變化來啟動其他服務(wù),文件擴展名為.path
- Slice unit:用于資源管理,文件擴展名為.slice
查看 unit 列表信息
#列出狀態(tài)為loaded units [root@centos7 ~ 18:42:58]# systemctl list-units #數(shù)量非常多 [root@centos7 ~ 18:48:28]# systemctl list-units | wc -l 169
systemctl list-units命令輸出說明:
- UNIT:服務(wù)單元名稱。
- LOAD:systemd是否正確解析了單元的配置并將該單元加載到內(nèi)存中。
- ACTIVE:單元的高級別激活狀態(tài)。此信息表明單元是否已成功啟動。
- SUB:單元的低級別激活狀態(tài)。此信息指示有關(guān)該單元的更多詳細信息。信息視單元類型、 狀態(tài)以及單元的執(zhí)行方式而異。
- DESCRIPTION:單元的簡短描述。
#通過-t選定特定類型unit查看,我們選有關(guān)定時器類型 [root@centos7 ~ 18:49:47]# systemctl list-units -t timer UNIT LOAD ACTIVE SUB DESCRIPTION systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories unbound-anchor.timer loaded active waiting daily update of the root trust anchor for D LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 2 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'. #查看系統(tǒng)中類型為service,狀態(tài)為active和inactive的unit [root@centos7 ~ 18:56:38]# systemctl list-units --type service --all # 列出系統(tǒng)中所有unit,包括未loaded的unit [root@centos7 ~ 18:59:56]# systemctl list-unit-files #查看失敗的服務(wù)
命令解釋
- 選項 --failed 作用只顯示那些失敗的單元
- –type service 選項的作用是只顯示服務(wù)類型的單元
查看單個 unit 信息
[root@centos7 ~ 19:02:11]# systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 三 2026-07-22 16:58:03 CST; 2h 11min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1252 (sshd)
Tasks: 1
CGroup: /system.slice/sshd.service
└─1252 /usr/sbin/sshd -D
7月 22 16:58:03 centos7.xiaoliu.cloud systemd[1]: Starting OpenSSH server daemon...
7月 22 16:58:03 centos7.xiaoliu.cloud sshd[1252]: Server listening on 0.0.0.0 port 22.
...
| 關(guān)鍵字 | 概述 |
|---|---|
| loaded | 單元配置文件已處理 |
| active(running) | 正在運行 |
| active(exited) | 已成功完成一次性配置 |
| active(waiting) | 運行中,正在等待事件 |
| inactive | 不再運行 |
| enabled | 系統(tǒng)引導(dǎo)時啟動 |
| disabled | 系統(tǒng)引導(dǎo)時不啟動 |
| static | 無法啟動,依賴其他單元啟動 |
控制系統(tǒng)服務(wù)
| 命令 | 任務(wù) |
|---|---|
| systemctl status UNIT | 查看單元狀態(tài)的詳細信息。 |
| systemctl stop UNIT | 在運行中的系統(tǒng)上停止一項服務(wù)。 |
| systemctl start UNIT | 在運行中的系統(tǒng)上啟動一項服務(wù)。 |
| systemctl restart UNIT | 在運行中的系統(tǒng)上重新啟動一項服務(wù)。 |
| systemctl reload UNIT | 重新加載運行中服務(wù)的配置文件。 |
| systemctl mask UNIT | 禁用服務(wù),使其無法手動啟動或在系統(tǒng)引導(dǎo)時啟動。 |
| systemctl unmask UNIT | 使屏蔽的服務(wù)變?yōu)榭捎谩?/td> |
| systemctl enable UNIT | 將服務(wù)配置為在系統(tǒng)引導(dǎo)時啟動。使用 --now 選項也會啟動該服務(wù)。 |
| systemctl disable UNIT | 禁止服務(wù)在系統(tǒng)引導(dǎo)時啟動。使用 --now選項也會停止該服務(wù)。 |
# 停止服務(wù) [root@centos7 ~ 19:10:40]# systemctl stop sshd.service #此時我如果斷開連接在想通過ssh登錄到虛擬機是行不通的了,需要在主機上重新開啟ssh服務(wù) # 重新啟動服務(wù)(主機) [root@centos7 ~ 19:16:44]# systemctl start sshd.service #可以再次通過ssh登錄 # 重啟服務(wù),相當(dāng)于stop再start [root@centos7 ~ 19:18:58]# systemctl restart sshd.service #此時斷開連接再通過ssh連接不受影響 # 重新加載,一般是配置文件發(fā)生改變的時候配置,配置文件發(fā)生改變并不會立刻告知給服務(wù)進程,修改配置需要重新加載一次配置文件,重新加載服務(wù) [root@centos7 ~ 19:20:24]# systemctl reload sshd.service # 重新加載服務(wù),服務(wù)對應(yīng)的主進程不會重啟,只會重新加載一次配置文件。 # 禁止服務(wù)開機自啟 [root@centos7 ~ 19:22:53]# systemctl disable sshd.service [root@centos7 ~ 19:24:46]# systemctl is-enabled sshd disabled # 設(shè)置服務(wù)開機自啟 [root@centos7 ~ 19:25:03]# systemctl enable sshd.service --now [root@centos7 ~ 19:26:03]# systemctl is-enabled sshd enabled # 禁用服務(wù):服務(wù)被禁用后,將無法start,因為服務(wù)的配置文件指向/dev/null [root@centos7 ~ 19:26:15]# systemctl mask sshd.service # 取消禁用 [root@centos7 ~ 19:27:26]# systemctl unmask sshd.service #null文件像黑洞類似于丟棄站
開發(fā)一個 study 服務(wù)
- 開發(fā) studyd 服務(wù)主程序 study
腳本說明:這是一個無限循環(huán)的腳本,每 5 秒會向 /var/log/study.log 文件中追加一行包含當(dāng)前時間的日志,內(nèi)容為 [時間]: I'M studying [ Linux ]。
[root@centos7 ~ 19:27:46]# vim /usr/local/bin/xdc #!/bin/bash # 第一行內(nèi)容是腳本的 "解釋器聲明"(shebang),指定該腳本使用 /bin/bash 作為解釋器執(zhí)行。系統(tǒng)會根據(jù)這一行找到對應(yīng)的 shell 程序來解析后續(xù)命令。 # 啟動一個無限循環(huán):while 是循環(huán)關(guān)鍵字,true 是一個永遠為真的條件,因此這個循環(huán)會一直執(zhí)行下去,直到被外部終止(如 Ctrl+C)。 while true # 循環(huán)體的開始標(biāo)記,do 和后面的 done 之間的內(nèi)容是循環(huán)中重復(fù)執(zhí)行的命令。 do # 執(zhí)行 date 命令(獲取當(dāng)前系統(tǒng)時間),并通過 $(...) 捕獲其輸出,將結(jié)果賦值給變量 DATE。 DATE=$(date) # echo 命令輸出字符串,其中 $DATE 會被替換為變量的值 # >> 是追加重定向符號,將輸出內(nèi)容追加到 /var/log/study.log 文件中 # 最終輸出內(nèi)容類似 Fri Oct 31 10:00:00 CST 2025: I'M studying [ Linux ]。 echo "$DATE: I'M studying [ Linux ]" >> /var/log/study.log # 讓腳本暫停執(zhí)行 5 秒(sleep 命令用于延遲,單位默認(rèn)為秒),避免循環(huán)執(zhí)行過快。 sleep 5 # 循環(huán)體的結(jié)束標(biāo)記,與前面的 while 和 do 配合,標(biāo)志著一次循環(huán)的結(jié)束。 done [root@centos7 ~ 19:33:09]# chmod +x /usr/local/bin/xdc
2.創(chuàng)建 studyd 服務(wù)單元文件
#參考sshd
[root@centos7 ~ 19:35:03]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/studyd.service
[root@centos7 ~ 19:37:58]# vim /etc/systemd/system/studyd.service
[Unit]
Description=study server daemon
[Service]
ExecStart=/usr/local/bin/study
[Install]
WantedBy=multi-user.target
#配置文件發(fā)生變化通知systemd讀取unit的變化
[root@centos7 ~ 19:38:25]# systemctl daemon-reload
# 啟用并啟動服務(wù)
[root@centos7 ~ 19:38:55]# systemctl enable studyd --now
# 查看服務(wù)狀態(tài)
[root@centos7 ~ 19:39:26]# systemctl status studyd
● studyd.service - study server daemon
Loaded: loaded (/etc/systemd/system/studyd.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2026-07-22 19:25:46 CST; 13min ago
Main PID: 763 (study)
CGroup: /system.slice/studyd.service
├─ 763 /bin/bash /usr/local/bin/study
└─2748 sleep 5
7月 22 19:25:46 centos7.xiaoliu.cloud systemd[1]: Started study server daemon.
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux系統(tǒng)安裝Samba服務(wù)器實現(xiàn)過程
本文介紹了如何在CentOS7系統(tǒng)上安裝和配置Samba服務(wù)器,以實現(xiàn)Windows和Linux系統(tǒng)之間的文件共享2026-02-02
linux服務(wù)器用centos還是ubuntu系統(tǒng)
兩者同為目前版本中個人和小團隊常用的服務(wù)級操作系統(tǒng),在線提供的軟件庫中可以很方便的安裝到很多開源的軟件及庫,不過問了多年維護服務(wù)器的朋友多用centos系統(tǒng)2012-12-12
Linux系統(tǒng)中用dig命令查詢 DNS (域名系統(tǒng))記錄
dig命令(Domain Information Groper)是一個用于查詢DNS (域名系統(tǒng))記錄的強大工具,用于查詢DNS記錄,支持A、MX等類型及+short等選項,可診斷域名解析問題,安裝方法因系統(tǒng)而異,需注意輸出解讀及使用技巧,確保安全高效地進行DNS查詢2025-05-05
Linux虛擬機中node.js之開發(fā)環(huán)境搭建
這篇文章主要介紹了Linux虛擬機中node.js之開發(fā)環(huán)境搭建,有需要的朋友可以了解一下。2016-11-11
Linux服務(wù)器SSH客戶端連接目標(biāo)服務(wù)器失敗的解決方法
Linux服務(wù)器SSH客戶端連接目標(biāo)服務(wù)器失敗怎么辦?在出現(xiàn)問題時我們先用排除法查找原因,以下是根據(jù)幾種情況列出的解決方法,希望可以幫助到你,需要的朋友可以參考下2025-10-10

