PM2:提升 Node.js 應用程式管理與性能的利器

在開發和部署 Node.js 應用程式時,如何高效地管理應用程式的啟動、監控、記錄以及處理高可用性等問題,一直是開發者面對的重要挑戰。

PM2 是一個功能強大且廣泛使用的 Node.js 應用程式管理工具,它能夠讓我們輕鬆解決這些問題,並提高應用程式的穩定性和性能。

image

https://pm2.keymetrics.io/

什麼是 PM2?

PM2 是一個進程管理器,專門設計用來管理 Node.js 應用程式。它支持多進程運行、應用程式監控、記錄管理,並且提供了自動重啟、性能優化等功能。PM2 能夠幫助開發者更高效地運行和維護 Node.js 應用,特別是在生產環境中。

以下是加入你部落格文章的內容,已經整理過,並以條列方式呈現:


PM2 解決的問題

PM2 是一個 Node.js 進程管理器,能夠解決許多在開發與部署過程中常見的問題,特別是針對生產環境的需求。以下是 PM2 解決的一些問題與功能:

  1. 自動重啟服務
    當 Node.js 服務崩潰時,PM2 能自動重啟服務,確保應用程序的高可用性。

  2. 服務重啟後自動重啟 PM2 進程
    當伺服器重啟時,PM2 會自動幫助我們重新啟動 Node.js 服務,確保應用在伺服器啟動後仍持續運行。

  3. 利用多核心 CPU 的多進程支持
    PM2 可以利用 CPU 的多個核心來啟動多個進程,達到負載平衡的效果,提升應用的效能。

  4. Graceful Reload (優雅重啟)
    使用 PM2 的 Graceful Reload 功能,可以達成類似於 Rolling Upgrade 的效果,實現零停機時間的升級。

  5. 多進程、多服務提高處理請求的速度
    PM2 支持多進程運行,有助於提升處理大量請求的速度,提升系統的可擴展性。

  6. 自動重啟排程設定
    PM2 允許設定定時任務,根據預設的時間自動重啟服務,保證服務穩定運行。

  7. 提供豐富的監控資訊
    PM2 提供了各種監控資訊,包括已重啟次數、CPU 使用量、記憶體使用量、進程 ID 等,幫助管理者輕鬆掌握應用運行狀態。

  8. 條件式重啟
    PM2 可以根據自定義條件自動重啟服務,如基於「運行時間」或「記憶體使用量」等條件進行重啟,確保服務持續穩定。

  9. 日志管理
    PM2 提供強大的日誌管理功能,支持將日志按預設週期切割並保存,超過設定的數量時自動刪除舊的日志文件,幫助清理磁碟空間。

  10. 簡單的部署方式
    PM2 支持簡單的一次性部署,可以將應用同時部署到多台伺服器上,讓大規模的部署變得更加容易。

  11. 與 CI/CD 工具結合
    PM2 可以與 CI/CD 工具無縫整合,支持自動化的持續集成與持續部署,提升開發與運維效率。

PM2 的安裝

要開始使用 PM2,我們需要先進行安裝。使用 npm 可以輕鬆安裝 PM2:

1
npm install pm2 -g

安裝完成後,我們可以在命令行中使用 pm2 指令來管理應用程式。

使用 PM2 管理應用程式

啟動應用程式

假設我們有一個名為 app.js 的 Node.js 應用程式,我們可以使用 PM2 來啟動它:

1
pm2 start app.js

這會啟動 app.js 並將其置於後台運行。

查看運行中的應用程式

可以使用以下命令查看當前運行的所有應用程式:

1
pm2 list

這將顯示正在運行的應用程式及其狀態、CPU 使用率等資訊。

image

停止與重啟應用程式

若需要停止或重啟某個應用程式,可以使用以下命令:

1
2
pm2 stop app_name
pm2 restart app_name

這樣可以靈活地管理應用程式,並且在應用程式崩潰或需要重啟時迅速恢復。

查看應用程式日誌

PM2 也提供了日誌管理功能,能夠幫助開發者查看應用程式的輸出和錯誤日誌。使用以下指令即可查看日誌:

1
pm2 logs

多進程管理

Node.js 是單執行緒的,這意味著它在處理繁重的任務時可能會遇到性能瓶頸。PM2 提供了多進程管理功能,可以幫助我們充分利用多核處理器,提升應用程式的並行處理能力。

使用以下命令啟動應用程式並利用最大進程數:

1
pm2 start app.js -i max

-i max 參數告訴 PM2 啟動最大數量的進程,這樣就能夠更好地分配工作負載,提高性能。

永久運行應用程式

在生產環境中,我們通常希望應用程式在系統重啟後仍然能自動啟動。PM2 提供了自動啟動功能,可以讓我們在系統重啟後重新啟動應用程式。

首先,執行以下指令以生成啟動腳本:

1
pm2 startup

根據輸出的提示執行額外的設定指令,例如:

1
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u <username> --hp /home/<username>

接著,保存當前的應用程式配置:

1
pm2 save

這樣一來,PM2 就會在系統啟動時自動啟動並運行應用程式。

性能監控

PM2 還提供了監控工具,幫助開發者追蹤應用程式的 CPU 和記憶體使用情況。可以使用以下命令啟動監控模式:

1
pm2 monit

這樣會彈出一個即時監控面板,讓你清楚看到每個進程的狀況。

image

配置文件

PM2 支援使用 JSON 配置文件來設定應用程式的運行參數。配置文件可以包含多個應用程式的設置,並且能夠指定不同的環境變數和啟動參數。

範例配置文件(ecosystem.config.js):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"apps": [
{
"name": "app",
"script": "app.js",
"env": {
"NODE_ENV": "production"
},
"env_development": {
"NODE_ENV": "development"
}
}
]
}

這樣,我們可以使用 pm2 start ecosystem.config.js 來啟動所有配置的應用程式。

這邊看起來給我感覺有點像 docker-compose

PM2 的進階應用

  • 集群模式:PM2 支援集群模式,能夠讓你的應用程式在多個處理器核心上運行,以便提高性能和可擴展性。
  • **日誌輪替 (Log Rotate)**:PM2 提供了日誌輪替功能,防止日誌檔案過大,導致磁碟空間不足。

常見問題與故障排除

  1. 應用程式崩潰:使用 pm2 logs 查看日誌,確定應用程式崩潰的原因。
  2. 應用程式無法啟動:檢查配置文件是否正確,並確保所需的環境變數已經設置。

結語

PM2 是一個強大的工具,能夠幫助我們有效地管理 Node.js 應用程式。在生產環境中,PM2 不僅能提高應用程式的可用性,還能夠提供監控、日誌管理等多種功能,讓開發者能夠專注於應用程式的開發而不必擔心運行和維護的問題。

如果你還沒有使用 PM2,現在就可以開始體驗這個強大的工具,讓你的 Node.js 應用程式更穩定、更高效。

希望這篇教學對你有所幫助!如果在設定過程中遇到問題,歡迎留言討論 😊