使用者說「系統每天下午都很慢」、客戶說「那台主機三不五時 CPU 衝高」,要查是哪一支程式造成的,最直接的方式是收集每個執行檔的 CPU、記憶體、磁碟 I/O 一段時間,再看趨勢。
問題是,要做到這件事,常見的做法是裝 agent 或 exporter、架 Prometheus 收資料、再架 Grafana、再做儀表板……為了查一次問題要搞這麼多東西,很多時候客戶的主機也不允許隨便裝軟體。所以我在 IT @ Jason Tools 做了執行檔效能檢視器:主機上只要放一支腳本跑一段時間,把產生的檔案拿回來,丟進瀏覽器就能分析,不用安裝任何軟體。
運作方式
整個流程只有兩段:
| 階段 | 在哪裡做 | 需要什麼 |
|---|---|---|
| 收集資料 | 要檢查的主機 | Windows 內建的 PowerShell,或 Linux 內建的 bash |
| 分析資料 | 你自己的電腦 | 瀏覽器開 it.jason.tools |
和常見的監控方案比較:
| 項目 | agent/exporter+Prometheus+Grafana | 執行檔效能檢視器 |
|---|---|---|
| 主機上要裝的東西 | agent 或 exporter 服務 | 無,一支腳本跑完就結束 |
| 要另外架的伺服器 | Prometheus、Grafana | 無 |
| 要設定的儀表板 | 要自己做或匯入 | 內建,載入檔案就有圖表 |
| 資料去向 | 存在監控伺服器 | 檔案在你手上,分析時也不會上傳 |
| 適合 | 長期監控、告警 | 臨時查問題、一次性的效能分析 |
長期監控、告警還是要靠正式的監控系統(我自己用 LibreNMS),但「這台主機最近到底是誰在吃資源」這種一次性的問題,用這個方式快很多。
在主機上收集資料
收集用的腳本放在 GitHub 的 it-scripts 專案裡,工具頁面上也有完整的下載與執行指令,可以直接複製。
Windows
以系統管理員身分開啟 PowerShell:
if (!(Test-Path C:\temp)) { New-Item -Path C:\temp -ItemType Directory }; cd C:\temp
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri "https://raw.githubusercontent.com/jasoncheng7115/it-scripts/refs/heads/master/jt_procperf_analyzer/jt_procperf_analyzer.ps1" -OutFile "jt_procperf_analyzer.ps1"
powershell.exe -ExecutionPolicy Bypass -File .\jt_procperf_analyzer.ps1 -D 30 -I 15
-D 30:收集 30 分鐘-I 15:每 15 秒取樣一次-ExecutionPolicy Bypass:只對這一次執行放寬腳本限制,不會改到系統的執行原則
部分 Windows 11 用指令下載可能會被擋,也可以在瀏覽器直接下載 jt_procperf_analyzer.ps1 存到 C:\temp 再執行。完成後 CSV 檔就在 C:\temp。
Linux
建議用 root 執行,才能讀到所有程序的完整資訊:
cd /tmp
curl -O https://raw.githubusercontent.com/jasoncheng7115/it-scripts/refs/heads/master/jt_procperf_analyzer/jt_procperf_analyzer.sh
chmod +x jt_procperf_analyzer.sh
sudo ./jt_procperf_analyzer.sh -d 30 -i 15
Linux 版只用 /proc 與 awk、date 這些系統內建工具,連 bc 都不需要,一般發行版、容器、精簡的嵌入式系統都能執行。完成後會產生 process_metrics_YYYYMMDD_HHMMSS.csv。
常用參數
| 用途 | Windows | Linux |
|---|---|---|
| 收集時間(分鐘,預設 60) | -D | -d、--duration |
| 取樣間隔(秒,預設 60) | -I | -i、--interval |
| 輸出格式(CSV/JSON/TSV) | -F | -f、--format |
| 輸出目錄 | -O | -o、--output |
| 只收集特定程序 | -IncludeProcesses | --include |
| CPU 門檻(%) | -MinimumCPU | --min-cpu |
| 記憶體門檻(MB) | -MinimumMemoryMB | --min-memory |
例如只看 nginx 和 mysql:
sudo ./jt_procperf_analyzer.sh -d 30 -i 10 --include nginx --include mysql
注意:取樣間隔建議 20 秒以上。每次取樣都要讀取所有程序的資訊,間隔太短反而會讓腳本本身成為主機的負擔,影響你要觀察的結果。
邊收邊寫
腳本是每次取樣就寫入檔案,不是全部收完才寫。所以:
- 收集到一半可以先把檔案拿出來看
- 臨時要中斷,按
Ctrl + C,已經收集的資料不會遺失 - 長時間收集也不會在記憶體裡累積大量資料
在瀏覽器分析
打開 https://it.jason.tools/tools/process-perf-analyzer.html,把 CSV 檔拖進「資料來源」區塊,或直接貼上內容,按「開始分析」。

