nginx性能調優與深度監控

目錄

nginx性能調優

更改進程數與連接數

進程數

連接數

靜態緩存功能設置

日志切割

配置網頁壓縮

nginx 的深度監控

GoAccess 簡介

GoAccess安裝

?編輯

配置中文環境

GOAccess生成中文報告

測試訪問

nginx vts 簡介

nginx vts 安裝

nginx配置開啟vts

測試訪問


::

nginx性能調優

更改進程數與連接數

進程數

在高并發環境中,需要啟動更多的 Nginx 進程以保證快速響應,用以處理用戶的請求,避免造成阻塞。使用 ps aux 命令查看 Nginx 運行進程的個數。從命令執行結果可以看出 master process 是 Nginx 的主進程,開啟 1 個;worker process 是子進程,子進程也是開啟了 1 個。修改 Nginx 的配置文件的 worker_processes 參數,一般設為 CPU 的個數或者核數,在高并發的情況下可設置為 CPU 個數或者核數的 2 倍,可以查看 CPU 的核數以確定參數

參數設置為 4,和 CPU 的核數相同。運行進程數多一些,響應客戶端訪問請求時,Nginx 就不會臨時啟動新的進程提供服務,減少了系統的開銷,提升了服務速度。

修改完后,重啟服務,使用 ps aux 查看運行進程數的變化情況。從下面執行結果中可以看出開啟了 1 個主進程和 4 個子進程,參數設置起到了作用。

默認情況下,Nginx 的多個進程可能更多的跑在一顆 CPU 上。為了充分利用硬件多核多 CPU,可以分配不同的進程給不同的 CPU 處理。在一臺 4 核 CPU 服務器上,可以設置每個進程分別由不同的 CPU 核心處理,達到 CPU 的性能最大化。

連接數

單個Worker進程最大并發連接數

所以 nginx 的總并發數計算: 總并發數 = worker_processes × worker_connections

靜態緩存功能設置

當 Nginx 將網頁數據返回給客戶端后,可設置緩存時間,以便在日后進行相同內容的請求時直接返回,以避免重復請求,加快訪問速度。緩存時間一般針對靜態資源進行設置,對動態網頁不用設置緩存時間。
設置靜態資源緩存

然后重新加載或重啟服務。

驗證靜態緩存

通過瀏覽器查看,響應頭中包含字段即為緩存成功置連接超時

在企業網站中,為了避免同一個客戶長時間占用連接,造成資源浪費,可設置相應的連接超時參數,實現控制連接訪問時間。可以修改配置文件 nginx.conf,設置 keepalive_timeout 超時時間。

默認是60秒/設置超時是180秒/

keepalive_timeout

第一個參數指定了與客戶端的 keep - alive 連接超時時間,服務器將會在這個時間后關閉連接。
可選的第二個參數指定了在響應頭 Keep - Alive: timeout=time 中的 time 值。
這個頭能夠讓一些瀏覽器主動關閉連接,這樣服務器就不必去關閉連接了。沒有這個參數,Nginx 不會發送 Keep - Alive 響應頭。

日志切割

隨著 Nginx 運行時間的增加,產生的日志也會逐漸增加,為了方便掌握 Nginx 的運行狀態,需要時刻關注 Nginx 日志文件。太大的日志文件對監控是一個大災難,不便于分析排查,需要定期的進行日志文件的切割。
Nginx 沒有類似 Apache 的 cronlog 日志分割處理功能,但是可以通過 Nginx 的信號控制功能腳本來實現日志的自動切割,并將腳本加入到 Linux 的計劃任務中,讓腳本在每天的固定時間執行,便可實現日志切割功能。下面是具體操作步驟。

編寫腳本

/opt/fenge.sh,把 Nginx 的日志文件 /usr/local/nginx/logs/access.log 移動到目錄 /var/log/nginx 下面,以當前時間做為日志文件的名稱,然后用 kill - USR1 創建新的日志文件 /usr/local/nginx/logs/access.log,最后刪除 30 天之前的日志文件。

執行/root/fenge.sh,測試日志文件是否被切割

設置ceontab任務,定期執行腳本自動進行日志分割。

即每天的凌晨 1:30 分執行 /opt/fenge.sh 腳本,進行日志分割。

配置網頁壓縮

