转载:PHP性能提升之OPcache相关参数详解

最近PHP7加密在opcache上遇到坑了,转载一篇文章。

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 扩展中的 OPcache 库。

- 阅读剩余部分 -

zabbix3.0安装之PHP+Nginx篇

接上文zabbix安装之环境部署篇

1、加入启动项

网上各种php-fpm和nginx的启动脚本,如果你有兴趣去写,当然也好。其实,官方早已提供了,我就不费那个事了。

php-fpm的启动脚本在“/你的PHP安装目录/sapi/fpm/init.d.php-fpm”,我们只需要复制到init.d下即可;

cp /usr/local/src/php-5.6.22/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm   #php-fpm启动脚本

nginx启动脚本官方也有提供,不过我们要稍加修改,即可变为己用。

nginx wiki官方提供的脚本:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/,鉴于篇幅略长,你也可以直接下载我提供的修改好的,只要将注释的地方替换为你的路径即可:init.d.nginx

vim /etc/init.d/nginx 键入如下内容,:wq保存。  脚本如下:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx-1.8.1/conf/nginx.conf 
# pidfile: /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/local/nginx-1.8.1/sbin/nginx" #替换成自己的路径
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/usr/local/nginx-1.8.1/conf/nginx.conf" #同上
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
start() {
 [ -x $nginx ] || exit 5
 [ -f $NGINX_CONF_FILE ] || exit 6
 echo -n $"Starting $prog: "
 daemon $nginx -c $NGINX_CONF_FILE
 retval=$?
 echo
 [ $retval -eq 0 ] && touch $lockfile
 return $retval
}
 
stop() {
 echo -n $"Stopping $prog: "
 killproc $prog -QUIT
 retval=$?
 echo
 [ $retval -eq 0 ] && rm -f $lockfile
 return $retval
}
 
restart() {
 configtest || return $?
 stop
 sleep 1
 start
}
 
reload() {
 configtest || return $?
 echo -n $"Reloading $prog: "
 killproc $nginx -HUP
 RETVAL=$?
 echo
}
 
force_reload() {
 restart
}
 
configtest() {
 $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
 status $prog
}
 
rh_status_q() {
 rh_status >/dev/null 2>&1
}
 
case "$1" in
 start)
 rh_status_q && exit 0
 $1
 ;;
 stop)
 rh_status_q || exit 0
 $1
 ;;
 restart|configtest)
 $1
 ;;
 reload)
 rh_status_q || exit 7
 $1
 ;;
 force-reload)
 force_reload
 ;;
 status)
 rh_status
 ;;
 condrestart|try-restart)
 rh_status_q || exit 0
 ;;
 *)
 echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
 exit 2
esac

别忘了为脚本添加可执行权限:

chmod a+x /etc/init.d/php-fpm
chmod a+x /etc/init.d/nginx

可用参数:

/etc/init.d/php-fpm {start|stop|force-quit|restart|reload|status}
/etc/init.d/nginx {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}

vim /etc/rc.local 添加如下两行,实现开机自启动。

/etc/init.d/nginx start
/etc/init.d/php-fpm start

也可以直接加入系统服务:

chkconfig --add php-fpm | nginx
chkconfig --level php-fpm | nginx 2345 on

好了,至此,开机启动设置完成。reboot验证一下。
ps

 

2、PHP+Nginx

创建工作目录

mkdir /data/logs/nginx -p
mkdir /data/website/zabbix.opdev.me -p

vim /data/website/zabbix.opdev.me/phpinfo.php  键入:

 <?php
 phpinfo();
 ?>

:wq 保存退出

cp /usr/local/nginx-1.8.1/conf/nginx.conf /usr/local/nginx-1.8.1/conf/nginx.conf.bak
vim /usr/local/nginx-1.8.1/conf/nginx.conf   在http段加入如下内容:

server {
 listen 80;
 server_name zabbix.opdev.me;
 access_log /data/logs/nginx/zabbix.opdev.me.access.log main;
 index index.php index.html index.html;
 root /data/website/zabbix.opdev.me;

location /
 {
 try_files $uri $uri/ /index.php?$args;
 }

location ~ .*\.(php)?$
 {
 expires -1s;
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 include fastcgi_params;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_pass 127.0.0.1:9000;

}
 }

