lnmp环境的php深度优化
PHP缓存加速介绍
1.操作码介绍及缓存原理
2.PHP缓存加速软件介绍
LNMP环境PHP缓存加速器原理详解
PHP缓存加速器软件种类及选择建议
首选xcache的原因如下:
次选eaccelerator的原因如下:
选择ZendOpcache的原因如下:
安装PHP加速插件
1、环境准备
[root@lnmp01 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@lnmp01 ~]# uname -rm 2.6.32-504.el6.x86_64 x86_64
2、软件版本信息
[root@lnmp01 ~]# /application/nginx/sbin/nginx -V nginx version: nginx/1.6.3 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) TLS SNI support enabled configure arguments: --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module [root@lnmp01 ~]# /application/php/bin/php -v PHP 5.3.27 (cli) (built: Sep 20 2017 20:26:23) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
配置环境变量LC_ALL的过程如下:
[root@lnmp01 ~]# echo 'export LC_ALL=C'>>/etc/profile #设置环境变量,解决后面perl程序插件的编译问题 [root@lnmp01 ~]# tail -1/etc/profile export LC_ALL=C [root@lnmp01 ~]# source /etc/profile [root@lnmp01 ~]# echo $LC_ALL C
3、有关LNMP环境扩展软件的部署说明
yum -y install perl-CPAN或yum -y install perl-devel
说明:如果不安装上述软件包,在后面安装ImageMagick时可能会报错。
4、安装PHP缓存加速器扩展
cd /home/oldboy/tools/ wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2 tar xf eaccelerator-0.9.6.1.tar.bz2 cd eaccelerator-0.9.6.1 /application/php/bin/phpize ./configure --enable-eaccelerator=shared --with-php-config=/application/php/bin/php-config make make install cd ../ ls /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
(2)安装PHP xcache缓存加速模块
cd /home/oldboy/tools/ wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.bz2 tar xf xcache-3.2.0.tar.bz2 cd xcache-3.2.0 /application/php/bin/phpize ./configure --enable-xcache --with-php-config=/application/php/bin/php-config make make install ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/ cd ..
(3)安装PHP官方加速插件ZendOpcache
cd /home/oldboy/tools/ wget -q http://pecl.php.net/get/zendopcache-7.0.5.tgz tar xf zendopcache-7.0.5.tgz cd zendopcache-7.0.5 /application/php/bin/phpize ./configure --enable-opcache --with-php-config=/application/php/bin/php-config make make install ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/ cd ..
phpize介绍
安装过程如下:
cd /home/oldboy/tools/ wget -q http://pecl.php.net/get/memcache-2.2.7.tgz tar zxf memcache-2.2.7.tgz cd memcache-2.2.7 /application/php/bin/phpize ./configure --enable-memcache --with-php-config=/application/php/bin/php-config make make install cd ../ [root@web02 memcache-2.2.7]# ls /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/ memcache.so opcache.so xcache.so
如果安装的是redis,安装过程如下:
wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz mv 2.2.4.tar.gz phpredis-2.2.4.tar.gz tar xf phpredis-2.2.4.tar.gz cd phpredis-2.2.4 /application/php/bin/phpize ./configure --enable-redis --with-php-config=/application/php/bin/php-config make make install ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/ cd ..
(2)安装PDO_MYSQL扩展模块
cd /home/oldboy/tools wget -q http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz tar xf PDO_MYSQL-1.0.2.tgz cd PDO_MYSQL-1.0.2/ /application/php/bin/phpize ./configure --with-php-config=/application/php/bin/php-config --with-pdo-mysql=/application/mysql make make install ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/ cd ../
(3)安装图像处理程序及imagick 扩展模块
ImageMagick是一套功能强大、文档而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF,JPEG,GIF、PNG、PDF以及PhotoCD等。利用ImageMagick,你可以根据Web应用程序的需要动态生成图片,还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作。
ImageMagick的常见功能:
1、将图片从一个格式转换到另一个格式,包括直接转换图标。
2、可以改变图片尺寸。旋转、锐化(sharpen)、减色、设置图片特效。
3、对图片设置各种尺寸缩略图
4、将图片设置为可以适应于Web背景的透明图片
5、将一组图片作成gif动画,直接convert
6、将几张图片做成一张组合图片
7、在一个图片上写字或画图形,带文字阴影和边框渲染
8、给图片加边框或框架
9、取得一些图片的特性信息
它几乎包括了gimp可以实现的所有常规插件功能,甚至包括各种曲线参数的渲染功能。
|
ImageMagick软件安装过程
cd /home/oldboy/tools wget -q http://down1.chinaunix.net/distfiles/ImageMagick-6.7.9-9.tar.xz tar xf ImageMagick-6.7.9-9.tar.xz cd ImageMagick-6.7.9-9 ./configure make && make install cd ..
imagick插件工作需要ImageMagick软件的支持,所以,必须要先安装ImageMagick,否则会出现报错等一系列问题。
imagick插件是一个可以供PHP调用ImageMagick功能的扩展模块。使用这个扩展可以使PHP具备和ImageMagick相同的功能。装了ImageMagick图像程序后,再装PHP的扩展imagick插件,才能使用ImageMagick提供的api来进行图片的创建与修改、压缩等操作。因为他们都集成在了imagick这个PHP扩展中。
tar zxf imagick-2.3.0.tgz cd imagick-2.3.0 /application/php/bin/phpize ./configure --with-php-config=/application/php/bin/php-config make make install ls -l /application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/ cd ../
6、配置Memcached/pdo_mysql/imagick功能模块生效
vim /application/php/lib/php.ini #可以在最后一行 extension_dir = "/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/" #此处参数就是刚刚我们查看模块的地址 extension = memcache.so extension = pdo_mysql.so extension = imagick.so
重启php后,用浏览器访问phpinfo.php测试文件,查看memcached pdo_mysql imagick是否生效
7、配置php加速插件生效并优化参数
(1)配置eccelerator生效
配置eccelerator缓存目录:
mkdir -p /tmp/eaccelerator chown -R nginx.nginx /tmp/eaccelerator
配置eccelerator参数:
cat >>/application/php/lib/php.ini<<EOF [eaccelerator] extension=eaccelerator.so eaccelerator.shm_size="64" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="3600" eaccelerator.shm_prune_period="3600" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" EOF
查看accelerator配置是否成功:
[root@lnmp01 lib]# /application/php/bin/php -v PHP 5.3.27 (cli) (built: Sep 20 2017 20:26:23) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
使用tmpfs优化eAccelerator
[root@lnmp01 ~]# mkdir /tmp/www.goser.com [root@lnmp01 ~]# mount -t tmpfs -o size=16m tmpfs /tmp/www.abcdocker.com #创建16M大小的tmpfs类型文件系统挂载到/tmp/www.goser.com tmpfs是一种基于内存的文件系统。 [root@lnmp01 ~]# df -h #检查挂载情况 Filesystem Size UsedAvailUse%Mounted on /dev/sda3 6.6G 4.2G 2.1G 67%/ /dev/sda1 190M 36M 145M 20%/boot tmpfs 16M 0 16M 0%/tmp/www.goser.com
提示:使用tmpfs可以将访问磁盘改为访问内存
#永久挂载设置 [root@lnmp01 ~]# tail -1/etc/fstab tmpfs /tmp/www.abcdocker.com tmpfs size=16m 00 [root@lnmp01 ~]# umount /tmp/www.goser.com/ [root@lnmp01 ~]# grep www /proc/mounts [root@lnmp01 ~]# mount -a #刷新fstab [root@lnmp01 ~]# grep www /proc/mounts tmpfs /tmp/www.goser.com tmpfs rw,relatime,size=16384k00
说明:用户上传图片到nginx,nginx 会在/tmp/下面切割图片,导致磁盘IO偏高。
[root@lnmp01 lib]# cp php.ini php.ini.ori #在php.ini配置文件中删除accelerator功能,因为它和xcache冲突 [root@lnmp01 xcache-3.2.0]# cat xcache.ini >>/application/php/lib/php.ini
查看xcache是否生效:
[root@lnmp01 lib]# /application/php/bin/php -v PHP 5.3.27 (cli) (built: Sep 20 2017 20:26:23) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies with XCache v3.2.0, Copyright (c) 2005-2014, by mOo with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo
配置Web界面查看XCache缓存加速信息
XCache支持Web界面管理,使用web界面生产md5地址如下.通过输入字符串生产Xcache管理员的密码,这里使用MD5sum生成明文密码。
echo -n "123456"|md5sum e10adc3949ba59abbe56e057f20f883e -
修改配置php.ini,在xcache.admin标签段修改
[xcache.admin] xcache.admin.enable_auth =On xcache.admin.user ="abcdocker" #此处是用户名 xcache.admin.pass="e10adc3949ba59abbe56e057f20f883e" #此处是md5加密的密码路径
然后复制xcache软件下面的缓存加速管理PHP程序到站点目录下:
cp -a htdocs//application/nginx/html/blog/xadmin chown -R nginx.nginx /application/nginx/html/blog/xadmin pkill php-fpm /application/php/sbin/php-fpm
浏览器打开http://ip/xadmin/index.php,输入上面设置的用户名和密码进入xchache管理页面:
这个xcache页面如果出现下面的警告信息,说明[date]标签中的时区没有设置
Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /application/nginx-1.6.3/html/blog/xadmin/cacher/index.php on line 126 Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /application/nginx-1.6.3/html/blog/xadmin/cacher/index.php on line 126
设置时区,再访问xcache页面就没有警告信息了
vim php.ini [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = date.timezone = Asia/Shanghai #重启php killall php-fpm /application/php/sbin/php-fpm
(3)配置ZendOpcache参数加速
配置php.ini配置文件,添加如下:
[opcache] zend_extension=/application/php5.3.27/lib/php/extensions/no-debug-non-zts-20090626/opcache.so opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
说明:ZendOPcache是PHP官方的新一代的缓存加速软件,php5.5以前可以用ZendOPcache软件以插件扩展的方式安装,从PHP5.5版本开始整合到PHP软件里,编译时只需要指定一个参数即可,例如:–enable-opcache
8、PHP指定MySQL的编译参数带来的问题
如果我们在编译的时候指定了–with-mysql=mysqlnd和–with-pdo-mysql=mysqlnd的参数进行编译,例如:
./configure \ --prefix=/application/php5.5.32 \ --with-mysql=/application/mysql/ \ --with-pdo-mysql=mysqlnd \ --with-iconv-dir=/usr/local/libiconv \ ..... #省略其他参数
则在生产中可能会遇到socket连接问题,解决方法是在php.ini里添加如下命令
pdo_mysql.default_socker=/application/php5.5.32/tmp/mysql.sock
9、生成环境PHP扩展插件的安装建议
(1)PHP的安装插件表格列表
(2)生成环境的安装建议
对于功能性插件,如果业务产品不需要使用,可以暂时不考虑安装,例如:PDO_MYSQL\memcached\imagick等。如果不清楚是否需要,还是最好装上,有备无患。
对于性能优化插件,eAccelerator、xcache、ZendOPcache、APC可以安装任一种,具体情况看业务需求,在选择时最好能搭建相关环境进程压力测试,然后根据实际测试结果来选择,用数据说话。
(3)PHP加速插件的测试结果对比