学习php-fpm的两种执行方式

前段时间配置php-fpm的时候,无意间发现原来他还有两种执行方式。与Apache一样,他的进程数也是可以根据设置分为动态和静态的。而php-fpm也是同样存在两种方式,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限。

这两种不同的执行方式,可以根据服务器的实际需求来进行调整。

这里先说一下涉及到这个的几个参数吧,他们分别是pmpm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers

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

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

pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。

如果dm设置为static,那么其实只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。

如果dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。

那么,对于我们的服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,我们运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。所以,动态方式因为会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或者VPS上使用。具体最大数量根据 内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。

然后对于比较大内存的服务器来说,设置为静态的话会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据 内存/30M 得到。比如说2GB内存的服务器,可以设置为50;4GB内存可以设置为100等。

本博客建立在512M的VPS上,因此我设置的参数如下:

pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=5
pm.max_spare_servers=20

这样就可以最大的节省内存并提高执行效率。

linux系统时间纠正

当Linux服务器的系统时间不对的时候,可以使用ntpdate工具来纠正时间。

ntpdate简单用法:

# ntpdate ip

# ntpdate 210.72.145.44

 

以下是一些可用的NTP服务器地址:

Name IP Location
210.72.145.44 210.72.145.44 中国(国家授时中心)
133.100.11.8 133.100.11.8 日本(福冈大学)
time-a.nist.gov 129.6.15.28 NIST,Gaithersburg,Maryland
time-b.nist.gov 129.6.15.29 NIST,Gaithersburg,Maryland
time-a.timefreq.bldrdoc.gov 132.163.4.101 NIST,Boulder,Colorado
time-b.timefreq.bldrdoc.gov 132.163.4.102 NIST,Boulder,Colorado
time-c.timefreq.bldrdoc.gov 132.163.4.103 NIST,Boulder,Colorado
utcnist.colorado.edu 128.138.140.44 UniversityofColorado,Boulder
time.nist.gov 192.43.244.18 NCAR,Boulder,Colorado
time-nw.nist.gov 131.107.1.10 Microsoft,Redmond,Washington
nist1.symmetricom.com 69.25.96.13 Symmetricom,SanJose,California
nist1-dc.glassey.com 216.200.93.8 Abovenet,Virginia
nist1-ny.glassey.com 208.184.49.9 Abovenet,NewYorkCity
nist1-sj.glassey.com 207.126.98.204 Abovenet,SanJose,California
nist1.aol-ca.truetime.com 207.200.81.113 TrueTime,AOLfacility,Sunnyvale,California
nist1.aol-va.truetime.com 64.236.96.53 TrueTime,AOLfacility,Virginia

Apache日志文件过大的解决办法

服务器一年多了一直很正常,没出过问题,这几天突然莫名中断,有几个问题,其中一个是apache的日志过大了,单个文件已经超过2个G了,马上动手解决,首先是停止apache服务或者停止日志即可,停止成功后删除这二个文件,删除后打开apache的httpd.conf配置文件,具体详情的修改资料见下面介绍:

下面是在网上搜索到的方法,立马见效,顶一个!
在 Windows 下的设置例子如下:
第一步:首先停止apache服务

第二步:删除 Apache2/logs/目录下的 error.log、access.log文件
第三步:打开 Apache 的 httpd.conf配置文件并找到下面两条配置
ErrorLog logs/error.log
CustomLog logs/access.log common
直接注释掉,换成下面的配置文件。
把#ErrorLog logs/error.log换成以下二行代码;
# ErrorLog "|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 1M"
# ErrorLog "|bin/rotatelogs.exe -l logs/error-%Y-%m-%d.log 86400"
上面分别是限制错误日志文件为 1M和每天生成一个错误日志文件

把#CustomLog logs/access.log common换成以下二行代码
# CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 1M" common
# CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-%d.log 86400" common
以面代码的意思是限制访问日志文件为 1M和每天只生成一个访问日志
换好后保存,重启apache即可。OK,解决了。。。

ssh 删除文件夹命令

ssh下面删除命令 rm

开始找到网上解释 rm [path] 可以删除文件/文件夹

但是我用来删除的时候却提示:

rm admin1

rm: cannot remove `admin1`: Is a directory

后来有找到rmdir ,却只能删除空的文件夹

再经找寻终于获得解决:rm -r[文件夹]

参考:

rmdir 所删除的目录,每级目录中都是空的,没有其它的文件。如果任何一级的目录有文件,也不能删除。这时您要用到rm -rf 命令强制删除。不过用rm -rf 删除时有点不安全,不会进行任何提示,还是用rm -ri比较好一点,因为在删除的时候,会有警告提示(每个文件和文件夹都会提示)。

关于RM的补充:

该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,原文件保持不变。

rm命令的一般形式为:

rm [选项] 文件…

如果没有使用- r选项,则rm不会删除目录。

该命令的各选项含义如下:

- f 忽略不存在的文件,从不给出提示。

- r 指示rm将参数中列出的全部目录和子目录均递归地删除。

- i 进行交互式删除。

