编译安装LAMP之php-5.4.13、xcache-2.0及使用ab命令实现压力测试

编译安装PHP

php有三种工作模式

  • cgi
  • fastcgi
  • 模块

  对于Apache而言,最简单的就是模式就是模块

将php安装为Apache的模块

  • 下载源码包:

  • 解决依赖关系:

请配置好yum源(可以是本地系统光盘)后执行如下命令:

  # yum -y groupinstall "Desktop Platform Development" 

如果想让编译的php支持mcrypt扩展,此处还需要下载如下两个rpm包并安装之:

  • 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:安装目录

  --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观察上下文切换的次数、软中断的次数。

小测试:

猜你喜欢

转载自www.cnblogs.com/long-cnblogs/p/10651692.html