您好,登錄后才能下訂單哦!
博文結構
php的概念
部署lnmp
壓力測試
部署
Discuz論壇
CGI模式:在這種模式下運行PHP,性能不是很好;
apache模塊:在這種模式下運行PHP,在LAMP平臺部署及應用 就是使用的這種模式,使用apache調用php完成工作;
FastCGI模式:在這種模式下運行PHP,PHP就是一處獨立的進程,所有的PHP子進程都由PHP的一個叫做php-fpm的組件負責管理;
首選客戶端發起請求,請求一般分為兩種:一種是靜態請求,可以直接由Apache響應直接返回客戶端所需資源;另一種動態請求,其中包含PHP或Perl這種腳本解釋型語言,則由Apache服務器通過fastcgi協議調用php服務器執行并返回給Apache,由Apache向客戶端返回客戶端所需資源,如果這個過程中涉及到對數據的操作,此時php服務器還會通過mysql協議調用mysql服務器。如圖:
1臺httpd服務器:192.168.148.129
1臺php服務器:192.168.148.130
1臺mysql服務器:192.168.148.131
搭建apache服務器
下載源碼包
直接使用腳本安裝
搭建php
下載php軟件包
[root@localhost ~]# yum -y install libxml2-devel lzip2-devel libcurl-devel libmcrypt-devel openssl-devel bzip2-devel
[root@localhost ~]# tar zxf libmcrypt-2.5.7.tar.gz
[root@localhost ~]# cd libmcrypt-2.5.7/
[root@localhost libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install
[root@localhost ~]# tar zxf php-5.6.27.tar.gz
[root@localhost ~]# cd php-5.6.27/
[root@localhost php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets \
--enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib \
--with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt \
--with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \
--with-bz2 --enable-maintainer-zts && make && make install
(安裝過程在15分鐘左右)
--prefix=/usr/local/php5.6//安裝位置
--with-mysql=mysqlnd //支持 mysql
--with-pdo-mysql=mysqlnd //支持 pdo 模塊
-with-mysqli=mysqlnd //支持 mysqli 模塊
**注:上面的三選項的作用:數據庫與 php 不在一個服務器上,指定此種方式,安裝數據庫 連接驅動 **
--with-openssl //支持 openssl 模塊
--enable-fpm //支持 fpm 模式
--enable-sockets //啟用 socket 支持
--enable-sysvshm//啟用系統共享內存支持
--enable-mbstring//多字節字串、像我們的中文就是多字節字串
--with-freetype-dir//支持 freetype、就要裝 freetype-devel、跟字體相關的、字體解析工具
--with-jpeg-dir
--with-png-dir
注:上面的二選項的作用:處理 jpeg、png 圖片的、php 可以動態生成 jpeg 圖片
--with-zlib//是個壓縮庫、在互聯網傳輸時用來壓縮傳輸的
--with-libxml-dir=/usr//這個 libxml 是用來解析 xml 的、指定/usr 下
--enable-xml //支持 xml 的
--with-mhash//支持 mhash
--with-mcrypt=/usr/local/libmcrypt //libmcrypt-devel 這個程序包所指定的
--with-config-file-path=/etc //指定配置文件的存放路徑的
--with-config-file-scan-dir=/etc/php.d //配置文件掃描路徑
--with-bz2 //支持 BZip2
為了支持 apache 的 worker 或 event 這兩個 MPM,編譯時使用了--enable-maintainer-zts 選項
如果使用 PHP5.3 以上版本,為了鏈接 MySQL 數據庫,可以指定 mysqlnd,這樣在本機就不 需要先安裝 MySQL 或 MySQL 開發包了。mysqlnd 從 php 5.3 開始可用,可以編譯時綁定到它 (而不用和具體的 MySQL 客戶端庫綁定形成依賴),但從 PHP 5.4 開始它就是默認設置了。 3
[root@localhost php-5.6.27]# cp php.ini-production /etc/php.ini
[root@localhost php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chmod +x /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chkconfig --add php-fpm
[root@localhost php-5.6.27]# chkconfig php-fpm on
[root@localhost php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@localhost php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conf
修改內容如下:
pid = run/php-fpm.pid
listen = 192.168.31.141:9000 \\本地ip地址(千萬不能用127.0.0.1)
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
[root@localhost php-5.6.27]# service php-fpm start
Starting php-fpm done
[root@localhost php-5.6.27]# netstat -anpt | grep php-fpm
tcp 0 0 192.168.148.130:9000 0.0.0.0:* LISTEN 130988/php-fpm: mas
[root@phpserver ~]# firewall-cmd --permanent --add-port=9000/tcp success [root@phpserver ~]# firewall-cmd --reload Success
[root@localhost php-5.6.27]# mkdir -p /var/www/benet
配置 apache(切換到 apache 主機上操作)
在 Apache2.4 以后已經專門有一個模塊針對 FastCGI 的實現,此模塊為 mod_proxy_fcgi.so, 它其實是作為 mod_proxy.so 模塊的擴充,因此,這兩個模塊都要加載 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
[root@localhost ~]# mkdir -p /var/www/benet
同時定位 AddType;添加讓 apache 能識別 php 格式的頁面
AddType application/x-httpd-php .php
并且定位至 DirectoryIndex:支持 php 格式的主頁 (在它的中間加index.php)
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin admin@admin.com
DocumentRoot "/var/www/benet"
ServerName www.benet.com
ServerAlias www.benet.com
ErrorLog "logs/benet-error_log"
CustomLog "logs/benet-access_log" common
ProxyRequests Off //關閉正向代理
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.148.130:9000/var/www/benet/$1 \\寫php的IP地址
<Directory "/var/www/benet">
Options FollowSymLinks //禁止目錄遍歷
AllowOverride None //允許請求為空
Require all granted //允許所有客戶端訪問
</Directory>
</VirtualHost>
[root@localhost ~]# apachectl -t
Syntax OK
[root@localhost ~]# apachectl restart
//創建虛擬目錄之后,重啟httpd服務
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.1.3:9000/var/www/benet/$1
//把以.php 結尾的文件請求發送到 php-fpm 進程,php-fpm 至少需要知道運 行的目錄和 URI,所以這里直接在 fcgi://192.168.1.3:9000 后指明了這兩個參數,其它的參數的傳遞已經被 mod_proxy_fcgi.so 進行了封裝,不需要手動指定。 特別注意的是,IP地址后面的目錄路徑需要與<VirtualHost> 中的 DocumentRoot 后的路徑一致 。ProxyPassMatch 只有滿足特定正則模式的內容才會匹配并執行此規則,這里的模式是,^/(.*\.php(/.*)?)$ 從網站(虛擬主機<VirtualHost> 的根目錄開始,匹配任何以 .php 結尾,或者在 .php 之后 緊跟一個 / 再跟別的內容的路徑。 ^ (caret) 和 $ (dollar)標志要匹配的路徑的開始和結束 ( )括號里的內容可以用 $1 來表示,以方便后面引用它。 fcgi:// 192.168.1.3:9000 通過 mod_proxy_fcgi 來轉發的代理,使用 fastCGI 協議,轉到 PHP-FPM 監聽的端口。 /path/to/your/documentroot/ 非常重要!必須與虛擬主機的路徑匹配,且必須是對應 php 文件在操作系統中的絕對路徑。 否則會找不到文件。
$1 可以從原始請求擴展成整個請求路徑的變量,這里指代前面( ) 里面匹配的那個路徑(uri)
[root@localhost php-5.6.27]# vim /var/www/benet/index.php
<?php
phpinfo();
?>
搭建mysql
下載軟件包使用腳本一鍵安裝
[root@localhost ~]# vim a.sh
[root@localhost ~]# chmod a+x a.sh
[root@localhost ~]# sh a.sh
Starting MySQL. SUCCESS!
mysql: [Warning] Using a password on the command line interface can be insecure.
\\這是警告正常現象
測試 LAMP 環境
[root@localhost ~]# mysql -u root -p123
mysql> grant all on *.* to aaa@'192.168.148.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
[root@localhost php-5.6.27]# vim /var/www/benet/test1.php
<?php
$link=mysql_connect('192.168.148.131','aaa','123456');
if($link) echo "恭喜你,數據庫連接成功!!!"; else echo "connect shibai";
mysql_close($link);
?>
看到上面兩個測試頁說明 apache、php、mysql 之間可以協同工作了。
網站性能壓力測試是服務器網站性能調優過程中必不可缺少的一環。只有讓服務器處在高壓 情況下,才能真正體現出軟件、硬件等各種設置不當所暴露出的問題。
ab 是 apache 自帶的壓力測試工具。ab 非常實用,它不僅可以對 apache 服務器進行網站訪 問壓力測試,也可以對或其它類型的服務器進行壓力測試。比如 nginx、tomcat、IIS 等。
下面我們開始介紹有關 ab 命令的使用:
1.ab 的原理
2.ab 的安裝
3.ab 參數說明
4.ab 性能指標
5.ab 實際使用
6.測試 nginx 性能
1)ab 的原理 ab 是 apachebench 命令的縮寫。 ab 的原理:ab 命令會創建多個并發訪問線程,模擬多個訪問者同時對某一 URL 地址進行訪 問。它的測試目標是基于 URL 的,因此,它既可以用來測試 apache 的負載壓力,也可以測 試 nginx、lighthttp、tomcat、IIS 等其它 Web 服務器的壓力。 ab 命令對發出負載的計算機要求很低,它既不會占用很高 CPU,也不會占用很多內存。但 卻會給目標服務器造成巨大的負載,其原理類似 CC ***。自己測試使用也需要注意,否則 一次上太多的負載。可能造成目標服務器資源耗完,嚴重時甚至導致死機。
2)ab 的安裝
[root@localhost ~]# /usr/local/http-2.4.23/bin/ab -V
/usr/local/http-2.4.23/bin/ab: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
解決:
如果 ab –V 命令出錯,可以 exporexport LD_LIBRARY_PATH="/usr/local/openssl/lib/"
[root@localhost ~]# export LD_LIBRARY_PATH=/usr/local/openssl/lib/
\\//將所需模塊所在路徑導出為環境變量
[root@localhost ~]# /usr/local/http-2.4.23/bin/ab -V
\\ 這樣就可以正常使用
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
3)ab 參數說明
-n:在測試會話中所執行的請求個數(總請求數);
-c:一次產生的請求個數(即并發用戶數);
[root@localhost ~]# cat /var/www/benet/index.html
asdasdasdasdasdasd
//創建Apache的首頁文件
[root@localhost ~]# ab -c 500 -n 10000 http://192.168.1.129/index.html
//對192.168.1.129的Web服務器進行測試
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.1.129 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software: Apache/2.4.23
Server Hostname: 192.168.1.129
Server Port: 80
Document Path: /index.html //請求的資源名稱
Document Length: 34 bytes //響應數據的正文長度
Concurrency Level: 500 //并發個數
Time taken for tests: 1.727 seconds //處理這些請求所花費的時間
Complete requests: 10000 //成功請求完成的次數
Failed requests: 0 //失敗的請求次數
Total transferred: 2780000 bytes //所有請求的響應數據長度總和
HTML transferred: 340000 bytes //請求的正文數據總和
Requests per second: 5788.87 [#/sec] (mean) //吞吐量-每秒請求數(計算公式:請求的次數/用戶等待時間)吞吐量越大越好
Time per request: 86.373 [ms] (mean) //用戶平均等待時間(計算方式:用戶等待時間/(請求的次數/并發))
Time per request: 0.173 [ms] (mean, across all concurrent requests) //服務器平均等待時間(計算方式:用戶等待時間/完成請求的次數)
Transfer rate: 1571.59 [Kbytes/sec] received //用戶請求的數據大小(計算方式:數據總長度/用戶等待時間)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 24 138.0 4 1034
Processing: 8 50 93.8 16 822
Waiting: 0 47 93.2 13 816
Total: 12 74 168.7 20 1255
Percentage of the requests served within a certain time (ms)
50% 20
66% 25
75% 31
80% 39
90% 222
95% 250
98% 832
99% 1050
100% 1255 (longest request)
//這部分數據用于描述每個請求處理時間的分布情況
吞吐量:服務器并發處理能力的量化描述。指的是在某個并發用戶數下單位時間內處理的請求數。某個并發用戶數下單位時間內能處理的最大請求數,稱之為最大吞吐量。
注意:吞吐量是基于并發用戶數的。這句話的含義:
吞吐量和并發用戶數有關;
不同的并發用戶數下,吞吐量是不同的;
計算公式:總請求數/處理完成這些請求所花費的時間。
2.并發連接數:并發連接數指的是某個時刻服務器所接收的請求數目,簡單的講,就是一個會話。
3.并發用戶數:一個用戶可以同時會產生一個會話或多個會話,也就是連接數;
4.用戶平均等待時間:計算公式:處理完成所有請求數所花費的時間/(總請求數/并發用戶數);
5.服務器平均等待時間:計算公式:處理完成多有請求數所花費的時間/總請求數。也就是吞吐量的倒數。同時也就是用戶平均等待時間/并發用戶數。
下載Xcache
[root@localhost /]# tar zxf xcache-3.2.0.tar.gz
[root@localhost /]# cd xcache-3.2.0/
[root@localhost xcache-3.2.0]# /usr/local/php5.6/bin/phpize
Configuring for:
\\需要使用phpize命令來生成configure配置文件
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@localhost xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config && make && make install
--enable-xcache:啟用xcache功能;
--enable-xcache-coverager:用于測試加速器功效和附加性;
--enable-xcache-optimizer:操作代碼優化;
[root@localhost xcache-3.2.0]# touch /tmp/xcache
[root@localhost xcache-3.2.0]# chmod 777 /tmp/xcache
[root@localhost xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache
[root@localhost xcache-3.2.0]# vim /etc/php.ini
[xcache-common]
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =1
xcache.slots =8K
xcache.ttl=0
xcache.gc_interval =0
xcache.var_size=64M
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 = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
[xcache-common]
extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so
//啟用php的xcache擴展功能
[xcache.admin]
xcache.admin.enable_auth = Off //關閉xcache認證
[xcache]
xcache.shm_scheme ="mmap" //決定xcache如何從系統共享內存
//nmap是一種內存映射文件的方法
xcache.size=60M //所用共享緩存的大小,如果設置為0,將無法使用
xcache.count =1 //將cache切分成多少塊,建議設置為cpu數
xcache.slots =8K //指作為hash槽個數的參考值
xcache.ttl=0 //文件生存時間,設置為0將無限緩存
xcache.gc_interval =0 //觸發垃圾回收的時間間隔,默認為0秒
xcache.var_size=64M //針對變量的緩存
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 = Off //啟動會降低性能,但是略微提高安全性
xcache.mmap_path ="/tmp/xcache" //用于只讀文件路徑
xcache.coredump_directory =""
//在遇到故障時,放置核心轉儲功能,必須是php可寫入的目錄,保留為空表示禁用
xcache.cacher =On //使用opcode緩存,xcache.size=0時無效
xcache.stat=On //使用stat發現檢查腳本的更新
xcache.optimizer =Off //禁用優化
[xcache.coverager]
xcache.coverager =On //啟用代碼覆蓋信息采集器
xcache.coveragedump_directory =""
//放置數據采集信息的目錄位置,默認使用目錄/tmp/pcovis
[root@localhost xcache-3.2.0]# scp -r /var/www/benet/xcache/ root@192.168.148.129:/var/www/benet/
[root@localhost xcache-3.2.0]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
下載Discuz軟件包
[root@localhost /]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
[root@localhost /]# mv discus/Discuz_7.0.0_FULL_SC_UTF8/upload/ /var/www/benet/bbs
[root@localhost /]# chown -R nobody:nobody /var/www/benet/bbs/
[root@localhost /]# chmod -R 777 /var/www/benet/bbs/
[root@localhost /]# vim /etc/php.ini
short_open_tag = Off 改為short_open_tag = On
[root@localhost /]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@localhost ~]# mysql -u root -p123
mysql> create database bbs; \\創建數據庫
Query OK, 1 row affected (0.00 sec)
Apache服務器進行以下操作
web 服務器也需要有靜態文件
[root@localhost /]# unzip Discuz_7.0.0_FULL_SC_UTF8.zip -d discus
[root@localhost /]# mv discus/Discuz_7.0.0_FULL_SC_UTF8/upload/ /var/www/benet/bbs
[root@localhost /]# cd /var/www/benet/bbs
[root@localhost bbs]# chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/
出現這個頁面我們還需要做一步
在php上操作
[root@localhost /]# scp -r /var/www/benet/bbs/ root@192.168.148.129:/var/www/benet/
把php下的bbs復制到apache中按下f5刷新一下
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。