使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。了防止这种情况的发生,可以使用i选项来逐个确认要删除的文件。如果用户输入y,文件将被删除。如果输入任何其他东西,文件则不会删除。

CentOS6建立VPN脚本,centos安装pptp

CentOS 6 pptp 一键安装包,所有安装文件来源于官方网站,完美兼容32、64位
localip和remoteip改为对应自己的服务器和客户端的IP,然后复制内容另存为一个sh文件直接执行即可

yum remove -y pptpd ppp

iptables --flush POSTROUTING --table nat

iptables --flush FORWARD

rm -rf /etc/pptpd.conf

rm -rf /etc/ppp

arch=`uname -m`

wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.$arch.rpm

yum -y install make libpcap iptables gcc-c++ logrotate tar cpio perl pam tcp_wrappers dkms kernel_ppp_mppe ppp

rpm -Uvh pptpd-1.3.4-2.el6.$arch.rpm

mknod /dev/ppp c 108 0

echo 1 > /proc/sys/net/ipv4/ip_forward

echo "mknod /dev/ppp c 108 0" >> /etc/rc.local

echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.local

echo "localip 107.6.45.234" >> /etc/pptpd.conf

echo "remoteip 107.6.45.2-254" >> /etc/pptpd.conf

echo "ms-dns 8.8.8.8" >> /etc/ppp/options.pptpd

echo "ms-dns 8.8.4.4" >> /etc/ppp/options.pptpd

pass=`openssl rand 6 -base64`

if [ "$1" != "" ]

then pass=$1

fi

echo "vpn pptpd ${pass} *" >> /etc/ppp/chap-secrets

iptables -t nat -A POSTROUTING -s 107.6.45.0/24 -j SNAT --to-source `ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk 'NR==1 { print $1}'`

iptables -A FORWARD -p tcp --syn -s 107.6.45.0/24 -j TCPMSS --set-mss 1356

service iptables save

chkconfig iptables on

chkconfig pptpd on

service iptables start

service pptpd start

echo "VPN service is installed, your VPN username is vpn, VPN password is ${pass}"

常见错误解决

