搭建LNMP发布ecshop系统及压测启用opcache缓存与否的情况

安装环境:CENTOS6.5,nginx1.6.2,php-5.5.18,mysql5.5.38

在安装软件之前安装epel源,就可以直接用yum安装libmcrypt,mhash,mcrypt等php扩展。

安装nginx

解决依赖关系,安装开发包组"Development Tools"和 "Server Platform Development"。

#tar –xf nginx-1.6.2

./configure \

--prefix=/usr/local/nginx \

--conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--user=nginx \

--group=nginx \

--http-client-body-temp-path=/var/tmp/nginx/client/ \

--http-proxy-temp-path=/var/tmp/nginx/proxy/ \

--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

--http-scgi-temp-path=/var/tmp/nginx/scgi \

--with-pcre

#make && make install

添加nginx启动脚本,设置开机启动,请见上一篇博客

安装php-5.5.18

安装mcrypt libmcrypt mhash 等php扩展

# yum –y install mcrypt libmcrypt-devel mhash-devel

安装php图型扩展支持

# yum install -y libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-devel libcurl-devel libmcrypt-devel gd-devel

#tar –xf php-5.5.18.tar.bz2

#cd php-5.5.18

#./configure --prefix=/usr/local/php55 --with-config-file-path=/usr/local/php55/etc --with-mysql=mysqlnd  --with-zlib --enable-xml --disable-rpath  --enable-bcmath --enable-shmop --enable-sysvsem --with-curl  --enable-fpm  --enable-opcache  --with-mcrypt --with-gd --with-openssl --with-mhash --enable-sockets  --with-xmlrpc -enable-zip --enable-soap --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl --with-jpeg-dir --with-png-dir

# make && make install

# cp php.ini-production  /usr/local/php55/etc/php.ini   #为php提供配置文件

#ln –s /usr/local/php55/etc/php.ini  /etc/php.ini             #为php.ini在/etc目录下创建软链接

# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

# chmod +x /etc/rc.d/init.d/php-fpm

# chkconfig --add php-fpm

# chkconfig php-fpm on       #配置php-fpm,为php-fpm提供Sysv init脚本,并将其添加至服务列表

# cp /usr/local/php55/etc/php-fpm.conf.default /usr/local/php55/etc/php-fpm.conf    #为php-fpm提供配置文件

编辑php-fpm的配置文件:
# vim /usr/local/php55/etc/php-fpm.conf

配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
pm.max_children = 50                                                #设定php子进程最大数为50
pm.start_servers = 5                                                  #启动php时子进程数为52上
pm.min_spare_servers = 2                                        #空闲php子进程最少为2个
pm.max_spare_servers = 8                                       #空闲php子进程最大为8个
pid = /usr/local/php/var/run/php-fpm.pid            #pid文件路径

上面这些参数是可以根据系统性能和负载情况去调整的,在生产环境中这些参数可能会比这些数字要大很多,也可以设定php的子进程个数为静态的值。如果要设置静态的值,需要更改 pm = static ,php-fpm默认为动态的 pm = dynamic

# service php-fpm start                   启动php-fpm

nginx配置文件设置及整合nginx和php5.5

nginx
的配置文件核心模块为main和events,此外还包括标准http模块,可选http模块和邮件模块,还可支持诸多第三方模块。main用于配置错误
日志、进程、及权限等相关的参数,events用于配置I/O模型,如epoll,kqueue,select或poll等。nginx的主配置文件由几
个段组成,main,http, server,upstrean和location,被称为nginx的上下文,支持嵌套。

nginx的配置文件

?


1

2

3

4

5

6

7

8

9

10

11

12

#user  nobody;     #定义nginx工作进程的用户,在编译安装时已经指定用户nginx,注释掉

worker_processes  1;  #指定工作进程个数

#worker_cup_affinity cpumask ;    #用cpu掩码位明确绑定nginx运行在某个cpu上,这里这台虚拟机只有一个cpu,所以注释掉

