Nginx優化思路

2022-07-29 21:57:08 字數 2742 閱讀 7752

對於高效能** ,請求量大,如何支撐?

1方面,要減少請求

對於開發人員----合併css, 背景, 減少mysql查詢等.

2: 對於運維 nginx的expires ,利用瀏覽器快取等,減少查詢.

3: 利用cdn來響應請求

4: 最終剩下的,不可避免的請求----伺服器集群+負載均衡來支撐.

所以,來到第4步後,就不要再考慮減少請求這個方向了.

而是思考如何更好的響應高併發請求.

大的認識-------既然響應是不可避免的,我們要做的是把工作內容」平均」分給每台伺服器.

最理想的狀態 每台伺服器的效能都被充分利用.

優化過程:

1:判斷nginx的瓶頸

1.1: 首先把ab測試端的效能提高,使之能高併發的請求.

易出問題: too many open files

原因 :  ab在壓力測試時,開啟的socket過多

解決: ulimit -n 30000 (重啟失效)

觀察結果: nginx 不需要特殊優化的情況下, 5000個連線,1秒內響應.

滿足要求,但 wating狀態的連線過多.

1.2: 解決waiting程序過多的問題.

解決辦法: keepalive_timeout = 0; 

即: 請求結果後,不保留tcp連線.

在高併發的情況下, keepalive會佔據大量的socket連線.

結果: waiting狀態的連線明顯減少.

1.3: 解決服務端 too many open files

分析: nginx要響應,

1是要建立socket連線,

2 是要讀本地檔案

這兩個者限制.

由上圖可看出,nginx的問題容易出在2點上:

1: nginx接受的tcp連線多,能否建立起來?

2: nginx響應過程,要開啟許多檔案 ,能否開啟?

第1個問題: 在核心層面(見下)

第2個問題 (見下)

系統核心層面:

net.core.somaxconn = 4096 允許等待中的監聽

net.ipv4.tcp_tw_recycle = 1  tcp連線快速**

net.ipv4.tcp_tw_reuse = 1    tcp連線重用  

net.ipv4.tcp_syncookies = 0  不抵禦洪水攻擊

ulimit -n 30000

nginx層面:

解決: nginx.conf 下面: work_connection 加大

worker_connections  10240;

worker_rlimit_nofiles 10000;

keepalive_timeout 0;

nginx---->php-fpm之間的優化:

如上圖,在很多個nginx來訪問fpm時, fpm的程序要是不夠用, 會生成子程序.

生成子程序需要核心來排程,比較耗時,

如果**併發比較大,

我們可以用靜態方式一次性生成若干子程序,保持在記憶體中.

方法 -- 修改php-fpm.conf

pm = static  讓fpm程序始終保持,不要動態生成

pm.max_children= 32  始終保持的子程序數量

php-mysql的優化:

linux機器下 ,php 通過ip連線其他mysql伺服器時,容易出的問題

能ping能,但connect不到.

一般是由:mysql伺服器的防火牆影響的.

併發1萬連線,響應時間過長.

優化思路: 同上的nginx

1: 核心層面,加大連線數,並加快tcp**

2: mysql層面,增大連線數

3: php層面,用長連線,節省連線數

4: 用memcached快取,減輕mysql負擔

具體:1.1  , php伺服器增大 ulimint -n選項

1.2 mysql伺服器核心配置

新增或修改如下選項

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_syncookies = 0

# syscttl -p 使修改立即生效

2.1  修改mysql.cnf

vi  /etc/my.conf

# service mysqld restart 重啟mysql

3.1 php層面 ,用長連線

mysql_connect ---> mysql_pconnect

注: pconnect 在php以apache模組的形式存在時,無效果.

nginx+phjp+mysql+nginx

在引入memcached後,效能提公升不明顯,甚至還略有下降

memcached使50%的請求變快了,但是一部分,反倒慢了.

原因在於--php->memcached也要建立tcp連線,代價挺高,

但快取了資料之後,就省去了mysql的查詢時間.

總結: memcached適合存複雜的sql,尤其是連線查詢/模糊查詢的sql結果

memcached伺服器的優化(集中在核心的ipv4設定上,不再重複)

mysql思路 MySQL優化思路

通過指令碼,重新整理觀察mysql的status,觀察是否有週期性故障活波動,一般由訪問高峰或者快取失效引起,家快取並更改快取失效策略,是失效時間分散或頁面定時失,show processlist顯示哪些執行緒正在執行。您也可以使用mysqladmin processlist語句得到此資訊。如果您有...

OXWALL優化思路

閱讀oxwall的初始化 日誌實現部分,重點關注主頁的資料讀取流程,在資料讀取流程中增加寫日誌,可以看到初始化頁面涉及資料庫讀取的操作異常多。這將是效率的瓶頸,應該考慮將資料快取到redis中,並結合訊息佇列更新快取和資料庫。研究 安全隱患sql注入 csrf 偽造的跨站點請求 跨站點指令碼 xss...

mysql優化思路

調優思路 1.資料庫設計與規劃 以後再修該很麻煩,估計資料量,使用什麼儲存引擎 2.資料的應用 怎樣取資料,sql語句的優化 3.mysql服務優化 記憶體的使用,磁碟的使用 4.作業系統的優化 核心 tcp連線數量 5.公升級硬體裝置 磁碟io規劃 raid技術 raid0 xfs swap分割槽...