PS: 需要将log_format 段的注释取消掉,否则会有语法错误。

访问http://zabbix.opdev.me/phpinfo.php ,如果出现如下内容,说明nginx连接php成功了。nginx的各种优化,就仁者见仁吧。

phpinfo

zabbix3.0安装之环境部署篇

这两天为公司部署zabbix,用了一台闲置的Dell Power Edge,系统是全新安装的,所以基本环境都要部署,就记录一下过程。

zabbix需要MySQL和Web环境的支持,可选lamp或者lnmp,这里我选择了后者,所以要先部署Nginx、PHP、MySQL,MySQL的编译安装,前面已经单独写过了,我个人也比较不喜欢cmake的编译方式,这里就不再赘述了。好了,下面开工!

准备编译环境

1)更换yum源为阿里云镜像

 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
 yum makecache

2)设置时区和时间同步

 yum -y install ntpdate
 echo "00 4 * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1" >> /var/spool/cron/root

对zabbix来说,正确的时间尤为重要,是保证监控和警报及时的前提!切记!

3)安装各种依赖

yum install -y gcc gcc-c++ make pcre* openssl* cmake ncurses-devel gd-devel libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel

因为我的Centos是mini安装的,大部分依赖都没有装,如果你不确定,那么也安装一遍吧。

1、Nginx编译安装

我事先准备了程序包,所以直接解压开始。

 cd /usr/local/src/
 tar zxvf nginx-1.8.1.tar.gz
 cd nginx-1.8.1
 ./configure --prefix=/usr/local/nginx-1.8.1 --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre

nginx编译成功

如上图,编译成功,执行安装。

make && make install
 [root@web nginx-1.8.1]# /usr/local/nginx-1.8.1/sbin/nginx
 [root@web nginx-1.8.1]# curl -s http://localhost |grep nginx.com
 <a href="http://nginx.com/">nginx.com</a>.</p>

可以看到,nginx已经成功运行。至此,nginx先告一段落,等待PHP安装好后再配置nginx和php的连接。

/usr/local/nginx-1.8.1/sbin/nginx -s stop  #停止nginx
/usr/local/nginx-1.8.1/sbin/nginx -s reload  #重载nginx

2、PHP编译安装

tar zxvf php-5.6.22.tar.gz
 cd php-5.6.22

./configure --prefix=/usr/local/php-5.6.22 --with-config-file-path=/usr/local/php-5.6.22/etc --with-bz2 --with-curl --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr/local --enable-mbstring --enable-calendar --with-gettext --with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm --with-libdir=lib64 --enable-bcmath

php编辑成功

PS:我用的是64位的Centos,所以带上--with-libdir=lib64,如果是32位系统,忽略即可。如果你不明确该用哪些参数,请参照上面的。

执行安装:

make && make install

配置php.ini和php-fpm:

cp php.ini-production /usr/local/php-5.6.22/etc/php.ini
cp /usr/local/php-5.6.22/etc/php-fpm.conf.default /usr/local/php-5.6.22/etc/php-fpm.conf
 sed -i "s/;date.timezone =/date.timezone = Asia\/Shanghai/g" /usr/local/php/etc/php.ini
 sed -i "s#max_execution_time = 5#max_execution_time = 300#g" /usr/local/php/etc/php.ini
 sed -i "s#post_max_size = 8M#post_max_size = 32M#g" /usr/local/php/etc/php.ini
 sed -i "s#max_input_time = 60#max_input_time = 300#g" /usr/local/php/etc/php.ini
 sed -i "s#memory_limit = 128M#memory_limit = 128M#g" /usr/local/php/etc/php.ini
 sed -i "/;mbstring.func_overload = 0/ambstring.func_overload = 1\n" /usr/local/php/etc/php.ini
 sed -i "/;always_populate_raw_post_data = -1/aalways_populate_raw_post_data = -1\n" /usr/local/php/etc/php.ini
 #将配置写入php.ini,也可以手动编辑

3、MySQL编译安装

参照《编译安装MySQL 5.5》

4、Nginx+PHP

不出意外,做完上面这些,已经花了你大半天时间了,还是休息下吧。下一篇接着写nginx和php的连接,以及zabbix的安装和部署。

另起一篇,请看zabbix安装之PHP+Nginx篇