php-fpm进程数优化

1、php-fpm优化参数介绍
他们分别是:pm、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。

pm:表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态)。
在更老一些的版本中,dynamic被称作apache-like。这个要注意看配置文件的说明。

下面4个参数的意思分别为:

pm.max_children:静态方式下开启的php-fpm进程数量<br

阅读全文

线上webserver配置优化

nginx/conf/nginx.conf
1.worker_processes
nginx要开启的进程数,一般等于cpu的总核数。
开发机示例:
worker_processes 2;
线上机示例:
worker_processes 8; //线上最大开到8即可

2.worker_cpu_affinity 使用该选项可以绑定worker进程和CPU,使各进程使用独立的cpu内核。 线上机示例: //对应worker_processes配置的个数 worker_cpu_affinity

阅读全文

ODP3.0压力测试

测试环境:
CentOS release 4.3 :

12  Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz

MemTotal:       132124636 kB    #free内存2G

(此服务器为50人在用的共享开发机,测试时有30+个odp服务正在运行)

odp 3.0.2:
PHP             5.4.33.1

Nginx           1.0.32.0

ap              1.1.4.2

saf             1.0.18.0

测试程序:

用到了ap MVC框架和saf模块,<span

阅读全文

web页面响应时间长,要怎么排查?

9

说明:
web页面响应时间长,要怎么排查?

因为是lnmp系统,可以通过设置nginx日志,记录nginx处理请求的时间、开启php慢执行来排查

解决:
一、修改nginx.conf日志格式,记录nginx响应时间
# vim /usr/local/nginx/conf/nginx.conf //添加$request_time $upstream_response_time参数

      log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$request_time $upstream_response_time '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" $http_x_forwarded_for';

$request_time: request processing time in seconds with a milliseconds resolution;time elapsed between the first bytes were read from the client and the log write after the last bytes were sent to the client$request_time。nginx处理请求的时间,指的就是从接受用户请求数据到发送完回复数据的时间。

$upstream_response_time: keeps servers response times in seconds with a milliseconds resolution. Several responses are also separated by commas and colons. $upstream_response_timephp-cgi的响应时间,说的有点模糊,它指的是从Nginx向后端建立连接开始,到接受完数据然后关闭连接为止的时间。因为会有重试,它可能有多个时间段。一般来说,$upstream_response_time 会比$request_time时间短。(其实也可以加上upstream_status的状态返回值)

截取部份日志,可以看到客户端获取test.php。nginx共花费了5.308s(这个时间包括了php后端处理的时间),php后端处理也花费了5.308s。这说明响应慢很有可能是因为php程序的原因。接下就就是排查php
$request_time时间比$upstream_response_time长,这有可能是因为web页面通过post上传较大的数据,nginx一直在接收数据。

116.21.<span

阅读全文

Centos下安装php PDO PostgreSQL扩展

1.安装 wget http://pecl.php.net/get/PDO_PGSQL-1.0.2.tgz tar -zxvf PDO_PGSQL-1.0.2.tgz cd PDO_PGSQL-1.0.2 ~/odp/php/bin/phpize export PGSQL_INCLUDE=/home/users/yanjingang/postgresql/include export PGSQL_LIBDIR=/home/users/yanjingang/postgresql/lib ./configure –with-php-config=/home/users/yanjingang/odp/php/bin/php-config –with-pdo-pgsql=/home/users/yanjingang/postgresql/ –with-pgsql=/home/users/yanjingang/postgresql/ make && make install 2.配置 vim odp/php/etc/ext/pdo_pgsql.ini   添加 [pdo_pgsql] extension=”pdo_pgsql.so” ~/odp/php/sbin/php-fpm restart ~/odp/webserver/bin/lighttpd.sh restart 3.done

file_get_contents url超时问题

相信使用过file_get_contents函数的朋友都知道,当获取的$url访问不了时,会导致页面漫长的等待,甚至还能导致PHP进程占用CPU达100%,因此这个函数就诞生了。curl的一些常识介绍

分享一个实际在用的函数:

代码如下: /* 比file_get_contents稳定的多!$timeout为超时时间,单位是秒,默认为1s。 */ function curl_get_contents($url,$timeout=1) { $curlHandle = curl_init(); curl_setopt( $curlHandle , CURLOPT_URL, $url ); curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout ); curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);   #https –no-check-certificate curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, false); #https –no-check-certificate $result = curl_exec( $curlHandle ); curl_close( $curlHandle ); return $result; } $hx = curl_get_contents(‘http://www.jb51.net’);

注:file_get_contents函数更适合用于读取本地文件。

PHP中的二进制位运算和权限存储

在很多系统的权限/选项设置中 很多都用到了位运算的方法来存储多种标志位。这样可以节省字段。一个字段只需要一个数字 就可以标识很多种设置和信息。

举例 dicuz的帖子表的status字段,官方预留了16个标志位(0x0000 – 0xFFFF) 即216

目前规划使用了只有8个标志位,如下

 0000 0000 0000 0001 是否缓存帖子位置信息 0000 0000 0000 0010 是否回帖只对管理人员和发帖者可见 0000 0000 0000 0100 是否抢楼贴 0000 0000 0000 1000 是否倒序查看回帖 0000 0000 0001 0000 是否存在主题图章标志位<br

阅读全文

PHP + Memcache 实现多服务器session共享

很多时候一个完整的系统可能运行在多个服务器上,如果这多个服务器之间需要共享session的话,那么php默认的files保存session的方式就无能为力了。这时我们可以考虑使用memcache 来接管session的保存与读取工作。

第一步:我们需要在服务器上搭建必要的环境,

php 、web server的安装不是主题就不多说了,其他还需要的是

阅读全文

mac下配置php开发环境

