lighttpd跟php,Lighttpd与PHP

本文介绍了Lighttpd和PHP搭配时的配置重点,特别是fastcgi.server配置中的max-procs和PHP_FCGI_CHILDREN参数。解释了它们对PHP-cgi进程数、内存消耗以及系统稳定性和速度的影响。建议根据访问量、资源限制和性能需求来选择合适的配置,并提供了检查和调整进程数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:老王

Lighttpd和PHP的搭配现在越来越常见了。但是老实说,如非必要,我还是推荐你使用Apache和PHP的搭配方式,毕竟LAMP构架的成熟度和稳定度都是经过时间考验的。

那么什么时候Lighttpd和PHP的搭配更值得选择呢?可以从以下几点考虑:如果访问量比较大,硬件资源吃紧,那么Lighttpd适合你;如果和稳定相比,你倾向速度多一些,那么Lighttpd适合你。

Lighttpd的安装,本文就不多说了,大家自己搜索一下就能找到大把大把的教程。这里我们着重讨论一下Lighttpd的配置。

安装好Lighttpd+PHP后,你的配置很可能是类似下面的代码:

fastcgi.server = ( ".php" =>

(( "socket" => "/tmp/php-fastcgi.socket",

"bin-path" => "/usr/bin/php-cgi",

"max-procs" => 10,

"bin-environment" => (

"PHP_FCGI_CHILDREN" => "16",

"PHP_FCGI_MAX_REQUESTS" => "1000"

),

"broken-scriptfilename" => "enable"

))

)

其中,PHP_FCGI_MAX_REQUESTS的作用是在一个子进程工作一定次数后就干掉它,以免可能出现的问题连累系统,主进程会再创建一个相应的子进程来替补,保证子进程数一直是PHP_FCGI_CHILDREN个。

另外还有两个设置选项至关重要,分别是max-procs和PHP_FCGI_CHILDREN。如上所示的配置,系统将创建170个PHP-cgi的进程,它的计算公式如下:

num-procs = max-procs * ( 1 + PHP_FCGI_CHILDREN )

如果一个php-cgi进程占用十几兆内存的话,那么总计大约就要占用2G左右的内存。

我们先来看看max-procs的意思:从字面意思看,它似乎指得是最大进程数。实际它指的是Lighttpd一开始spawn多少个进程。

至于PHP_FCGI_CHILDREN的意思,和字面意思相同,指的就是每个主进程里产生多少个PHPFCGI子进程。

如果你的Lighttpd已经启动,你可以尝试执行一下命令:ps aux | grep php-cgi,将会看到大量的php-cgi进程:

nobody 10939 0.0 0.1 15556 4820 ? Ss 16:24 0:00 /usr/local/bin/php-cgi

nobody 11380 0.0 0.1 15452 5588 ? S 16:24 0:00 /usr/local/bin/php-cgi

仔细观察,你会发现这些php-cgi的状态不尽相同,有的是Ss,有的是S,通过man ps你能找到这些状态的含义:

S Interruptible sleep (waiting for an event to complete)

s is a session leader

也就是说,Ss状态的进程都是主进程(max-procs代表的那些进程),而S状态的进程都是子进程(PHP_FCGI_CHILDREN代表的那些进程)。如果不相信,你可以使用命令核实一下数量:

ps aux | grep php-cgi | grep Ss| grep -v grep| wc -l

确认了这些,我们再仔细看ps aux | grep php-cgi的结果,你还会发现主进程的内存占用(4840)和子进程的内存占用(5588)是不同的。这是因为主进程不处理实际的PHP请求,它唯一的工作就是看管好自己手下的子进程。而实际的PHP请求都是由子进程来完成的,所以子进程占用的内存要稍大一些。

如此,我们对max-procs和PHP_FCGI_CHILDREN的含义应该理解了吧,别急,还有一个问题:既然php-cgi的总进程数可以由上面的公式算出来,那么以下几个配置选项哪个好?

"max-procs" => 1,

"PHP_FCGI_CHILDREN" => "169",

"max-procs" => 2,

"PHP_FCGI_CHILDREN" => "84",

"max-procs" => 10,

"PHP_FCGI_CHILDREN" => "16",

以上三种配置产生的总进程数一样(都是170),我们如何判断配置的好坏呢?

如果使用了eAccelerator之类的PHP优化器,那么eAccelerator会为每一个主进程创建一个独立的缓存空间,这个时候如果你的max-procs是2的话,就会建立两个独立的缓存空间。一方面这浪费了一些内存,另一方面如果你的一个主进程挂了(它下面的子进程就失控了),至少你还有一个主进程可以保持正常运转。

总体来说,max-procs不宜为较小,否则没有容错性,在有PHP优化器的时候也不宜过大,否则会浪费很多内存做缓存空间,即便没有装PHP优化器,max-procs也不宜过大,因为主进程是不处理PHP请求的,过多的主进程自然就是一种浪费。确定了max-procs的值,剩下PHP_FCGI_CHILDREN的值就好说了。

另外:通过命令netstat -anp | grep php-cgi | wc -l可以得知当前有多少php-cgi处于连接状态,如果接近php-cgi的总进程数,就说明应该加大进程数了。

phpLight 2013.2.20下载 phpLight 2013 是网上首套LightTPD+PHP集成包, 集成最新Lighttpd+PHP+MySQL+SQL-Front+Zend Guard Loader+XCache。 纯绿色,安装后无需再配置。支持系统服务和非服务两种启动方式,自由切换。 一次性安装无需再安装,即使重做系统后亦可使用,直接点启动即可。 小巧简易迷你只有14M,非常方便的搭建网站服务器。 有专门开发的控制面板进行控制程序的启停。 phpLight 2013 包括以下组件: PHP 5.3.21  web编程语言 Lighttpd 1.4.30  服务器 MySQL 5.5.30  数据库 SQL-Front 5.1.4.16  MySQL管理器 Zend Guard Loader 5.5.0  PHP优化器 XCache 3.0.1    PHP缓存器/优化器 eAccelerator 1.0  PHP缓存加速器 以上均为当前最新版本。 『特别注意』MySQL数据库用户名:root,密码root 1. 为了减少出错安装路径不得有空格和汉字,如有防火墙开启,会提示是否信任httpd、mysqld运行,请选择全部允许。 2. 此为Lighttpd+PHP方案,需要apache+php方案的请到www.phpStudy.net下载phpStudy,Nginx+php方案下载phpfind。 3. 重装系统后或相关服务丢失时,只需要点一下『运行模式-应用』即可,更改路径自动启动。 4. 可通过菜单『卸载相关服务』进行卸载相关服务。 5. 在『启动』、『停止』、『重启』三个启停按钮上右键可以有选择地进行启停,左键将控制全部的启停。 6. 菜单『phpStudy 设置』可以进行php,apche,mysql的相关设置。菜单『站点域名设置』可以进行站点及域名的添加。 7. 本程序分为安装版和非安装版,无论是安装还是免安装,最后的效果完全一致。 8. 鉴于phpMyAdmin的导入导出功能太弱,并且大文件SQL还容量出错,故将phpMyAdmin换成SQL-Front。 系统服务和非服务启动的区别: 系统服务启动:开机就会启动,适合经常使用或做服务器,无需手工启动,服务会随开机而启动,好处程序运行稳定。 非服务启动:需要手动启动一下,适合偶尔经常使用一下。在不使用的情况不会启动相关进程,从而节省电脑的资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值