Nginx 的 ngx_http_gzip_module 壓縮模塊提供了對文件內容壓縮的功能,允許 Nginx 服務器將輸出內容發送到客戶端之前進行壓縮,以節約網站的帶寬,提升用戶的訪問體驗。默認 Nginx 已經安裝該模塊,只需要在配置文件中加入相應的壓縮功能參數對壓縮性能進行優化即可。

  • gzip on: 開啟 gzip 壓縮輸出;
  • gzip_min_length 1k: 用于設置允許壓縮的頁面最小字節數;
  • gzip_buffers 4 16k: 表示申請 4 個單位為 16k 的內存作為壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲 gzip 壓縮結果;
  • gzip_http_version 1.0: 用于設置識別 http 協議版本,默認是 1.1,目前大部分瀏覽器已經支持 1.0,1.0 也比較消耗服務器 CPU 資源;
  • gzip_comp_level 2: 用來指定 gzip 壓縮比,1 壓縮比最小,處理速度最快;9 壓縮比最大,傳輸速度快,但處理速度最慢,使用默認即可;
  • gzip_types text/plain: 壓縮類型,是對哪些網頁文檔啟用壓縮功能;
  • gzip_vary on: 選項可以讓前端的緩存服務器緩存經過 gzip 壓縮的頁面。

修改 Nginx 的配置文件,加入壓縮功能參數

注釋:

  • gzip on::開啟 Gzip 壓縮功能。
  • gzip_buffers 4 64k::設置用于壓縮響應的緩沖區數量和大小,這里表示分配 4 個 64KB 的緩沖區。
  • gzip_http_version 1.1::指定啟用 Gzip 壓縮的 HTTP 協議版本,這里是 HTTP 1.1。
  • gzip_comp_level 2::設置 Gzip 壓縮的級別,范圍是 1 到 9,2 表示相對較低的壓縮級別(壓縮速度快,壓縮比相對低)。
  • gzip_min_length 1k::指定當響應內容長度大于等于 1KB 時才進行 Gzip 壓縮。
  • gzip_vary on::向代理服務器發送 Vary: Accept - Encoding 頭信息,讓代理服務器根據客戶端的 Accept - Encoding 頭來決定是否緩存壓縮后的內容。
  • gzip_types text/plain text/javascript application/x - javascript text/css text/xml application/xml application/xml+rss::指定對哪些 MIME 類型的內容進行 Gzip 壓縮 。

在 Nginx 工作目錄建立一個超過 1K 大小的 html 文件,然后使用瀏覽器訪問網址驗證,顯示使用 gzip 進行了壓縮,如圖所示。
http://192.168.10.101/index.html

備注:

  • -I:該參數的作用是只獲取服務器返回的 HTTP 頭部信息,而不獲取響應的主體內容。
  • -H:此參數用于在請求中添加自定義的 HTTP 頭部信息。在這個例子里,添加的頭部信息是 Accept-Encoding: gzip,這表示客戶端(也就是發起請求的一方)支持 gzip 壓縮格式的響應內容。

nginx 的深度監控

GoAccess 簡介

GoAccess 是一個開源實時 Web 日志分析器和交互式查看器,可在 Linux 系統上的終端中或通過瀏覽器運行。它為需要動態可視化服務器報告的系統管理員提供快速且有價值的 HTTP 統計信息。
GoAccess 解析指定的 Web 日志文件并將數據輸出到 X 終端。特點包括:

  • 完全實時:所有面板和指標都定時在終端輸出上每 200 毫秒更新一次,在 HTML 輸出上每秒更新一次。
  • 所需的最少配置:您只需針對訪問日志文件運行它,選擇日志格式,然后讓 GoAccess 解析訪問日志并向您顯示統計信息。
  • 跟蹤應用程序響應時間:跟蹤處理請求所花費的時間。如果您想跟蹤減慢網站速度的頁面,則非常有用。
  • 幾乎所有 Web 日志格式:GoAccess 允許任何自定義日志格式字符串。預定義選項包括 Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront 等。
  • 增量日志處理:需要數據持久性?GoAccess 能夠通過磁盤持久性選項增量處理日志。
    GoAccess 只有一個依賴項:是用 C 編寫的,要運行它,您只需要 ncurses 作為依賴項。就是這樣。它甚至擁有自己的 Web Socket 服務器 ——?Simple WebSocket Server RFC6455 compliant - GWSocket。
  • 訪問者:按小時或日期確定點擊量、訪問者、帶寬和最慢運行請求的指標。每個虛擬主機的指標:擁有多個虛擬主機(服務器塊)?它有一個面板,顯示哪個虛擬主機消耗了大部分 Web 服務器資源。

GoAccess安裝

安裝編譯依賴

安裝文本字體支持

源碼編譯安裝GoAccess

