Nginx效能優化(學習筆記二十五)
1.減小Nginx編譯後的檔案大小
在編譯Nginx時,預設以debug模式進行,而在debug模式下會插入很多跟蹤和ASSERT之類的資訊,編譯完成後,一個Nginx要有好幾兆位元組。在編譯前取消Nginx的debug模式,編譯完成後Nginx只有幾百千位元組,因此可以在編譯之前,修改相關原始碼,取消debug模式,具體方法如下:
在Nginx原始碼檔案被解壓後,找到原始碼目錄下的auto/cc/gcc檔案,在其中找到如下幾行:
# debug
CFLAGS=”$CFLAGS -g”
註釋掉或刪掉這兩行,即可取消debug模式。
2.為特定的CPU指定CPU型別編譯優化
在編譯Nginx時,預設的GCC編譯引數是“-O”,要優化GCC編譯,可以使用以下兩個引數:
–with-cc-opt=`-O3`
–with-cpu-opt=CPU #為特定的 CPU 編譯,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
要確定CPU型別,可以通過如下命令:
[root@localhost home]#cat /proc/cpuinfo | grep “model name”
二、利用TCMalloc優化Nginx的效能
TCMalloc的全稱為Thread-Caching Malloc,是谷歌開發的開源工具“google-perftools”中的一個成員。與標準的glibc庫的malloc相比,TCMalloc庫在記憶體分配效率和速度上要高很多,這在很大程度上提高了伺服器在高併發情況下的效能,從而降低系統負載。下面簡單介紹如何為Nginx新增TCMalloc庫支援。
要安裝TCMalloc庫,需要安裝libunwind(32位作業系統不需要安裝)和google-perftools兩個軟體包,libunwind庫為基於64位CPU和作業系統的程式提供了基本函式呼叫鏈和函式呼叫暫存器功能。下面介紹利用TCMalloc優化Nginx的具體操作過程:
1.安裝libunwind庫
可以從http://download.savannah.gnu.org/releases/libunwind下載相應的libunwind版本,這裡下載的是libunwind-0.99-alpha.tar.gz,安裝過程如下:
[root@localhost home]#tar zxvf libunwind-0.99-alpha.tar.gz
[root@localhost home]# cd libunwind-0.99-alpha/
[root@localhost libunwind-0.99-alpha]#CFLAGS=-fPIC ./configure
[root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC
[root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC install
2.安裝google-perftools
可以從http://google-perftools.googlecode.com下載相應的google-perftools版本,這裡下載的是google-perftools-1.8.tar.gz,安裝過程如下:
[root@localhost home]#tar zxvf google-perftools-1.8.tar.gz
[root@localhost home]#cd google-perftools-1.8/
[root@localhost google-perftools-1.8]# ./configure
[root@localhost google-perftools-1.8]#make && make install
[root@localhost google-perftools-1.8]#echo “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf
[root@localhost google-perftools-1.8]# ldconfig
至此,google-perftools安裝完成。
3.重新編譯Nginx
為了使Nginx支援google-perftools,需要在安裝過程中新增“–with-google_perftools_module”選項重新編譯Nginx,安裝程式碼如下:
[root@localhostnginx-0.7.65]#./configure
>–with-google_perftools_module –with-http_stub_status_module –prefix=/opt/nginx
[root@localhost nginx-0.7.65]#make
[root@localhost nginx-0.7.65]#make install
到這裡Nginx安裝完成。
4.為google-perftools新增執行緒目錄
建立一個執行緒目錄,這裡將檔案放在/tmp/tcmalloc下,操作如下:
[root@localhost home]#mkdir /tmp/tcmalloc
[root@localhost home]#chmod 0777 /tmp/tcmalloc
5.修改Nginx主配置檔案
修改nginx.conf檔案,在pid這行的下面新增如下程式碼:
#pid logs/nginx.pid;
google_perftools_profiles /tmp/tcmalloc;
接著,重啟Nginx,完成google-perftools的載入。
6.驗證執行狀態
為了驗證google-perftools已經正常載入,通過如下命令檢視:
[root@ localhost home]# lsof -n | grep tcmalloc
nginx 2395 nobody 9w REG 8,8 0 1599440 /tmp/tcmalloc.2395
nginx 2396 nobody 11w REG 8,8 0 1599443 /tmp/tcmalloc.2396
nginx 2397 nobody 13w REG 8,8 0 1599441 /tmp/tcmalloc.2397
nginx 2398 nobody 15w REG 8,8 0 1599442 /tmp/tcmalloc.2398
由於在Nginx配置檔案中,設定worker_processes的值為4,因此開啟了4個Nginx執行緒,每個執行緒會有一行記錄。每個執行緒檔案後面的數字值就是啟動的Nginx的PID值。
至此,利用TCMalloc優化Nginx的操作完成。
三、Nginx核心引數優化
核心引數的優化,主要是在Linux系統中針對Nginx應用而進行的系統核心引數優化,常見的優化引數值如下。
下面給出一個優化例項以供參考:
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
將上面的核心引數值加入/etc/sysctl.conf檔案中,然後執行如下命令使之生效:
[root@ localhost home]#/sbin/sysctl -p
下面是對例項中選項的含義進行介紹:
net.ipv4.tcp_max_tw_buckets引數用來設定timewait的數量,預設是180000,這裡設為6000。
net.ipv4.ip_local_port_range選項用來設定允許系統開啟的埠範圍。
net.ipv4.tcp_tw_recycle選項用於設定啟用timewait快速回收。
net.ipv4.tcp_tw_reuse選項用於設定開啟重用,允許將TIME-WAIT sockets重新用於新的TCP連線。
net.ipv4.tcp_syncookies選項用於設定開啟SYN Cookies,當出現SYN等待佇列溢位時,啟用cookies進行處理。
net.core.somaxconn選項預設值是128, 這個引數用於調節系統同時發起的tcp連線數,在高併發的請求中,預設的值可能會導致連結超時或者重傳,因此,需要結合併發請求數來調節此值。
net.core.netdev_max_backlog選項表示當每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許傳送到佇列的資料包的最大數目。
net.ipv4.tcp_max_orphans選項用於設定系統中最多有多少個TCP套接字不被關聯到任何一個使用者檔案控制程式碼上。如果超過這個數字,孤立連線將立即被複位並列印出警告資訊。這個限制只是為了防止簡單的DoS攻擊。不能過分依靠這個限制甚至人為減小這個值,更多的情況是增加這個值。
net.ipv4.tcp_max_syn_backlog選項用於記錄那些尚未收到客戶端確認資訊的連線請求的最大值。對於有128MB記憶體的系統而言,此引數的預設值是1024,對小記憶體的系統則是128。
net.ipv4.tcp_synack_retries引數的值決定了核心放棄連線之前傳送SYN+ACK包的數量。
net.ipv4.tcp_syn_retries選項表示在核心放棄建立連線之前傳送SYN包的數量。
net.ipv4.tcp_fin_timeout選項決定了套接字保持在FIN-WAIT-2狀態的時間。預設值是60秒。正確設定這個值非常重要,有時候即使一個負載很小的Web伺服器,也會出現因為大量的死套接字而產生記憶體溢位的風險。
net.ipv4.tcp_keepalive_time選項表示當keepalive啟用的時候,TCP傳送keepalive訊息的頻度。預設值是2(單位是小時)。
相關文章
- 斜率優化學習筆記優化筆記
- Nginx 學習筆記Nginx筆記
- Android效能優化 筆記Android優化筆記
- Linux 效能優化筆記Linux優化筆記
- Web 效能優化筆記Web優化筆記
- Mysql 優化(學習筆記二十)MySql優化筆記
- 【Nginx學習筆記】-初識NginxNginx筆記
- MySQL優化學習筆記之explainMySql優化筆記AI
- MySQL優化學習筆記之索引MySql優化筆記索引
- Android卡頓優化學習筆記Android優化筆記
- Android效能優化筆記(一)——啟動優化Android優化筆記
- PHP7效能優化筆記PHP優化筆記
- 【持續更新...】Nginx 學習筆記Nginx筆記
- Android效能優化相關的學習記錄(1)Android優化
- Nginx安全優化與效能調優Nginx優化
- ES 筆記二十五:綜合排序 Function Score Query 優化算分筆記排序Function優化
- 讀小程式效能優優化實踐-筆記優化筆記
- Python零基礎學習筆記(二十五)——裝飾器Python筆記
- HDL/FPGA學習筆記二十五:Vivado PLL IP核的使用FPGA筆記
- Nginx 學習筆記--程式與模組Nginx筆記
- 【前端效能優化】高效能JavaScript讀書筆記前端優化JavaScript筆記
- 《java學習三》jvm效能優化-------調優JavaJVM優化
- AI學習筆記——Tensorflow中的Optimizer(優化器)AI筆記優化
- NginxPHP配置與優化(學習筆記二十二)NginxPHP優化筆記
- 效能優化的過程學習優化
- 強化學習筆記強化學習筆記
- Nginx變數詳解(學習筆記十九)Nginx變數筆記
- Nginx學習筆記(反向代理&搭建叢集)Nginx筆記
- Nginx 學習筆記--程式與模組(二)Nginx筆記
- 《java學習三》jvm效能優化------jconsulJavaJVM優化
- 效能測試學習筆記:Loadrunner如何進行引數化?筆記
- 強化學習-學習筆記3 | 策略學習強化學習筆記
- js效能優化相關內容筆記整理JS優化筆記
- 強化學習-學習筆記5 | AlphaGo強化學習筆記Go
- 前端效能優化(慕課網筆記)-4-資源的優化前端優化筆記
- 強化學習-學習筆記2 | 價值學習強化學習筆記
- redis學習(六) 排序(sort,by,store,效能優化)Redis排序優化
- 強化學習-學習筆記12 | Dueling Network強化學習筆記