博文结构
php的概念
部署lnmp
压力测试
部署
Discuz论坛php
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服务器。如图:html
1台httpd服务器:192.168.148.129
1台php服务器:192.168.148.130
1台mysql服务器:192.168.148.131mysql
[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分钟左右)sql
--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/benetapache
配置 apache(切换到 apache 主机上操做) vim
在 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 centos
[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.服务器平均等待时间:计算公式:处理完成多有请求数所花费的时间/总请求数。也就是吞吐量的倒数。同时也就是用户平均等待时间/并发用户数。
[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
[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刷新一下