最近负责的系统服务性能遇到一个瓶颈,随着业务量的逐渐增大,在周一的早上打开意外发现,服务在上午8点左右cpu几乎快被打满,三次飙到了100%,于是马不停蹄的想出来临时解决方案,加opcache,目前看来性能还算稳定在50左右,
但照目前的业务增长,这样的情况几乎还会复现,临时方案只能满足当前的需求。

之前也自己测试过php7和php5.6的性能,差别还是蛮大的,于是想到要不要尝试升级一下php版本,于是就开始动手着手在测试环境上使用源码编译php7。在这里记下编译过程:

1,首先从php官网下载php7和编译必须的一些扩展比如openssl等,我这里选择的是php7.1.9,进入local目录下,这个目录主要用来放自己安装的一些软件目录;

  • 下载
1
2
cd local
wget http://cn2.php.net/distributions/php-7.1.9.tar.gz
  • 解压
1
2
tar -zxvf php-7.1.9.tar.gz
cd php-7.1.9
  • 开始编译,这个过程大概在2分钟左右

按自己的需要开启,添加依赖添加

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
./configure
--prefix=/local/php7 \
--with-config-file-path=/local/php7/etc \
--with-config-file-scan-dir=/localn/php7/conf.d/ \
--enable-fpm \
--enable-cgi\
--disable-phpdbg \
--enable-mbstring \
--enable-calendar \
--with-xsl \
--with-openssl \
--enable-soap \
--enable-zip \
--enable-shmop \
--enable-sockets \
--with-gd \
--with-freetype-dir=/usr/include/freetype2/freetype \
--with-jpeg-dir \
--with-png-dir \
--with-xpm-dir \
--with-xmlrpc \
--enable-pcntl \
--enable-intl \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-opcache \
--with-iconv \
--with-bz2 \
--with-curl \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib \
--with-gettext

查看是否有报错error,有报错先解决报错,然后重新编译,直到无任何报错。接下来开始安装.这个过程比较漫长。

1
make && make install

如果有需要可开启全核,比如我的机器是4核的,全核加速.

1
2
make -j4
make install

完成安装后可以运行如下命令进行单元测试(非必需);

1
make test

这样就完成安装了,,接下来开始进行配置.

拷贝源码下的php.ini.production文件到我们安装目录的etc下.

1
cp /local/php-7.1.9/php.ini.production /local/php7/php.ini

修改etc下面的php-fpm.conf.default为php-fpm.conf

1
mv /local/php7/etc/php-fpm.conf.default /local/php7/etc/php-fpm.conf

修改php-fpm.d下的www.conf.default为www.conf

1
mv /local/php7/etc/php-fpm.d/www.conf.default /local/php7/etc/php-fpm.d/www.conf

完成后我们启动php-fpm.因为我的机器下面还存在php5.6版本,所以直接运行/local/ph7/sbin/php-fpm会保存,说是127.0.0.1:9000端口被占用,解决方法是:
进入php-fpm.d下面修改www.conf文件,找到listener=127.0.0.1:9000修改为其他端口,比如我修改为127.0.0.1:9001.
再重启php-fpm就正常了。

之后我们在我们的nginx配置文件中修改如下端口改为9001,默认一般为9000:

1
2
3
4
5
6
7
location ~ \.php {
#fastcgi_param APP_ENV test;
fastcgi_pass 127.0.0.1:9001;
try_files $uri /index.php = 404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

重启nginx

1
nginx -s reload

访问站点,查看header信息,就改为php7了,Good.