worker_rlimit_nofile 51200;      #nginx进程打开文件数目,可设定大一点

#error_log  logs/error.log;  #定义错误日志,在编译时已指定位置,注释

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;#pid文件,编译时已指定位置

events {

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

    use epoll;     #定义I/O模型

    worker_connections  51200;  #设定每个工作进程所处理的最大连接数.与main中的worker_processes决定了整个nginx能处理的最大连接数

}

http{

   include       mime.types;              #设定mime类型,类型由mime.type文件定义

   default_type  application/octet-stream;

   sendfile        on;  #sendfile
指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为
on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime. 

   keepalive_timeout  65;   #连接超时时间

   gzip  on;                #开启gzip压缩

   server {                 #server表示的是一个虚拟主机

        listen       80;    #监听端口

        server_name  10.204.80.75;  #虚拟主机名称,可以是ip或域名

        location / {          #通常用于server上下文中,用于设定某URI的访问属性。location可以嵌套。

            root   html;      #定义服务器网站根目录位置

            index  index.php index.html index.htm; #定义首页索引文件的名称,index.php是后加的

        }

        error_page   500 502 503 504  /50x.html;    #定义错误提示页面

        location = /50x.html {

            root   html;

        }

        location ~ \.php$ {        #定义.php结尾的文件解析

            root           html;

            fastcgi_pass   127.0.0.1:9000;    #定义解析php程序使用的FastCGI接口

            fastcgi_index  index.php;      #定义php程序首页索引文件名称

            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;

            include        fastcgi_params;

        }

  

  }

}

如上所示,php和nginx组合到一块了。

MySQL配置

MySQL我启用前面博客中搭建的drbd高可用mysql服务器,过程请见http://piao719.blog.51cto.com/287547/1562390

IP地址为:10.204.80.89

搭建ecshop

上传到/usr/local/nginx/html/ecshop 目录

Strict Standards: Non-static method cls_image::gd_version() should
not be called statically in \install\includes\lib_installer.php on line
31

解决:找到install/includes/lib_installer.php中的第31行   return
cls_image::gd_version();然后在找到include/cls_image.php中的678行,发现gd_version()方
法未声明静态static,所以会出错。这时候只要:

将function gd_version()改成static function gd_version()即可。

检测环境的时候提示:是否支持 JPEG是不支持的。

解决:查看发现有libjpeg.lib库,GD2库也有,都加载了,也都正常。查看ecshop源代码发现install/includes/lib_installer.php中第100行,JPEG写成了JPG,正确的应该是:

$jpeg_enabled = ($gd_info[‘JPEG Support‘]        === true) ? $_LANG[‘support‘] : $_LANG[‘not_support‘];

给cert、data、images、includes、temp、themes目录加777权限

# cd /usr/local/nginx/html/ecshop

# chmod -R 777 themes/ temp/ includes/ data/ cert/ images/

检查环境完成

配置系统

首先在10.204.80.89这台mysql服务器上创建ecshop数据库,然后添加一个帐号来管理这个数据库

mysql>create database ecshop;

mysql>grant all on ecshop.* to ‘ecsuser‘@‘10.204.%.%‘ identified by "ecspass";

mysql>flush privileges;

然后照提示把所有信息填完整

安装数据库失败,提示date.timezone时区设置有问题,

修改/etc/php.ini里面的date.timezone = “Asia/Shanghai”时区,或都在php代码里面添加<?php date_default_timezone_set("PRC"); ?>这一句即可。安装完成

压力测试,这里只是用http自带的ab工具简单测试一下启用opcache缓存与不启用缓存的效果。

首先不启用php自带的opcache缓存器的测试结果如下

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

# ab -n 1000 -c 10 http://10.204.80.75/ecshop/index.php