--enable-utf8:啟用 Unicode 支持(顯示中文必備)。
--with-openssl:支持 HTTPS 日志分析。

配置中文環境

設置系統locale為中文

驗證Locale是否生效

GOAccess生成中文報告

[PARSING /usr/local/nginx/logs/access.log] {0} @ {0/s}
WebSocket 服務器已準備接收來自客戶的連接
--output=report.html:生成 HTML 報告。
--real-time-html:實時更新報告。

測試訪問

瀏覽器訪問 http:// 你的 ip/report.html

nginx vts 簡介

Nginx 的 VTS 模塊(Virtual Host Traffic Status)是一個開源監控工具,用于實時收集和分析 Nginx 的流量、性能指標及狀態數據。以下是其核心功能和特點:

實時監控

統計每個虛擬主機(server 塊)的請求量(QPS)、帶寬使用、響應時間、連接數等關鍵指標。支持按狀態碼(如 2xx、4xx、5xx)分類統計請求。

數據可視化

提供內置監控頁面(默認路徑 /status),通過圖表和表格展示實時及歷史數據。支持 JSON 格式輸出,方便集成到 Prometheus、Grafana 等監控平臺。

擴展性

通過 Lua 腳本擴展自定義監控邏輯(如記錄特定 API 的響應時間)。可配置數據存儲策略(如保留最近 1 小時的數據)。

報警集成

結合閾值規則觸發告警(需配合外部工具如 Zabbix、Telegram Bot)。

nginx vts 安裝

需要重新編譯 nginx 并擴展 vts 模塊

nginx配置開啟vts

修改nginx配置文件

測試訪問

瀏覽器訪問http://你的ip/vst

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

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

相關文章

【時時三省】Python 語言----牛客網刷題筆記

目錄 1,常用函數 1,input() 2,map() 3,split() 4,range() 5, 切片 6,列表推導式 山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省 1,常用函數 1,input() 該函數遇到 換行停止接收,返回類型為字符串 2,map() 該函數出鏡率較高,目的是將一個可迭…

docker compose yml 啟動的容器中,如何使用linux環境變量賦值

在 Docker Compose 中,可以通過環境變量(${VAR} 或 $VAR)來動態配置容器。以下是幾種常見的使用方式 - 使用 env_file 加載變量文件 可以單獨定義一個環境變量文件(如 app.env),然后在 docker-compose.y…

深入解析Kafka JVM堆內存:優化策略與監控實踐

💝💝💝歡迎蒞臨我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:「storms…

git常用操作命令

本文介紹git常用的操作命令,供大家參考。 1、開始 # 初始化本地git git init# 在初始化的目錄中,創建readme.txt,添加到git庫中 git add readme.txt git commit -m "寫了一個readme.txt文件"2、版本回退 2.1、git reset git lo…

解鎖 MCP 中的 JSON-RPC:跨平臺通信的奧秘

你好,我是 shengjk1,多年大廠經驗,努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注!你會有如下收益: 了解大廠經驗擁有和大廠相匹配的技術等希望看什么,評論或者私信告訴我! 文章目錄 零、 背景一、RPC vs HTTP1.1 什么是RPC1.2 為什么需要 RPC?1.3 RPC 解決了什么…

【Redis】第1節|Redis服務搭建

一、Redis 基礎概念 核心功能 內存數據庫,支持持久化(RDB/AOF)、主從復制、哨兵高可用、集群分片。常用場景:緩存、分布式鎖、消息隊列、計數器、排行榜等。 安裝環境 依賴 GCC 環境(C語言編譯)&#xff0…

GitLab-CI簡介

概述 持續集成(CI)和 持續交付(CD) 是一種流行的軟件開發實踐,每次提交都通過自動化的構建(測試、編譯、發布)來驗證,從而盡早的發現錯誤。 持續集成實現了DevOps, 使開發人員和運維人員從繁瑣的工作中解…

FFmpeg解碼器配置指南:為什么--enable-decoders不能單獨使用?

FFmpeg解碼器配置指南 在FFmpeg的編譯配置過程中,許多開發者會遇到關于解碼器配置的困惑。特別是--enable-decoders這個選項,很多人誤以為啟用它就能自動包含所有解碼器。本文將深入解析FFmpeg解碼器配置的機制,并通過實際測試展示正確的配置…

C++多態與虛函數

