zoukankan      html  css  js  c++  java
  • 编译安装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观察上下文切换的次数、软中断的次数。

    小测试:

  • 相关阅读:
    Android比较实用的属性
    软件版本命名规则
    Dhroid框架笔记(DhNet、Adapter)
    Activity对话框
    Dhroid框架笔记(IOC、EventBus)
    Eclipse快捷键
    解析Excel_Jxl
    面试题
    java基础——值传递和应用传递
    java基础——子类继承父类程序执行顺序
  • 原文地址:https://www.cnblogs.com/long-cnblogs/p/10651692.html
Copyright © 2011-2022 走看看