主要内容:

安装macports

启动apache

启动php

安装mysql

安装pecl

安装mongodb

安装php extension(mongo、mcrypt)

一、macports

Mac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts,就像apt-get、yum一样,可以方便的快速安装些软件。

1.安装macports

访问官方网站http://www.macports.org/install.php,下载MAC对应版本的MacPorts,例如<a

阅读全文

mac下安装php mcrypt 扩展

 MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,在mac下的源码安装方法如下:

下载并解压libmcrypt-2.5.8.tar.gz。 在终端执行如下命令: tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure –disable-posix-threads –enable-static make sudo make install (mac

阅读全文

20个实用的PHP库

PHP开发技术在这几年依然比较火热,也有越来越多的开发者加入到了PHP开发阵营,在复杂的框架和冗余的代码面前,选择合适的PHP库就显得 尤为重要,优秀的PHP库可以为你节省很多代码和编码时间。

下面是一些非常有用的PHP类库,相信一定可以为你的WEB开发提供更好和更为快速的方法。

图表库

阅读全文

php 按比重随机抽样 方法

/**  * 按比重随机抽样  * @author yanjingang@mail.com  * @param array $weight 随机值=>比重 例如array(‘a’=>20,’b’=>30,’c’=>50)  * @return string key 键名  */ function randByWeight($weight = array()) { $rand = rand(1, array_sum($weight)); $randval = 0; $_tmpw = 0; foreach ($weight as $k => $w) { $min = $_tmpw; $_tmpw += $w; $max = $_tmpw; if ($rand > $min && $rand <= $max) { $randval = $k; break; } } return $randval; } //测试 $key = randByWeight(array(‘a’ => 200, ‘b’ => 300, ‘c’ => 500)); //随机比重验证 /* 各分值出现比重: 1分——5% 2分——20% 3分——10% 4分——4% 5分——35% 6分——4% 7分——4% 8分——8% 9分——4% 10分——6%  */ $rands = array(); for($i=0;$i<100;$i++){ $key = randByWeight(array(1=>5,2=>20,3=>10,4=>4,5=>35,6=>4,7=>4,8=>8,9=>4,10=>6)); if(isset($rands[$key])) $rands[$key]++; else $rands[$key] = 1; } arsort($rands); var_dump($rands); /* 随机100次结果:  分数 => 随机出现次数  5 => 31  2 => 23  8 => 15  10 => 8  3 => 7  7 => 5  4 => 5  6 => 3  9 => 2  1 => 1

*/

centos6.2下lamp开发环境部署过程

centos6.2下lamp开发环境部署过程
yan 2012-08-16
一、部署程序apache
mysql
php
mongodb
ImageMagick
Memcached
epel
ssh
rockmongo
phpmyadmin
memadmin
二、部署过程
1.mysql
yum install mysql mysql-server
chkconfig –levels 235 mysqld on
/etc/init.d/mysqld start
mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword
2.apache
yum install httpd
chkconfig –levels 235 httpd on
/etc/init.d/httpd start
测试 apache:
在CentOS里Apache的默认文档路径的位置是在/var/www/html,配置文件的路径是/etc/httpd/conf/httpd.conf。其他的配置存储在/etc/httpd/conf.d/ 文件夹里。
3.php
yum install php
/etc/init.d/httpd start
#php extension
yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
/etc/init.d/httpd restart
4.测试apache和php
vi /var/www/html/info.php
<?php phpinfo(); ?>
5.安装ssh并测试登录其它linux服务器:
yum install ssh
ssh -l root 192.168.1.234
exit
6.安装epel:
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
7.安装php常用扩展:
yum install php-mbstring
yum install php-mcrypt
8.安装mongo
yum install mongodb-server
yum install php-pecl-mongo
配置mongo参数:
vi mongodb.conf
dbpath = /data/db/mongodb #数据文件存放目录
logpath = /data/logs/mongodb.log #日志文件存放目录
port = 27017  #端口
fork = true  #以守护程序的方式启用,即在后台运行
创建db目录并设置权限:
mkdir /data/db/mongodb
chmod 777 -R /data/db/mongodb
启动mongod:
mongod –config /etc/mongodb.conf
联接:
mongo
use topka
db.addUser(“topka”,”topkapassword”);
db.auth(“topka”,”topkapassword”);
9.svn co
mkdir /var/www/html/topka/trunk
cd /var/www/html/topka/trunk
svn -co svn://xxx.xxx.xxx/topka/trunk
修改目录权限:
chmod 777 -R /var/www/html
10.配置apache VirtualHost
vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
#配置localhost
<VirtualHost *:80>
    ServerName localhost
    ServerAdmin yan@localhost
    DocumentRoot /var/www/html/
    ErrorLog logs/localhost.log
    CustomLog logs/localhost.log common
</VirtualHost>
#配置www.topka.cn域名
<VirtualHost *:80>
    ServerName www.topka.cn
    ServerAdmin yan.jingang@topka.cn
    DocumentRoot /var/www/html/topka/trunk/web/code/topka_wb/app/
    ErrorLog logs/topka.cn.log
    CustomLog logs/topka.cn.log common
</VirtualHost>
11.配置hosts
#localhost
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#topka
127.0.0.1 topka.cn www.topka.cn img.topka.cn static.topka.cn admin.topka.cn
#db.conf
127.0.0.1 db_master
127.0.0.1 mongoserver
12.安装imageMagick
yum install ImageMagick
yum install php-pecl-imagick
13.安装memcached
yum install memcached
yum install libmemcached
yum install php-pecl-memcache
yum install php-pecl-memcached
启动memcached:
memcached -d -u root
测试:
yum install telnet
telnet localhost 11211
stats
php扩展状态:
使用memadmin管理: