php-fpm
运行命令
/www/lnmp/php/sbin/php-fpm {start|stop|quit|restart|reload|logrotate}
目录: /www/lnmp/php/
配置文件:/www/lnmp/php/etc/php-fpm.conf
日志: /www/lnmp/php/logs/php-fpm.log
重启:/www/lnmp/php/sbin/php-fpm restart
平滑重启:/www/lnmp/php/sbin/php-fpm reload
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
启动:/www/lnmp/php/sbin/php-fpm start
报错
Starting php_fpm /usr/local/lnmp/php/bin/php-cgi: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
failed
解决方法是将/usr/local/lib路径添加到/etc/ld.so.conf文件中,然后用ldconfig命令加载
[root@localhost ~]# ldconfig
报错
Starting php_fpm /usr/local/lnmp/php/bin/php-cgi: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
failed
解决办法
ln -s /www/lnmp/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18
[root@localhost ~]# /www/lnmp/php/sbin/php-fpm start
Starting php_fpm Feb 25 01:59:45.004039 [ERROR] fpm_unix_conf_wp(), line 124: please specify user and group other than root, pool 'default'
................................... failed
可以启动了,但报错,因为php-fpm不知道以什么用户运行,编辑/www/lnmp/php/etc/php-fpm.conf
<!-- <value name="user">nobody</value> -->
Unix group of processes
<!-- <value name="group">nobody</value> -->
去掉<!--注释即可
php-fpm.conf 配置
vi /www/lnmp/php/etc/php-fpm.conf
将运行PHP的用户和组改为www
<value name="user">www</value>
<value name="group">www</value>
修改php-cgi进程数
这个数值要根据服务器内存大小来修改,我的服务器以前8G内存,设置200,启动php-fpm内存消耗在5G左右,现在是16G内存,设置为512,内存消耗在10G左右。但日志里会报failed: Too many open files的错误,减低点修改为500,启动php-fpm不报这个错误了
<value name="max_children">500</value>
有资料介绍如果这个值设置小了,如果访问量大会导致502错误
netstat -anpo | grep "php-cgi" | wc -l 498 如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。 |
但我不管怎么增大这个数值,查询的结果总是接近预设数值甚至超过,上面这段话的正确性有待商榷
设置最大打开文件数
<value name="rlimit_files">51200</value>
上面这个数值据说要和3个地方的设置相同,ulimit -n 还有nginx.conf里的worker_rlimit_nofile 51200; 一篇关于解决NGINX 502 bad getway 的文章,但我感觉这数值只要大于php-cgi的连接数,应该就不会产生502错误
每个进程执行多少个请求后重启
<value name="max_requests">2048</value>
默认是500,如果不限可以设置为0
php-fpm.log日志里有大量错误信息,为这个头疼不已,排查:
max_children
rlimit_files
根据自己服务器配置,这两个值应该是设置无误了,那么唯一出问题的肯定是max_requests这个值了,但应该设置多少,是大是小呢?先改小试试看吧,max_requests设置为5,果然发现问题了,虽然网站打开正常,好像没什么问题,但日志里报错的频率明显增加了,网站最高时并发连接大概3000左右,设置为1024日志也经常报错,看来需要设置更大点,那么正确的值应该是大了,就是不知道设置多大,通过压力测试来确定吧
压力测试工具
webbench -c 20000 -t 30 http://www.abc.com/phpinfo.php
压力测试时,网站并发连接16000,看图
netstat -np | grep 127.0.0.1:9000 |wc -l 查看最高9000多连接
设置为1024日志里报错,修改为2048,好了!
但有个问题,压力测试的时候是访问phpinfo.php,服务器能够支持这么多并发连接,但要是对读取mysql数据库的论坛做压力测试,10并发就可以把服务器CPU弄到100%,看来msyql这里是瓶颈,需要找方法优化下
php-cgi 后续完善记录
http://tt520.blog.51cto.com/4530575/1123058
////////////////////////////////
一、安装php ftp扩展
进入/www/src/lnmp/php-5.2.17/ext/ftp目录
cd /www/src/lnmp/php-5.2.17/ext/ftp
/www/lnmp/php/bin/phpize
./configure --enable-ftp=shared --with-php-config=/www/lnmp/php/bin/php-config
make
make install
编辑 /www/lnmp/php/etc/php.ini
手工修改:查找/www/lnmp/php/etc/php.ini中的extension_dir = "./"
修改为extension_dir = "/www/lnmp/php/lib/php/extensions/no-debug-non-zts-20060613/"
在此行下增加:
extension = "ftp.so"
////////////////////////////////////////
memcache
二、安装PHP memcache扩展
cd /www/src/lnmp
wget http://blog.s135.com/soft/linux/nginx_php/memcache/memcache-2.2.5.tgz
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/www/lnmp/php/bin/phpize
./configure --with-php-config=/www/lnmp/php/bin/php-config
make
make install
cd ..
修改php.ini文件
查找
extension_dir = "/www/lnmp/php/lib/php/extensions/no-debug-non-zts-20060613/"
下面添加
extension = "memcache.so"
再查找output_buffering = Off
修改为output_buffering = On
再查找; cgi.fix_pathinfo=0
去掉前面的分号,修改为cgi.fix_pathinfo=0,防止Nginx文件类型错误解析漏洞。
保存,重启PHP
/www/lnmp/php/sbin/php-fpm restart
三、安装memcached缓存服务器
1.编译安装Libevent,memcache依赖支持库
wget http://www.monkey.org/~provos/libevent-2.0.13-stable.tar.gz
tar -zxvf libevent-2.0.13-stable.tar.gz
cd libevent-2.0.13-stable
./configure --prefix=/usr
make
make install
cd ..
检测一下查看是否安装:
ls -al /usr/lib | grep libevent
#显示
libevent.so.5 -> libevent-2.0.so.5.1.2
2.安装Memcached
wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
tar -zxvf memcached-1.4.0.tar.gz
cd memcached-1.4.0
./configure --with-libevent=/usr/
make
make install
cd ..
检测是否成功安装
ls -al /usr/local/bin/mem*
#显示
/usr/local/bin/memcached
开启Memcached守护进程
/usr/local/bin/memcached -d -u root
#无提示证明开启成功
#########################################
错误解决:
#########################################
启动memcached出现状况
error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
在网上查了下
解决这个问题有如下方法:
1>首先 find / -name libevent-2.0.so.5 找到缺少的链接文件到底在那儿。
2> LD_DEBUG=libs /usr/local/memcached/bin/memcached -v
3> 从Debug信息中就知道程序去哪里找链接库了。我这边程序去 trying file=/usr/lib/libevent-2.0.so.5 而我的链接库的实际存储位置是 /usr/lib64/libevent-2.0.so.5
4>创建符号链接
ln -s /usr/lib/libevent-2.0.so.5 /lib64/tls/libevent-2.0.so.5
ln -s /usr/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5
ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/tls/libevent-2.0.so.5
ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
5>搞定.
#########################################
开机自动启动
#########################################
/etc/rc.d/rc.local中加入一行
/usr/local/bin/memcached -d -u root -m 64 -P /tmp/memcached.pid
//////////////////////////////////
#连接参数
-p 监听端口
-l 连接的IP地址,默认是本机
-d start启动memecache服务
-d restart重启
-d stop|shutdown关闭服务
-d install 安装
-d uninstall 卸载
-u 以身份运行仅在root下有效
-m 最大内存使用,单位MB,默认64MB,最大2G
-M 内存耗尽时返回错误
-c 最大同时连接数量,默认是1024
-f 块大小增长因为,默认是1.25
-n 最小分配空间,key+value+flags默认48
-h 显示帮助
#使用telnet连接
telnet localhost 11211
#直接按回车会出现客户端错误.
#查看当前状态命令
stats
stats参数参考
STAT pid 22459 进程ID
STAT uptime 1027046 服务器运行秒数
STAT time 1273043062 服务器当前unix时间戳
STAT version 1.4.4 服务器版本
STAT pointer_size 64 操作系统字大小(这台服务器是64位的)
STAT rusage_user 0.040000 进程累计用户时间
STAT rusage_system 0.260000 进程累计系统时间
STAT curr_connections 10 当前打开连接数
STAT total_connections 82 曾打开的连接总数
STAT connection_structures 13 服务器分配的连接结构数
STAT cmd_get 54 执行get命令总数
STAT cmd_set 34 执行set命令总数
STAT cmd_flush 3 指向flush_all命令总数
STAT get_hits 9 get命中次数
STAT get_misses 45 get未命中次数
STAT delete_misses 5 delete未命中次数
STAT delete_hits 1 delete命中次数
STAT incr_misses 0 incr未命中次数
STAT incr_hits 0 incr命中次数
STAT decr_misses 0 decr未命中次数
STAT decr_hits 0 decr命中次数
STAT cas_misses 0 cas未命中次数
STAT cas_hits 0 cas命中次数
STAT cas_badval 0 使用擦拭次数
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 15785 读取字节总数
STAT bytes_written 15222 写入字节总数
STAT limit_maxbytes 1048576 分配的内存数(字节)
STAT accepting_conns 1 目前接受的链接数
STAT listen_disabled_num 0
STAT threads 4 线程数
STAT conn_yields 0
STAT bytes 0 存储item字节数
STAT curr_items 0 item个数
STAT total_items 34 item总数
STAT evictions 0 为获取空间删除item的总数