一、編譯安裝過程優化
1.減小Nginx編譯後的文件大小
在編譯Nginx時,默認以debug模式進行,而在debug模式下會插入很多跟蹤和ASSERT之類的信息,編譯完成後,一個Nginx要有好幾兆字節。在編譯前取消Nginx的debug模式,編譯完成後Nginx只有幾百千字節,因此可以在編譯之前,修改相關源碼,取消debug模式,具體方法如下:
在Nginx源碼文件被解壓後,找到源碼目錄下的auto/cc/gcc文件,在其中找到如下幾行:
1 # debug 2 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"
二、Nginx內核參數優化
內核參數的優化,主要是在Linux系統中針對Nginx應用而進行的系統內核參數優化,常見的優化參數值如下。
下面給出一個優化實例以供參考:
1 net.ipv4.tcp_max_tw_buckets = 65535 2 net.ipv4.ip_local_port_range = 1024 65000 3 net.ipv4.tcp_tw_recycle = 1 4 net.ipv4.tcp_tw_reuse = 1 5 net.ipv4.tcp_syncookies = 1 6 net.core.somaxconn = 262144 7 net.core.netdev_max_backlog = 262144 8 net.ipv4.tcp_max_orphans = 262144 9 net.ipv4.tcp_max_syn_backlog = 262144 10 net.ipv4.tcp_synack_retries = 1 11 net.ipv4.tcp_syn_retries = 1 12 net.ipv4.tcp_fin_timeout = 1 13 net.ipv4.tcp_keepalive_time = 30
將上面的內核參數值加入/etc/sysctl.conf文件中,然後執行如下命令使之生效:
[root@ localhost /etc]#/sbin/sysctl -p
下面是對實例中選項的含義進行介紹:
參數用來設定timewait的數量,默認是180000,這裡設為65535。
net.ipv4.tcp_max_tw_buckets
選項用來設定允許系統打開的端口範圍。
net.ipv4.ip_local_port_range
選項用於設置啟用timewait快速回收。
net.ipv4.tcp_tw_recycle
選項用於設置開啟重用,允許將TIME-WAIT sockets重新用於新的TCP連接。
net.ipv4.tcp_tw_reuse
選項用於設置開啟SYN Cookies,當出現SYN等待隊列溢出時,啟用cookies進行處理。
net.ipv4.tcp_syncookies
選項默認值是128, 這個參數用於調節系統同時發起的tcp連接數,在高併發的請求中,默認的值可能會導致鏈接超時或者重傳,因此,需要結合併發請求數來調節此值。
net.core.somaxconn
選項表示當每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許發送到隊列的數據包的最大數目。
net.core.netdev_max_backlog
選項用於設定系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤立連接將立即被複位並打印出警告信息。這個限制只是為了防止簡單的DoS攻擊。不能過分依靠這個限制甚至人為減小這個值,更多的情況是增加這個值。
net.ipv4.tcp_max_orphans
選項用於記錄那些尚未收到客戶端確認信息的連接請求的最大值。對於有128MB內存的系統而言,此參數的默認值是1024,對小內存的系統則是128。
net.ipv4.tcp_max_syn_backlog
參數的值決定了內核放棄連接之前發送SYN+ACK包的數量。
net.ipv4.tcp_synack_retries
選項表示在內核放棄建立連接之前發送SYN包的數量。
net.ipv4.tcp_syn_retries
選項決定了套接字保持在FIN-WAIT-2狀態的時間。默認值是60秒。正確設置這個值非常重要,有時候即使一個負載很小的Web服務器,也會出現因為大量的死套接字而產生內存溢出的風險。
net.ipv4.tcp_fin_timeout
選項表示當keepalive啟用的時候,TCP發送keepalive消息的頻度。默認值是2(單位是小時)。
net.ipv4.tcp_keepalive_time