1. 程式人生 > >CentOS 7.4 Tengine安裝配置詳解(一)

CentOS 7.4 Tengine安裝配置詳解(一)

tengine nginx

一、安裝配置Tengine

Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。

演示環境:

? OSCentOS 7.4 x86_64

? IP192.168.1.222

1、安裝開發環境:# yum -y groupinstall "Development Tools" "Server Platform Development"

2、安裝依賴程序包:

# yum -y install libxml2-devel libxslt-devel gd-devel GeoIP-devel google-perftools-devel libatomic_ops-devel cmake

3、解壓pcreperl兼容的正則表達式庫,下載地址:https://ftp.pcre.org/pub/pcre/):

# tar -xf pcre-8.42.tar.gz -C /usr/src # ls /usr/src/pcre-8.42

4、解壓openssl(安全套接字層密碼庫,下載地址:https://www.openssl.org/source/):

# tar -xf openssl-1.0.2o.tar.gz -C /usr/src # ls /usr/src/openssl-1.0.2o

5、解壓zlib(提供數據壓縮用的函式庫,下載地址:http://www.zlib.net/):

# tar -xf zlib-1.2.11.tar.gz -C /usr/src # ls /usr/src/zlib-1.2.11

6、使用TCMalloc優化Tengine性能:

TCMalloc是谷歌開發的開源工具google-perftools中的一員,與標準的glibc庫的Malloc相比,TCMalloc庫在內存分配效率和速度上要高很多,這在很大程度上提高了服務器在高並發情況下的性能,從而降低了系統的負載。要安裝TCMalloc庫,需要安裝libunwind庫(32位操作系統不需要安裝)和google-perftools

程序包,libunwind庫為基於64CPU和操作系統的程序提供了基本函數調用鏈和函數調用寄存器功能。

(1)編譯安裝libunwind庫(下載地址:http://download.savannah.nongnu.org/releases/libunwind/):

# tar -xf libunwind-1.2.tar.gz -C /usr/src

# cd /usr/src/libunwind-1.2

# ./configure

# make && make install

(2)編譯安裝google-perftools(下載地址:https://github.com/gperftools/gperftools/releases):

# tar -xf gperftools-2.7.tar.gz -C /usr/src

# cd /usr/src/gperftools-2.7

# ./configure --enable-libunwind --enable-frame-pointers --enable-emergency-malloc

# make && make install

//google-perftools添加線程目錄,並修改目錄權限

# mkdir -pv /tmp/tcmalloc

# chmod -R 0777 /tmp/tcmalloc

7、安裝淘寶分布式文件系統TFS所需的yajl庫(開源的JSON庫,下載地址http://lloyd.github.io/yajl/):

# tar -xf lloyd-yajl-2.1.0-0-ga0ecdde.tar.gz -C /usr/src

# cd /usr/src/lloyd-yajl-66cb08c

# ./configure

# make && make install

# ln -sv /usr/local/lib/libyajl.so.2 /usr/lib64/libyajl.so.2

8、添加Tengine用戶和組:

# groupadd -r tengine # useradd -g tengine -r -s /sbin/nologin tengine # id tengine

9、編譯安裝Tengine

# tar -xf tengine-2.2.2.tar.gz -C /usr/src

# cd /usr/src/tengine-2.2.2

# ./configure --prefix=/usr/local/tengine --user=tengine --group=tengine --with-threads --with-file-aio --with-force-exit --with-mail --with-pcre-jit --with-libatomic --http-log-path=/usr/local/tengine/logs/access.log --with-google_perftools_module --with-pcre=/usr/src/pcre-8.42 --with-openssl=/usr/src/openssl-1.0.2o --with-zlib=/usr/src/zlib-1.2.11

備註:按上述方法configure,編譯安裝Tengine後,/usr/local/tengine/modules目錄為空,所有模塊均以靜態方式編譯。

技術分享圖片

# make && make install //所需時間較長

10、顯示Tengine幫助信息:# /usr/local/tengine/sbin/nginx -h

技術分享圖片

說明:

? -h:顯示幫助信息

? -v:顯示Tengine版本

? -m:顯示所有靜態編譯的模塊

? -l:顯示所有可配置的指令

? -V:顯示版本、編譯安裝時的選項、所有靜態編譯的模塊

? -t:檢查Tengine配置文件語法

? -s [stop | quit | reopen | reload]:關閉 | 退出 | 重新打開 | 重載Tengine

11、配置Tengine

(1)導出二進制程序目錄至PATH環境變量中:

# vim /etc/profile.d/tengine.sh --> export PATH=/usr/local/tengine/sbin:$PATH

# . /etc/profile.d/tengine.sh

# echo $PATH

(2)導出頭文件:# ln -sv /usr/local/tengine/include /usr/include/tengine-2.2.2

(3)修改目錄權限:# chown -R tengine.tengine /usr/local/tengine

(4)加載google-perftools

修改配置文件/usr/local/tengine/conf/nginx.conf,在#pid logs/nginx.pid;下新增如下代碼:

google_perftools_profiles /tmp/tcmalloc;

12、啟動Tengine,並驗證上述配置:

(1)啟動Tengine# nginx -t # nginx # ss -tunlp | grep :80 # ps aux | grep nginx

由於配置文件中worker_processes的值為1,所以默認只開啟一個worker進程

技術分享圖片

(2)瀏覽器中輸入http://192.168.1.222

技術分享圖片

(3)測試tcmalloc# yum -y install lsof # lsof -n | grep tcmalloc

技術分享圖片

備註:因為只開啟了一個worker線程,每個線程會有一行記錄,每個線程文件後的數值就是啟動的TenginePID值。

二、配置文件nginx.conf常見配置項優化:

# cd /usr/local/tengine/conf

# cp nginx.conf nginx.conf.bak

# vim nginx.conf

======================================================================================

user tengine; # 運行worker進程的用戶

worker_processes auto; # worker進程的個數,命令ps aux | grep nginx可查看啟動的worker進程數量

worker_cpu_affinity auto; # worker進程綁定在哪些CPU上,減少由於上下文切換導致的CPU消耗

worker_rlimit_nofile 65535; # worker進程能夠打開的最大文件數限制

error_log logs/error.log error; # 指定Tengine錯誤日誌的存放路徑和級別

pid logs/nginx.pid; # 指定Tengine進程的pid文件路徑

google_perftools_profiles /tmp/tcmalloc; # tcmalloc保存路徑,命令lsof -n | grep tcmalloc驗證運行狀態

events {

accept_mutex on; # 讓多個worker進程輪流地、序列化地響應新請求

multi_accept on; # Tengine接收到一個新連接通知後,調用accept()來接收盡可能多的連接

worker_connections 65535; # 單個worker進程所能響應的最大並發連接數

# 此處沒有指定use epoll;指令,讓Tengine自動選擇合適的事件處理模型

}

http {

server_tokens off; # 隱藏Tengine版本號

include mime.types; # MIME是網絡資源的媒體類型,使用include指令導入mime.types文件

default_type application/octet-stream; # 指定默認類型

# 自定義訪問日誌格式,名稱為main,指定要保存的日誌內容

# ====================================================

# $remote_addr$http_x_forwarded_for含義相同:客戶端的IP地址

# $remote_user:記錄客戶端用戶名稱

# $time_local:通用日誌格式下的本地服務器時間

# $request:記錄請求的URLHTTP協議

# $status:響應狀態碼,成功是200

# $body_bytes_sent:發送給客戶端HTTP響應的主體內容的字節數大小,不包括響應首部的大小

# $http_referer:記錄從哪個頁面鏈接訪問過來的

# $http_user_agent:記錄客戶端瀏覽器相關信息

# ====================================================

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log off; # 關閉訪問日誌,提高磁盤的I/O性能

sendfile on; # 開啟高效文件傳輸模式,調用sendfile()進行數據復制,sendfile()復制數據是在內核級別完成的,所以會比一般的read()write()更高效,sendfile()可以在磁盤和TCP socket之間互相拷貝數據

tcp_nopush on; # 開啟後服務器的響應頭部信息產生獨立的數據包發送,即一個響應頭信息一個包。在一個數據包裏發送所有頭文件,而不是一個接一個的發送,用於防止網絡阻塞,必須先開啟sendfile模式

keepalive_timeout 65; # 客戶端keep-alive連接超時時長,服務器將在這個超時時長過後關閉連接,單位秒

charset UTF-8; # 定義頭文件默認字符集

gzip on; # 采用gzip壓縮形式發送數據,將頁面壓縮後傳輸更節省帶寬

gzip_disable "msie6"; # IE6的瀏覽器禁用gzip功能

gzip_proxied any; # 指定對客戶端請求的所有資源啟用壓縮功能

gzip_min_length 1k; # 指定對數據啟用壓縮的最少字節數,如果請求小於1K的文件,不要壓縮,壓縮小數據會降低處理此請求的所有進程速度

gzip_comp_level 6; # 指定數據的壓縮等級,這個等級可以是1~9之間的任意數值,1壓縮比最小但處理速度最快,9處理最慢但壓縮比最大,CPU消耗也越大

gzip_buffers 16 8k; # 指定壓縮響應的緩沖區的數量和大小

gzip_vary on; # 允許把"Vary: Accept-Encoding"插入響應首部

gzip_http_version 1.1; # 指定識別HTTP協議版本,默認是1.1

gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; # 指定需要壓縮的資源類型

reset_timedout_connection on; # 關閉不響應的客戶端連接,釋放客戶端所占的內存空間

client_body_buffer_size 8k; # 指定用於讀取客戶端請求主體的緩沖區大小

client_header_buffer_size 1k; # 指定用於讀取客戶端請求首部的緩沖區大小

large_client_header_buffers 4 8k; # 指定用於讀取客戶端請求中較大首部的緩沖區的最大數量和大小

client_max_body_size 1m; # 指定用於客戶端請求主體的最大大小

client_header_timeout 30s; # 指定用於讀取客戶端請求報文首部的超時時長,單位秒

client_body_timeout 30s; # 指定用於讀取客戶端請求報文主體的超時時長,單位秒

send_timeout 30s; # 指定用於向客戶端發送響應報文的超時時長,單位秒

}

======================================================================================

# nginx -t # nginx -s reload # ps aux | grep nginx # lsof -n | grep tcmalloc


技術分享圖片

技術分享圖片


CentOS 7.4 Tengine安裝配置詳解(一)