nginx:
下載:
wget http://nginx.org/download/nginx-1.4.3.tar.gz
安裝依賴:
yum install-y gcc pcre-devel zlib-devel make
編譯優化:
cdnginx-1.4.3 sed-i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g'auto/cc/gcc
下載libunwind:
wget http://savannah-nongnu-org.ip-connect.vn.ua/libunwind/libunwind-1.1.tar.gz
編譯安裝libunwind:
tar-zxvf libunwind-1.1.tar.gz cdlibunwind-1.1 CFLAGS=-fPIC ./configure make-j4 CFLAGS=-fPIC makeCFLAGS=-fPIC install
下載google-perftools:
wget https://gperftools.googlecode.com/files/gperftools-2.1.tar.gz
編譯安裝google-perftools:
tar-zxvf gperftools-2.1.tar.gz cdgperftools-2.1 yum installgcc-c++ ./configure make-j4 && makeinstall echo"/usr/local/lib/">> /etc/ld.so.conf
編譯參數:
./configure--prefix=/usr/local/nginx--without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-pcre --with-google_perftools_module
編譯:
make-j4 && makeinstall
創建線程目錄:
mkdir/dev/shm/tcmalloc chownwww.www /dev/shm/tcmalloc
修改nginx配置文件:
#pid logs/nginx.pid; #這一行下面添加 google_perftools_profiles /dev/shm/tcmalloc;
驗證google-perftools:
lsof-n | greptcmalloc
nginx配置:
worker_processes 4; #啓動進程數量 worker_cpu_affinity 00000001 00000010 00000100 00001000; #爲每個進程分配cpu worker_rlimit_nofile 65535; #描述符數目 worker_connections 65535; #每個進程的最多連接數 client_header_buffer_size 4k; #客戶端請求頭部的緩衝區大小 getconf PAGESIZE查看 open_file_cache max=65535 inactive=60s; #爲打開文件指定緩存的緩存數量 以及超時時間 open_file_cache_valid 80s; #查看文件緩存的週期 open_file_cache_min_uses 1; #如果有一個文件在inactive 時間內一次沒被使用,它將被移除
fastcgi_connect_timeout 300; #指定連接到後端FastCGI 的超時時間 fastcgi_cache_path /dev/shm/fastcgi_cachelevels=1:2 keys_zone=TEST:10minactive=5m; #這個指令爲FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間 fastcgi_send_timeout 300; #向FastCGI 傳送請求的超時時間,這個值是指已經完成兩次握手後向FastCGI 傳送請求的超時時間 fastcgi_read_timeout 300; #接收FastCGI 應答的超時時間,這個值是指已經完成兩次握手後接收FastCGI 應答的超時時間。 fastcgi_buffer_size 4k; #指定讀取FastCGI 應答第一部分需要用多大的緩衝區,一般第一部分應答不會超過1k,由於頁面大小爲4k,所以這裏設置爲4k fastcgi_buffers 8 4k; #指定本地需要用多少和多大的緩衝區來緩衝FastCGI 的應答 fastcgi_busy_buffers_size 8k; #是fastcgi_buffers 的兩倍 fastcgi_temp_file_write_size 8k; #在寫入fastcgi_temp_path 時將用多大的數據塊,默認值是fastcgi_buffers 的兩倍 fastcgi_cache TEST; #開啓FastCGI緩存並且爲其制定一個名稱,可以有效降低CPU負載,並且防止502錯誤 #爲指定的應答代碼指定緩存時間,如上例中將200,302 應答緩存一小時,301 應答緩存1 天,其他爲1 分鐘 fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; #緩存在fastcgi_cache_path 指令inactive 參數值時間內的最少使用次數,如上例,如果在5 分鐘內某文件1 次也沒有被使用,那麼這個文件將被移除 fastcgi_cache_use_stale error timeout invalid_header http_500; #定義那些時候用過期緩存
內核優化:
cat<< EOF >> /etc/sysctl.conf 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 EOF /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(單位是小時)。
php:
下載:
wget http://cn2.php.net/distributions/php-5.3.27.tar.bz2
安裝依賴:
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz make-j4 && makeinstall yum installlibxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel mysql-devel
編譯參數:
./configure-prefix=/usr/local/php--with-iconv-dir--with-freetype-dir--with-jpeg-dir--with-png-dir--with-zlib --with-libxml-dir-enable-xml -disable-rpath -enable-bcmath -enable-shmop -enable-sysvsem -enable-inline-optimization --with-curl -enable-mbregex -enable-fpm -enable-mbstring --with-mcrypt -enable-ftp--with-gd -enable-gd-native-ttf --with-mhash -enable-pcntl -enable-sockets --with-xmlrpc -enable-zip -enable-soap --without-pear --with-gettext --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-pdo-mysql
編譯:
make-j4 && makeinstall
複製配置文件:
cpphp.ini-production /usr/local/php/etc/php.ini
安裝memcache擴展
wget http://pecl.php.net/get/memcache-2.2.7.tgz tarvxzf memcache-2.2.7.tgz cdmemcache-2.2.7 /usr/local/php/bin/phpize ./configure--enable-memcache --with-php-config=/usr/local/php/bin/php-config--with-zlib-dir make-j4 makeinstall
把php.ini中的extension_dir:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/"
添加一行:
extension=memcache.so
配置php.ini:
magic_quotes_gpc = On #防止sql注入 open_basedir = /data/www/#限制主目錄 memory_limit = 128M #每個php可用的最大內存 safe_mode = On #打開安全模式 expose_php = Off #關閉PHP版本信息 display_errors = Off #禁止錯誤提示 error_reporting = E_WARNING & E_ERROR #錯誤提示級別 log_errors = On #開啓錯誤日誌 error_log = /data/logs/php_error.log #錯誤日誌位置 max_execution_time = 60 #php執行最大時間 upload_max_filesize = 10M #上傳文件的大小 session.save_path = "/dev/shm"#存儲session位置
配置php-fpm.conf
emergency_restart_interval = 5s #平滑啓動時間 解決加速器共享內存問題 error_log = /data/logs/fpm_error.log #錯誤日誌位置 listen = /tmp/fpm.sock #監聽地址 listen.owner = www #sock權限 listen.group = www #sock權限 user = www #fpm運行權限 group = www #fpm運行權限 pm = static #進出創建模式 pm.max_children = 200 #子進程數目 pm.max_requests = 500 #子進程最大服務次數 request_terminate_timeout = 60s #子進程執行服務的最大時間 request_slowlog_timeout = 5s #慢請求日誌超時時間 slowlog = /data/logs/fpm-slow.log #慢請求日誌位置
安裝xcache:
wget http://xcache.lighttpd.net/pub/Releases/3.1.0/xcache-3.1.0.tar.bz2 tar-jxvf xcache-3.1.0.tar.bz2 cdxcache-3.1.0 /usr/local/php/bin/phpize ./configure--enable-xcache --with-php-config=/usr/local/php/bin/php-config make-j4 && makeinstall
配置php.ini:
[xcache-common] extension = xcache.so [xcache.admin] xcache.admin.enable_auth = On xcache.admin.user = "xcache" xcache.admin.pass = "" [xcache] xcache.shm_scheme ="mmap" xcache.size=60M xcache.count =1 xcache.slots =8K xcache.ttl=0 xcache.gc_interval =0 xcache.var_size=4M xcache.var_count =1 xcache.var_slots =8K xcache.var_ttl=0 xcache.var_maxttl=0 xcache.var_gc_interval =300 xcache.test=Off xcache.readonly_protection = On xcache.mmap_path ="/dev/shm/xcache" xcache.coredump_directory ="" xcache.cacher =On xcache.stat=On xcache.optimizer =Off [xcache.coverager] xcache.coverager =On xcache.coveragedump_directory =""
創建xcache文件:
touch/dev/shm/xcache chownwww.www /dev/shm/xcache