This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.204.80.75 (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Finished 1000 requests

Server Software:        nginx/1.6.2

Server Hostname:        10.204.80.75

Server Port:            80

Document Path:          /ecshop/index.php

Document Length:        35726 bytes

Concurrency Level:      10

Time taken for tests:   53.620991 seconds

Complete requests:      1000

Failed requests:        0

Write errors:           0

Total transferred:      36078000 bytes

HTML transferred:       35726000 bytes

Requests per second:    18.65 [#/sec] (mean)

Time per request:       536.210 [ms] (mean)

Time per request:       53.621 [ms] (mean, across all concurrent requests)

Transfer rate:          657.06 [Kbytes/sec] received

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0   21 250.2      1    3000

Processing:   135  513 103.2    544     887

Waiting:      129  499 101.0    531     868

Total:        136  535 271.5    545    3754

Percentage of the requests served within a certain time (ms)

  50%    545

  66%    561

  75%    571

  80%    577

  90%    597

  95%    618

  98%    645

  99%    739

 100%   3754 (longest request)

启用opcache,在/etc/php.ini文件中的[opcache]中添加

zend_extension=/usr/local/php55/lib/php/extensions/no-debug-non-zts-20121212/opcache.so

并把下面的这些参数打开

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=256

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=5000

opcache.revalidate_freq=60

opcache.load_comments=1

上面这些参数在生产环境中可以根据实际的需要做出修改

重启php-fpm,再测试一下

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

ab -n 1000 -c 10 http://10.204.80.75/ecshop/index.php

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 10.204.80.75 (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Completed 1000 requests

Finished 1000 requests

Server Software:        nginx/1.6.2

Server Hostname:        10.204.80.75

Server Port:            80

Document Path:          /ecshop/index.php

Document Length:        35733 bytes

Concurrency Level:      10

Time taken for tests:   16.035 seconds

Complete requests:      1000

Failed requests:        0

Write errors:           0

Total transferred:      36085000 bytes

HTML transferred:       35733000 bytes

Requests per second:    62.36 [#/sec] (mean)

Time per request:       160.347 [ms] (mean)

Time per request:       16.035 [ms] (mean, across all concurrent requests)

Transfer rate:          2197.69 [Kbytes/sec] received

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    2   1.7      1      10

Processing:    66  158  73.7    155     885

Waiting:       53  148  72.9    145     873

Total:         66  160  73.7    157     886

Percentage of the requests served within a certain time (ms)

  50%    157

  66%    168

  75%    173

  80%    176

  90%    186

  95%    195

  98%    208

  99%    739

 100%    886 (longest reque

可以看出来启用opcache缓存的效果比不启用的结果想比,响应时间少了70%,所以php开启opcode是非常有必要的 。

转载:http://piao719.blog.51cto.com/287547/1581240/

时间: 2024-08-02 11:02:47

搭建LNMP发布ecshop系统及压测启用opcache缓存与否的情况的相关文章

后端服务性能压测实践

转自:https://mp.weixin.qq.com/s/XW9geHZ9odHdI7srDiKBIg 目录 背景 环境检测 压力机及压力工具检测 Linux openfiles limit 设置 排查周边依赖 空接口压测检测 聚合报告中 throughput 计算 压测及性能排查方法 关注各纬度 log Linux 常规命令 性能排查两种方式(从上往下.从下往上) 总结 背景 最近大半年内有过两次负责性能压测的一些工作.一件事情做了一次可能还无法总结出一些东西,两次过后还是能发现一些共性问题

(转)后端服务性能压测实践

作者:王清培(Plen wang) 传送门:https://www.cnblogs.com/wangiqngpei557/p/7953453.html ---------------------------------------------------------------------分割线------------------------------------------------------ 入职新公司,没人理我,负责的需求开发一直很忙,要么环境有问题,要么Bug卡住我找开发,回了一句

性能压测诡异的Requests/second 响应刺尖问题

最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数. 毕竟这次转java的服务都是集团核心公共服务(主要是订单域服务).(等我们顺利上线了,我再来好好总结下其中的坎坷和壮举.) 废话不多说了,直接进入主题. 由于这次压测主要重点是关注正向的两个核心订单服务,下单服务.查单服务.查单服务初步压测下来问题不大,主要是db的索引和cache的问题. 下单

全链路压测自动化实践

背景与意义 境内度假是一个低频.与节假日典型相关的业务,流量在节假日较平日会上涨五到十几倍,会给生产系统带来非常大的风险.因此,在2018年春节前,我们把整个境内度假业务接入了全链路压测,来系统性地评估容量和发现隐患,最终确保了春节期间系统的稳定. 在整个过程中,我们意识到,全链路压测在整个系统稳定性建设中占有核心重要的位置,也是最有效的方案.结合实际业务节假日的频率(基本平均一个月一次),如果能够把它作为稳定性保障的常规手段,我们的系统质量也能够得到很好的保障.同时,为了解决周期常态化压测过程

tomcat7+java压测过程中占用CPU过高排查故障和解决办法

环架构境: 前端haproxy做为反向代理,后端N+1台tomcat+java服务 出现问题: 环境是新搭建的,本周在做压测刚开始的时候正常,随着量的上涨,导致CPU一直暴涨. 解决办法和思路: 1.)先通过top命令查看占用cpu高的PID # 根据top命令查看发现PID为2195和975的的进程占用CPU高达%200+,明显出现故障 2.)通过top -H -p pid命令查看,发现2275 3302 3375这几个进程占用CPU时间8分钟 3.)把线程pid转换为16进制,例如:上面的p

PHP压测优化

概述 一个产品的编码完成,并不能代表产品能够给用户体验,其中还必须包含测试.压测分析等,而往往我们的产品上线前却忽略掉压测分析.既然压测分析很重要那么我们应该如何进行呢? 本文章主要通过实践经验来学习了解压测过程,并且提出一些在PHP端可以进行优化的功能点,从而帮助后续开发过程中应用最优方式去编码. 工具 有道是磨刀不误砍柴工,要有好的工具才能做事更有效率,要学会工具的应用才能更进一步的优化系统项目. 关于PHP的工具性能检测工具的话,可以应用xhprof工具或者CI的原生时间打印工具.Xhpr

ab与jmter 服务器压测对比

引言: 互联网服务压测是非常重要的评价方法,ab,webbench,jmeter等都是业界流行的测试工具,ab和webbench作为shell模式下轻量级的测试工具,jmeter则作为有GUI界面的更高级测试工具,各有特点,ab比webbench功能更多一些,所以这里选择ab和jmeter来做一个对比. [测试环境的安装] [ab] ab就是Apache Benchmark的缩写,顾名思义它是Apache组织开发的一款web压力测试工具,优点是使用方便,统计功能强大. ab作为一款非常流行的压测

第一周:jmeter分布式压测简介

在我们日常的测试工作中经常会需要对系统进行压测,一般来说,使用jmeter一台电脑支持的最大并发数 为200,那么当我们压测时需要更大的并发数时,我们就需要使用多台电脑来进行分布式压测. 第一步:首先要准备多台电脑,全部安装了jmeter,并且这些电脑都能互相ping通. 第二步:修改主机中jmeter的配置文件,在jmeter的bin目录下找到jmeter.properties文件,编辑该文件,找到 remote_hosts字段,在该字段后面添加其他电脑的IP地址,其中端口号默认为1099.

压测指标参考

通用指标(指Web应用服务器.数据库服务器必需测试项) 指标 说明 ProcessorTime 服务器CPU占用率,一般平均达到70%时,服务就接近饱和 Memory Available Mbyte 可用内存数,如果测试时发现内存有变化情况也要注意,如果是内存泄露则比较严重 Physicsdisk Time 物理磁盘读写时间情况 Web服务器指标 指标 说明 Requests Per Second(Avg Rps) 平均每秒钟响应次数=总请求时间 / 秒数 Avg time to last by