檔案不會上傳到任何地方,全部在瀏覽器分頁裡解析。效能資料裡有主機上的程序名稱、執行帳號,這點對客戶的主機特別重要。
想先看看效果,可以按「載入範例資料」,會產生一份 30 分鐘、每 10 秒取樣的範例。
總覽
分析完成後,上方會先顯示監控的程序數、CPU 最高的程序、記憶體最高的程序,以及資料來自哪種作業系統(依欄位自動判斷 Windows 或 Linux)。
挑選程序
左側列出所有程序,可以搜尋、多選,也可以依最大 CPU 使用率、最大記憶體、最大磁碟 I/O 設定門檻篩選,把幾百個程序收斂到真正有在用資源的那幾個。
同一個執行檔有多個程序時(例如瀏覽器、服務主機),可以切換:
- 合併模式:依執行檔名稱加總,看整支程式的用量
- 分開模式:依 PID 分開,找出是其中哪一個程序在作怪
時間範圍
用時間軸滑桿或指定起訖時間,把圖表聚焦在問題發生的那段時間,例如使用者說「下午兩點多最慢」,就只看那半小時。
趨勢圖表
選好程序後,會同時畫出八種趨勢圖:
| 圖表 | 用途 |
|---|---|
| CPU 使用率 | 誰在吃 CPU、是持續高還是週期性衝高 |
| 記憶體使用量 | 是否持續成長(可能有記憶體流失) |
| 磁碟 I/O 讀取、寫入 | 誰在大量讀寫磁碟 |
| I/O 操作次數 | 小檔案大量讀寫造成的 IOPS 壓力 |
| 執行緒數量 | 執行緒不斷增加通常是程式有問題 |
| 控制代碼數量(Linux 為檔案描述元) | 控制代碼只增不減,是資源流失的典型徵兆 |
| 分頁錯誤率 | 記憶體不足、頻繁換頁 |

所有圖表的時間軸是同步的,可以對照同一時間點 CPU、記憶體、磁碟 I/O 的變化,找出它們之間的關係。

最下方還有異常偵測與建議,例如 CPU 使用率超過 50% 的程序會特別標出來;以及每個程序的詳細資訊表。
常見使用情境
- 使用者反應某個時段特別慢
在那段時間前後收集,對照 CPU 與磁碟 I/O,看是排程工作、防毒掃描還是某個服務 - 懷疑記憶體或控制代碼流失
拉長收集時間(例如 6 小時、每 60 秒),看記憶體與控制代碼是否只增不減 - 變更前後比較
更新程式、調整設定前後各收一份,用同一個工具比對 - 客戶主機不允許安裝軟體
只需要執行腳本,跑完就結束,不會留下服務或排程
注意事項
- 腳本只讀取系統資訊,不會修改任何設定,執行前還是建議先打開看過內容,它是公開在 GitHub 上的
- Windows 部分進階指標需要系統管理員權限,Linux 用一般使用者執行時,只看得到自己的程序
- 這是取樣,不是連續記錄:取樣間隔 15 秒,就看不到中間幾秒鐘的尖峰,要抓短暫的尖峰,就縮短間隔、縮短收集時間
- 效能資料檔裡有程序名稱、執行帳號、命令列等資訊,交給別人分析前要留意內容
結論
想抓效能,不一定要先架一整套監控系統。一支內建 Shell 就能跑的腳本、一個瀏覽器就能開的分析工具,就能回答「到底是誰在吃資源」這個問題,而且主機上什麼都不用裝。
IT @ Jason Tools 系列的其他介紹:
- 〈IT @ Jason Tools:自主開發的 IT 實用工具箱(一)〉
https://blog.jason.tools/2026/10/it-jason-tools.html - 〈IT @ Jason Tools:自主開發的 IT 實用工具箱(二)〉
https://blog.jason.tools/2026/10/it-jason-tools-2.html - 〈IT @ Jason Tools:自主開發的 IT 實用工具箱(三)〉
https://blog.jason.tools/2026/10/it-jason-tools-3.html
參考資料
- IT @ Jason Tools:執行檔效能檢視器
https://it.jason.tools/tools/process-perf-analyzer.html - jt_procperf_analyzer:收集腳本與說明文件(GitHub)
https://github.com/jasoncheng7115/it-scripts/tree/master/jt_procperf_analyzer



