Nginx學習筆記3--(極客時間-陶輝)

fdsafwagdagadg6576發表於2020-10-20

目錄

nginx模組
記憶體池
連線池

nginx模組

?nginx原始碼的/objs/ngx_modules.c中*ngx_modules[]陣列代表了編譯進nginx的模組。
在這裡插入圖片描述

nginx連線池

nginx連線池
?每個worker程式都有一個獨立的ngx_cycle_t這樣的一個資料結構
?connections陣列:連線池

  • 官方文件Core_functionality的worker_connections
Syntax:	worker_connections number;
Default:	worker_connections 512;
Context:	events

預設512個陣列,nginx一般是要處理萬,十萬,百萬級,一般都要修改。
這些連線不止包括客戶端的連線,也包括面向伺服器的,所以做反向代理的時候等於消耗兩個連線。
在這裡插入圖片描述
? 每個連線預設對應一個讀事件一個寫事件。每個連線大概佔用96+232位元組,worker_connections配置的越大,初始化的時候預分配的記憶體就越大。

  • ngx_event_handler_pt handler : 這是一個回撥方法,很多第三方模組會把它設定為自己的實現
  • ngx_rbtree_node_t timer : 讀寫事件超時
  • ngx_queue_t queue : 佇列
  • bytes_sent
    --------------------------------以下是nginx.conf--------------------------------
    log_format main ‘$remote_addr - r e m o t e u s e r [ remote_user [remoteu​ser[time_local] "KaTeX parse error: Double superscript at position 37: … '̲status [r e q u e s t l e n g t h : request_length:requestl​ength:bytes_sent “KaTeX parse error: Double superscript at position 42: … '̲"http_user_agent” “$http_x_forwarded_for”’;
    --------------------------------以下是log---------------------------------------
    127.0.0.1 - - [22/Apr/2019:20:35:42 +0800] “GET /index2.html HTTP/1.1” 200 [465:675 “http://localhost:90/” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Safari/605.1.15” "-

記憶體池

提前分配好一些記憶體

連線記憶體池

Syntax:	connection_pool_size size;
Default:	connection_pool_size 256|512;   #位元組,每個連線預分配記憶體大小,可以分配更大。
Context:	http, server

請求記憶體池

Syntax:	request_pool_size size;
Default:	request_pool_size 4k;   #包括head,url
Context:	http, server
  • 連線記憶體池:當執行一個tcp連線的時候上面可能會執行多個HTTP請求(keepalive),連線沒有關閉,有些記憶體為連線分配一次就夠,連線不關閉就不需要釋放。
  • 請求記憶體池:每個HTTP請求通常會分配4K的記憶體。
    ?減少記憶體碎片
    ?提前預分配了空間,可以減少分配記憶體的次數。

相關文章