編譯安裝LAMP之php-5.4.1三、xcache-2.0及使用ab命令實現壓力測試

編譯安裝PHP

php有三種工做模式php

  • cgi
  • fastcgi
  • 模塊

  對於Apache而言,最簡單的就是模式就是模塊html

 

將php安裝爲Apache的模塊

  • 下載源碼包:

 

 

  • 解決依賴關係:

請配置好yum源(能夠是本地系統光盤)後執行以下命令:mysql

  # yum -y groupinstall "Desktop Platform Development" web

若是想讓編譯的php支持mcrypt擴展,此處還須要下載以下兩個rpm包並安裝之:sql

  • libmcrypt-2.5.7-5.el5.i386.rpm
  • libmcrypt-devel-2.5.7-5.el5.i386.rpm

 

  • 編譯安裝php-5.4.13

  注意:php的不少功能都依賴於自己系統上的某些功能的,如php能夠動態生成圖片,但要想生成圖片要依賴於圖片庫。若是當前系統上沒有圖片庫,就無法使用這個功能了。還有php-mbstring用於支持中文或者非一個字節所能表示的字符的那些語言的。數據庫

 

./congfigure時指定的選項:
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

 

 

選項簡介:

  --prefix:安裝目錄apache

  --with-mysql:指定MySQL的位置緩存

  --with-openssl:支持openssl功能的服務器

  --with-mysqli:這是MySQL的另一種讓php和MySQL交互的接口,這個接口的程序是/usr/local/mysql/bin/mysql_config網絡

  --with-freetype-dir:支持freetype-dir功能,freetype-dir是一個實現引用特定字體的,網頁上顯示不一樣字體。

  --with-zlib:zlib是互聯網上經常使用的壓縮庫,讓數據文件先壓縮後傳送,節約帶寬。

  --with-libxml-dir:衆多系統實現數據交互時都基於XML實現

  --enable-sockets:讓php支持套接字通訊

  --with-apxs2:實現php編譯成Apache的模塊

  --with-mcrypt:支持額外的加密庫

  --with-config-file-path:指定php配置文件路徑(主配置文件叫php.ini)

  --with-config-file-dir:它的配置文件由兩段組成,如/etc/php.ini,同時還能夠建立/etc/php.d/*.ini文件,即主配置下有不少片斷

  --with-bz2:壓縮庫

  --enable-maintainer-zts:這一項是否使用取決於Apache的MPM是什麼類型的,如果prefork就不須要這項,若使用event或worker就要使用這項。若php以線程方式工做就須要使用這一項,因此需先判斷使用的MPM類型

 

 

  使用prefork,所以就不須要--enable-maintainer-zts此項。

  改回event:

 

  注意:在./configure過程當中,可能會出現錯誤,如:

    報錯解決:

  1.   若不使用加密功能去除—with-mcrypt
  2.   若使用加密功能:

    安裝上述四個rpm包便可,如:

  

 

 

  說明:

  1.   這裏爲了支持apache的worker或event這兩個MPM,編譯時使用了--enable-maintainer-zts選項。
  2.   若是使用PHP5.3以上版本,爲了連接MySQL數據庫,能夠指定mysqlnd,這樣在本機就不須要先安裝MySQL或MySQL開發包了。mysqlnd從php 5.3開始可用,能夠編譯時綁定到它(而不用和具體的MySQL客戶端庫綁定造成依賴),但從PHP 5.4開始它就是默認設置了。
  # ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  php-config、phpize:php的命令行工具

 

 

    /usr/local/php/etc/:爲php的其它子項目提供的配置文件存放路徑

 

 

  /usr/local/php/php/man/:php手冊;

 

 

  • 爲php提供配置文件:

  php提供php.ini的配置模板:

  將php.ini-production複製成/etc/php.ini便可,安裝完成後由於被編譯成模塊因此不用啓動服務,是否啓動服務取決於工做模型,fastcgi須要啓動服務。要想讓其支持fastcgi模型,只需將configure指定的配置選項—with-apxs2=改爲—enable-fpm便可。

  添加php配置文件:

    複製完成便可!

  • 編輯apache配置文件httpd.conf,讓Apache與php結合起來工做

  經過修改Apache的配置文件實現:

    •   添加以下二行

 

    讓Apache可以處理以php結尾的頁面文件便可; 

    .phps表示php源碼;

    •   定位至DirectoryIndex index.html 

    配置主頁面以.php結尾的頁面:

  然後從新啓動httpd,或讓其從新載入配置文件便可測試php是否已經能夠正常使用。

 

  • 測試:

  測試php鏈接MySQL:

 

  此外,在Apache的主配置文件最後有Include指令,Include表示把其餘配置文件包含進來的意思,由此能夠在/etc/httpd/extra/…(不是conf而是extra,由於是編譯安裝的,因此默認路徑以下,extra目錄下有不少配置文件)啓用便可生效。

   注意若使用ssl的話光啓用Include /etc/httpd/extra/httpd/httpd-ssl.conf還不夠,由於沒有裝載ssl模塊,還需找到LoadModule把模塊裝載的那一項啓用。

 

安裝xcache,爲php加速

注意:可以跟php5.4結合工做的只有Xcache2.0及其之後的版本

  • 下載源碼包:

  Xcache的安裝比較獨特,由於Xcache是php的模塊。Xcache被稱爲php的擴展,php支持擴展功能,這種擴展說白了就是模塊功能,有些擴展在編譯的時候能夠指定,有些能夠單獨安裝,像Xcache。

  那麼既然是php的相關擴展,就須要使用php的命令來首先讓php可以加載這些擴展:

  幾乎全部php的擴展在編譯以前都必須對其執行phpize這個命令。

  查看幫助文檔:

  執行phpize命令:

  加載擴展,而且讓擴展自己可以識別php,就能夠執行配置了。

  php-config:可以獲取php配置信息和編譯時的選項信息,那Xcache就必須根據這種功能來獲取php在安裝的時候到底啓用了哪些功能。

查看選項信息:

  --prefix不用指定,由於Xcache會默認安裝到php的擴展路徑下
  --enable-xcache:啓用Xcache功能
  --with-php-config:指定php-config路徑,由於php-config不在默認路徑下

 

 

  • 安裝:

  安裝結束時,會出現相似以下行:
    Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

 

  • 編輯php.ini,整合php和xcache:

  在Xcache編譯安裝目錄下,可以找到Xcache提供的樣例性的配置文件,叫xcache.ini,要想php可以支持xcache功能,意味着把Xcache的配置信息必需要提供的php裏邊去,因此能夠把這個內容追加到php.ini中,或者直接複製這個文件到php.d目錄下便可。

 

  首先將xcache提供的樣例配置導入php.ini:

 

  說明:xcache.ini文件在xcache的源碼目錄中。

  接下來編輯/etc/php.d/xcache.ini,找到zend_extension開頭的行,修改成以下行:
    zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

  注意:若是php.ini文件中有多條zend_extension指令行,要確保此新增的行排在第一位。

  xcache.shm_schema:使用哪一種方式使用共享內存來完成在各php進程間共享模塊。
    shm:shared memory,共享內存
    mmmp:內存映射,意味着能夠把一段內存讓多個進程同時訪問的一種機制 
  xcache_size:用於緩存opcode的代碼空間大小,根據本身的須要修改,爲0意味着禁用xcache功能;
  xcache.count:設置CPU個數 xcache_slots:在緩存當中有幾個槽位來緩存多少個opcode的,每個槽位有多大
  xcache_ttl:過時時間,0表示永不過時,由xcache自我進行管理
  xcache.gc_interval:(gc:garbage collection,垃圾回收器)表示垃圾回收期多長時間工做一次,0表示不作任何掃描

  xcache_cacher:緩存功能是否啓用
  xcache_optimizer:xcache本身的優化器是否啓用(不是爲php提供的優化器,而是它本身的),無需啓用

 

  它的模塊須要被Web加載,所以要讓其生效須要重啓服務器。

 

  • 測試:

 

 

啓用服務器狀態

  mod_status模塊可讓管理員查看服務器的執行狀態,它經過一個HTML頁面展現了當前服務器的統計數據。這些數據一般包括但不限於:

  • (1) 處於工做狀態的worker進程數;
  • (2) 空閒狀態的worker進程數;
  • (3) 每一個worker的狀態,包括此worker已經響應的請求數,及由此worker發送的內容的字節數;
  • (4) 當前服務器總共發送的字節數;
  • (5) 服務器自上次啓動或重啓以來至當前的時長;
  • (6) 平均每秒鐘響應的請求數、平均每秒鐘發送的字節數、平均每一個請求所請求內容的字節數;

  啓用狀態頁面的方法很簡單,只須要在主配置文件中添加以下內容便可:

  <Location /server-status>
    SetHandler server-status
    Require all granted
  </Location>

  須要提醒的是,這裏的狀態信息不該該被全部人隨意訪問,所以,應該限制僅容許某些特定地址的客戶端查看。好比使用Require ip 172.16.0.0/16來限制僅容許指定網段的主機查看此頁面。

 

爲源碼編譯安裝的httpd配置虛擬主機:

 

 

 

 

 

 

 

 

 

 

 

 

 

須要先註釋中心主機:

啓用以下配置:(虛擬主機單獨配置在以下文件中,還有樣例)

 

  建議啓用mod_log_config,所以啓用,以下:

 

啓用用戶能夠訪問頁面文件:

  在2.4中須要明肯定義(受權)才能訪問:

 

對服務器發起壓力測試以測試虛擬主機的性能

裝好Apache後,自動就有一個壓力測試工具:

       ab:Apache benchmark,Apache性能壓力測試(評估)工具

  對咱們而言,只是簡單的對本機作測試,能夠測試遠程主機,也能夠本身測試本身,在測本身時不須要考慮網絡帶寬的狀況,若是遠程測試,還需考慮交換機、網線、網卡等各類吞吐能力;

  ab經常使用選項:

  -c #:(一次發起的請求數稱爲併發數)用於指定併發量(發起一次請求的請求數)

  -n #:指定一共請求多少個(請求的總數),要大於併發數(-c指定的數)

  -r:忽略錯誤

 

 

測試:

  注意:

  •   使用ab時必須精確到頁面;
  •     此外,在Linux上有一個限定,每個進程最多隻容許打開1024個文件。而ab指定的併發量,每個請求都須要打開一個套接字文件,所以有上限。若須要修改,修改方式以下:

  •   每個請求都要維持一個TCP/IP鏈接,併發量大時,開銷極大。可能下一次請求時,上一次的請求Socket鏈接還未斷開。

 

模擬較爲真實的場景:提供1M的主頁面進行測試

    在測試過程當中時,使用ps aux | grep httpd命令查看。

  須要注意的是:event模型下不是一個請求開一個進程!

  生成一個大文件測試:

 

 

測試動態內容:

  安裝phpMyAdmin站點:

  提供配置文件:

  生成隨機數做爲密鑰:

  爲MySQL設置密碼:

    須要注意的是,在測試時,正常來講,應該在ab命令執行的同時手動打開測試的頁面驗證是否能正常打開,這樣才更準確。

 

經常使用的壓力測試工具:

  • ab(Web服務器自帶的)
  • http_load:第三方工具,較經常使用,手動編譯安裝
  • webbench
  • siege

  注意:任什麼時候候配置好Web服務器部署好應用程序後,都應該使用壓力測試工具測試服務器性能到底如何。如此才能評估服務器上線後可否知足需求。

 

實現編譯安裝的Apache啓用https的功能:

啓用模塊:

 

啓用Include:

    須要創建CA,CA自簽證書,客戶端發起請求,利用本身的私鑰生成證書籤署請求,生成請求時會從私鑰中提取公鑰。

 

  注意:SSL一個IP地址只能創建一個主機,由於SSL會話是基於IP地址實現的。

 

其它配置文件說明:

    mpm.conf:定義每一種不一樣的MPM的工做參數,在rpm包安裝的方式中是由主配置文件的方式提供的,因此這一項默認應該啓用起來,尤爲是在編譯的時候已將編譯它支持多種不一樣的MPM了。因此這一個應該啓用起來,而且根據須要分別定義prefork、worker、event模型。

  能夠把MaxRequestWorkers修改多方進行壓力測試,測試時觀察服務器CPU工做性能、CPU隊列長度、使用vmstat觀察上下文切換的次數、軟中斷的次數。

小測試:

相關文章
相關標籤/搜索