一些指標
和nginx有關的核心調優:
可以修改/etc/sysctl.conf來更改核心引數調優
nginx為訪問第三方服務做的優化
在用nginx開發模組時,如果需要訪問第三方服務, 不能自己簡單的用套接字程式設計, 會破壞nginx全非同步架構。nginx提供了兩種全非同步通訊方式:
upstream:它把nginx定義成**伺服器, 首要功能時透傳。 nginx反向**功能就是基於此。
subrequest用於處理請求派生出的子請求
兩者區別: 比如實現頻控模組要去redis讀寫資料, 這就是乙個子請求, 在非同步收到響應後, 如果通過頻控, 就需要將請求透傳給上游, 此時用upstream
配置搜尋優化
server 配置通過hash表搜尋
location塊通過二叉樹搜尋, 因為是靜態的,不會變, 所以不用紅黑樹, 用的完全平衡二叉樹
記憶體池:
事件:
程序模型:
驚群問題:nginx 會fork 多個子程序監聽同乙個埠, 子程序在accept建立新連線時會爭搶,程序數量多時會有效能下降。
開accept_mutex鎖(預設開啟)解決。 nginx通過乙個程序間同步鎖accept_mutex, 保證同一時刻只能由乙個woker在監聽web埠。釋放鎖通過定時器事件來實現。
程序間負載均衡問題:多個woker搶乙個事件時, 會有乙個成功, 但如果這個woker本來就已經堆積了大量事件,另外有空閒程序或者任務少的程序搶不到事件, 子程序間就出現了負載不均衡。
開accept_mutex鎖解決(預設開啟), 每個woker有個變數ngx_accept_disabled, 初始為負值,絕對值為配置的總連線數的7/8, 每次使用乙個連線就加1。這個值為正時觸發負載均衡,此時來accept事件時此woker不會去搶accept_mutex, 而是將ngx_accept_disabled 減一。 疑問, 為何是7/8?
tcp與ngixn(nginx基於tcp上的優化):
p342 全節重點
三次握手時的syn, accept佇列
使用者程序在呼叫核心send方法時的的流程圖 9-9
recv方法的流程圖3. recv方法的流程圖
再看upstream
深入理解nginx
1.檢視核心版本 因為2.6以上的核心才支援epoll,nginx的高併發的特性依賴epoll uname a linux com.guang 3.10.0 514.16.1.el7.x86 64 1 smp wed apr 12 15 04 24 utc 2017 x86 64 x86 64 x8...
深入理解Nginx 閱讀筆記 一
眾所周知,apache lighttpd tomcat jetty iis等都是著名的web伺服器 這裡就不詳細介紹這幾個伺服器了,有興趣的可以自己查資料 那為什麼我要特意學習nginx呢?最重要的原因當然是 網際網路公司 尤其是杭州的某個電商公司 面試的時候可以瞎xx吹一波,顯得自己很叼 開玩笑的...
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...