1:619错误
有些同学说要手动建立ppp文件,我觉得其实应该是检查iptables的NAT功能是否正常
用iptables -t nat -L 看看nat规则是否正常
有同学建议 mknod /dev/ppp c 108 0
但其实出现这问题的大部分都是本身已经存在这个文件会提示 mknod: `/dev/ppp’: file exists,
如果你不敢确认,那就完全也可以先用rm删除这个设备文件,然后再建个
另外确认net.ipv4.ip_forward=1是否生效

2:800错误
一般是vpn服务器关闭了,或者停止了,如果你是用域名访问vpn,也有可能是dns的解析除了问题

3:还有一种情况:就是登录和验证都正常,但就是访问不了页面
这种情况我碰到很多次,但我至今没找到确切的问题所在,我初步也是怀疑iptables的转发没能正常工作
大家不妨多看看log日志分析一下

YardVPS安装pptp详细教程步骤

 

YardVPS Xen Centos 5.7 32位上测试通过,安装方法非常简单,下面是步骤

 wget http://www.yangkun.net/wp-content/uploads/2012/pptpd.sh
chmod +x pptpd.sh
./pptpd.sh

 

整个过程只需2分钟,安装完成后VPN帐号是vpn,密码随机生成。

 

另外附赠一些常用的SSH命令:

 

去掉PPTP加密方法(上面给的这个包是加密的)
require-mschap-v2
require-mppe-128
运行vi /etc/ppp/options.pptpd把上面的这2行去掉即可

 

添加VPN用户命令如下
echo ‘username pptpd password *’ >> /etc/ppp/chap-secrets

 

删除VPN用户命令如下
sed -i ‘/^username\ /d’ /etc/ppp/chap-secrets

 

修改VPN用户密码
sed -i -e ‘s/^\(username pptpd \).*\( \*\)$/\1newpassword\2/g’ /etc/ppp/chap-secrets

 

编辑VPN用户修改文件
vi /etc/ppp/chap-secrets

 

PPTP一键安装教程centos

PPTP一键安装教程centos

注意:只有Xen能够安装PPTP是一种误区,OpenVZ也是可以的。

系统要求:CentOS 5 32bits/64bits。

PPTP一键安装包安装方法:

wget http://www.diahosting.com/dload/pptpd.sh
sh pptpd.sh

安装完成后会自动提示 PPTP一个默认的用户名(vpn)和随机密码。

当然,PPTP的用户名和密码是可以自定义的

编辑/etc/ppp/chap-secrets

vi /etc/ppp/chap-secrets

开始编辑,逐行输入以下内容:

用户1 pptpd 密码1 *
用户2 pptpd 密码2 *
用户3 pptpd 密码3 *

保存即可

PHPnow安装、使用、升级教程

搭建 PHP 其实不很难,只是有点繁琐。要是自己搭建一次 PHP + MySQL 环境很是费时。更糟的是,很多新手在配置 PHP 时常常出现这样那样的问题。诸如 mysql 扩展、zend 安装失败等等问题。这时,我们需要一个快速、标准且专业的 PHP 套件包。PHPnow 就这样应运而生,为你快速搭建专业的虚拟主机。
PHPnow 是Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包。
简易安装、快速搭建支持虚拟主机的 PHP 环境。附带 PnCp.cmd 控制面板,帮助你快速配置你的套件,使用非常方便。

PHPnow 是绿色的,解压后执行 Setup.cmd 初始化,即可得到一个 PHP + MySQL 环境。
然后就可以直接安装 Discuz!, PHPWind, DeDe, WordPress 等程序。
支持虚拟主机:便捷的虚拟主机管理
配置文件备份:放心地去尝试修改配置文件,乱了就还原配置
虚拟主机代理:可与 IIS 共存 (不同端口,泛解析代理)
插件支持:ASP.NET | JSP(寻找最佳解决)

有必要掌握手动配置 PHP ,PHPnow 只是为你减少重复的动作。请尝试自己搭建 PHP 环境,参考参考相关权威文档。

PHPnow 组件
最新版本包含:
Apache-2.0.63 / 2.2.16
PHP-5.2.14
MySQL-5.0.90 / 5.1.50
Zend Optimizer-3.3.3
phpMyAdmin-3.3.7
* eAccelerator 0.9.6-1
* 默认没有启用。执行 PnCp.cmd 选 3 启用。

安装注意事项:
如果装有同类软件,请先停止或卸载,否则会占端口!请关闭迅雷,或修改迅雷的 BT 端口!
解压:解压到任意目录;(不能含有中文!例如 "桌面")
安装:运行 Setup.cmd 根据向导进行初始化;
使用:.htdocs 为网站主目录。执行 PnCp.cmd 进行设置或管理。
注意:执行 Stop.cmd 即已经卸载。请执行 Stop.cmd 后再删除文件。

升级说明:

重要提示:升级前请一定要做好备份!请把此说明看懂再进行升级。
1. 停止原来的 Apache 和 MySQL (Stop.cmd)

2. 将原来的 PHPnow 目录 移动 或 改名。例如 D:PHPnow 改为 D:PHPnow2

3. 安装好新的 PHPnow

4. 停止新装的 PHPnow (Stop.cmd)

5. 从原来的目录中(例如 D:PHPnow2),复制下列内容到新目录的对应位置(覆盖)
.MySQL-5.0.xxdata
.Apacheconfextrahttpd-vhosts.conf
.vhosts
.htdocs
如果你还有其他需要,可以根据自己情况处理。
如果含有代理虚拟主机,请手动任意添加一个,然后可以删除新加的这个,
才可使用。目的是激活 代理 模块。否则会得到错误信息。

6. 启动服务 (Start.cmd)

7. 启动 MySQL 后,执行 PnCp.cmd 选 15 (升级 MySQL 数据库),
输入你的 root 密码,结果全是 OK 即顺利完成。

Fatal error: Maximum execution time of 30 seconds exceeded in

Fatal error: Maximum execution time of 30 seconds exceeded in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\code\curl\work\work3.php on line 38

一看就是超时。懒人比较喜欢第二种解决方法。

看http://cn.php.net/manual/zh/info.configuration.php#ini.max-execution-time

就知道你的代码有多poor了。。。然后改了php.ini的话也不保证不出现类似错误,因为你的服务器也有超时,都设置为300如何?我在想。。。。重启apache,再试试。

max_execution_timeinteger

This sets the maximum time in seconds a script is allowed to run before it is terminated by the parser. This helps prevent poorly written scripts from tying up the server. The default setting is 30. When running PHP from the command line the default setting is 0.

The maximum execution time is not affected by system calls, stream operations etc. Please see the set_time_limit() function for more details.

You can not change this setting with ini_set() when running in 安全模式. The only workaround is to turn off safe mode or by changing the time limit in the php.ini.

Your web server can have other timeout configurations that may also interrupt PHP execution. Apache has a Timeout directive and IIS has a CGI timeout function. Both default to 300 seconds. See your web server documentation for specific details.

--方法一------------------------------------------------------------
Fatal error: Maximum execution time of 30 seconds exceeded in

有时在运行大型网站或百万级的数据时优化得不好会出来如Fatal error: Maximum execution time of 30 seconds exceeded in错误提供了了。那么这是什么原因了呢,从英语意思我们看得出是超过的脚本的最大限制的运行时间了,php 系统默认是30秒哦,如果超过就会出现如下提示错误哦。
下面我们来看看如何解决运行时间过长的方法吧。
在php自带了一个set_time_limit($secon)函数
$cecon是一个以秒为单位的的int型数值

set_time_limit(30);

//意思就是过了30秒如何本程序执行完,就会出来错误提供了。如果想让页面永远不过期的话就设置参数为0就行了。
set_time_limit(0);

--方法二------------------------------------------------------------
Fatal error: Maximum execution time of 30 seconds exceeded
出现这个错误如何解决 去哪里可以设置最大执行时间

解决办法:
修改php.ini,
把max_execution_time = 30(默认值)的值进行修改,这里的单位是秒 ,你可以根据自己的需要更改其数值,然后重起服务
或者在程序写。
set_time_limit(时间) //0为无限制