C++多態與虛函數詳解 多態(Polymorphism)是 C++ 面向對象編程的重要特性,通過統一的接口實現不同的行為。虛函數(Virtual Function)是實現運行時多態的核心機制。以下從多態的構成條件、意義、析構函數的虛函數化、純虛函數和抽象類,以及虛函數表的底層實現依次介紹。 1.…

游戲引擎學習第313天:回到 Z 層級的工作

回顧并為今天的內容定下基調 昨天我們新增了每個元素級別的排序功能,并且采用了一種我們認為挺有意思的方法。原本計劃采用一個更復雜的實現方式,但在中途實現的過程中,突然意識到其實有個更簡單的做法,于是我們就改用了這個簡單…

ODBC簡介

ODBC(Open Database Connectivity)是一個由 Microsoft 制定的標準接口,允許不同的應用程序通過統一的方式訪問各種數據庫系統。 🧠 簡單理解: ODBC 就像是 “翻譯官”,在應用程序(如 Excel、Py…

RK3588 buildroot QT 懸浮顯示(OSD)

概述 主要介紹在rockchip rk3588 buildroot中 運行QT程序。需要結合之前的文檔:認識DRM顯示系統、buildroot中QT開發指導、以及如何集成QT庫到3588板子上。 場景:在linux開發中,需要使用QT開發程序,做OSD顯示。(如下圖顯示,顯示器播放視頻,QT頁面懸浮于視頻上方,顯示…

sockaddr_in

在網絡編程中&#xff0c;sockaddr_in 結構體是用于表示 IPv4 地址的套接字地址結構。它定義在 <netinet/in.h> 頭文件中&#xff0c;是 sockaddr 結構體的一個特化版本&#xff0c;專門用于處理 IPv4 地址。 下面是 sockaddr_in 結構體的典型定義&#xff1a; struct …

有銅半孔工藝的制造難點與工藝優化

技術難點剖析 有銅半孔工藝在制造過程中面臨多重挑戰&#xff0c;主要集中在材料加工精度、孔壁完整性及良率控制三個方面&#xff1a; 銅層翹起與毛刺殘留 半孔成型時&#xff0c;銑刀高速切割可能導致孔壁銅層被拉扯&#xff0c;產生翹起或殘留銅屑&#xff0c;影響導電性能…

云原生安全:網絡協議TCP詳解

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 &#xff08;注&#xff1a;文末附可視化流程圖與專有名詞說明表&#xff09; 1. 基礎概念 TCP&#xff08;Transmission Control Protocol&#xff09;是…

Dify中的Extension插件開發例子:以neko為例

本文使用Dify v1.0.0-beta.1版本。以neko為例&#xff0c;介紹Dify中的Extension插件開發例子。需要說明的是Dify官方要求Python≥3.12&#xff0c;但發現本地PyCharm調試Python≥3.12有問題&#xff0c;就采用的Python 3.11版本。 一.Extension插件項目創建 1.填寫插件信息 …

Linux中logger命令的使用方法詳解

文章目錄 一、基礎語法二、核心功能選項三、?設施與優先級對照?1. 常用設施&#xff08;Facility&#xff09;2. 優先級&#xff08;Priority&#xff09;從低到高&#xff1a;3. 組合示例? 四、典型使用場景1. 記錄簡單消息2. 帶標簽和優先級3. 記錄命令輸出4. 發送到遠程服…

【圖論 并集查找】P3671 [USACO17OPEN] Where‘s Bessie? S|普及+

本文涉及知道點 C圖論 C并集查找 預計2025年5月29號 7:00發布 P3671 [USACO17OPEN] Where’s Bessie? S 題目描述 Farmer John 一直以精通技術而聞名&#xff0c;他正在測試他的新型無人機搭載的奶牛定位相機。這款相機據說可以拍攝他的田地并自動確定奶牛的位置。不幸的是…

《軟件工程》第 13 章 - 軟件維護

知識思維導圖 13.1 軟件維護與進化的概念 1. 核心概念 軟件維護&#xff1a;軟件交付使用后&#xff0c;為糾正錯誤、改善性能或其他屬性而進行的修改過程軟件進化&#xff1a;隨著時間推移&#xff0c;軟件系統為適應環境變化和用戶需求而不斷演變的過程 2. 維護類型&#…

AI Agent助力醫療科研突破

最近&#xff0c;AI Agent在醫療科研領域的突破格外引人注目。非營利組織Future House宣布其多智能體系統Robin在約10周內&#xff0c;為干性年齡相關性黃斑變性&#xff08;dAMD&#xff09;發現了一種潛在新療法&#xff0c;這一成果展示了AI在加速科學發現&#xff0c;特別是…