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
如果实际使用的&ldquo;FastCGI进程数&rdquo;接近预设的&ldquo;FastCGI进程数&rdquo;,那么,说明&ldquo;FastCGI进程数&rdquo;不够用,需要增大。

但我不管怎么增大这个数值,查询的结果总是接近预设数值甚至超过,上面这段话的正确性有待商榷

 

 

设置最大打开文件数

<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日志也经常报错,看来需要设置更大点,那么正确的值应该是大了,就是不知道设置多大,通过压力测试来确定吧

压力测试工具

http://blog.s135.com/post/288/

 

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,好了!

四 PHP配置_php-fpm

但有个问题,压力测试的时候是访问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的总数



四、安装PDO_MYSQL


wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

tar zxvf PDO_MYSQL-1.0.2.tgz

cd PDO_MYSQL-1.0.2

/www/lnmp/php/bin/phpize

ln -s /www/lnmp/mysql/include/* /usr/local/include/


./configure --with-php-config=/www/lnmp/php/bin/php-config --with-pdo-mysql=/www/lnmp/mysql



make

make install

cd ..


修改php.ini文件
查找
extension_dir = "/www/lnmp/php/lib/php/extensions/no-debug-non-zts-20060613/"
下面添加
extension = "pdo_mysql.so"