Lighttpd与PHP

Jun 06, 2016 pm 07:59 PM
php

Lighttpd与PHP 2007年12月21日 星期五 下午 7:40 作者:老王 Lighttpd和PHP的搭配现在越来越常见了。但是老实说,如非必要,我还是推荐你使用Apache和PHP的搭配方式,毕竟LAMP构架的成熟度和稳定度都是经过时间考验的。 那么什么时候Lighttpd和PHP的搭配更得

Lighttpd与PHP

2007年12月21日 星期五 下午 7:40

作者:老王

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

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

题外话:NginX大有赶超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的总进程数,就说明应该加大进程数了。

补充:

  1. Add cgi.fix_pathinfo = 1 in your php.ini
  2. Add "broken-scriptfilename" => "enable" into lighttpd.conf at fastcgi.server div.


---------------------------------------------

参考连接:

http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI
http://trac.lighttpd.net/trac/wiki/FrequentlyAskedQuestions


http://hi.baidu.com/thinkinginlamp/blog/item/127209f77f3a9c26720eecda.html


在我自己的机器上,pfSense 2.1环境,当然出现一些与文章不尽相同的地方,如在我系统上,执行程序不是 /usr/local/bin/php_cgi 而是 /usr/local/bin/php,另外ps -aux查看的结果状态栏是 Is 或者 I,所以上面的命令在用的时候需要根据自己的情况进行调整。

自己验证的结果确实跟这篇博文描述一致,总的进程数 = max_procs * (PHP_FCGI_CHILDREN + 1)。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

session_start()が複数回呼び出されるとどうなりますか? session_start()が複数回呼び出されるとどうなりますか? Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

作曲家:AIを介したPHP開発の援助 作曲家:AIを介したPHP開発の援助 Apr 29, 2025 am 12:27 AM

AIは、作曲家の使用を最適化するのに役立ちます。特定の方法には次のものが含まれます。1。依存関係管理の最適化:AIは依存関係を分析し、最適なバージョンの組み合わせを推奨し、競合を減らします。 2。自動コード生成:AIは、ベストプラクティスに準拠したComposer.jsonファイルを生成します。 3.コードの品質を改善する:AIは潜在的な問題を検出し、最適化の提案を提供し、コードの品質を向上させます。これらの方法は、開発者が効率とコードの品質を向上させるのに役立つ機械学習および自然言語処理技術を通じて実装されています。

session_start()関数の重要性は何ですか? session_start()関数の重要性は何ですか? May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

データ処理と計算にMySQL関数を使用する方法 データ処理と計算にMySQL関数を使用する方法 Apr 29, 2025 pm 04:21 PM

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

H5:HTML5の重要な改善 H5:HTML5の重要な改善 Apr 28, 2025 am 12:26 AM

HTML5は5つの重要な改善をもたらします。1。セマンティックタグにより、コードの明確性とSEO効果が向上します。 2.マルチメディアサポートは、ビデオとオーディオの埋め込みを簡素化します。 3。フォームエンハンスメントは、検証を簡素化します。 4.オフラインおよびローカルストレージにより、ユーザーエクスペリエンスが向上します。 5。キャンバスとグラフィック機能は、Webページの視覚化を強化します。

作曲家:PHP開発者のパッケージマネージャー 作曲家:PHP開発者のパッケージマネージャー May 02, 2025 am 12:23 AM

Composerは、PHPの依存関係管理ツールであり、Composer.jsonファイルを介してプロジェクトの依存関係を管理しています。 1)依存関係情報を取得するためのComposer.jsonを解析する。 2)依存関係を解析して、依存性ツリーを形成します。 3)PackagistからVendorディレクトリへの依存関係をダウンロードしてインストールします。 4)Composer.Lockファイルを生成して、依存関係バージョンをロックして、チームの一貫性とプロジェクトの保守性を確保します。

mysqlの文字セットと照合ルールを構成する方法 mysqlの文字セットと照合ルールを構成する方法 Apr 29, 2025 pm 04:06 PM

MySQLで文字セットと照合を構成する方法は次のとおりです。1。サーバーレベルでの文字セットとコレクションの設定:setNames'utf8 '; setCharacterSetutf8; setCollat​​ion_connection = 'utf8_general_ci'; 2。特定の文字セットと照合を使用するデータベースを作成します:createdatabaseexample_dbcharactersetutf8collat​​eutf8_general_ci; 3.テーブルを作成するときに文字セットとコレクションを指定:createTableExample_table(idint

cでタイプの特性を使用する方法は? cでタイプの特性を使用する方法は? Apr 28, 2025 pm 08:18 PM

Typetraitsは、Cでコンパイル時間タイプのチェックと操作に使用され、コードの柔軟性とタイプの安全性が向上します。 1)タイプの判断は、STD :: iS_integralおよびstd :: is_floating_pointを介して実行され、効率的なタイプチェックと出力を達成します。 2)std :: is_triviely_copyableを使用して、ベクトルコピーを最適化し、タイプに従って異なるコピー戦略を選択します。 3)コンパイル時間の意思決定、タイプの安全性、パフォーマンスの最適化、コードの複雑さに注意してください。タイプトライトの合理的な使用は、コードの品質を大幅に改善できます。

See all articles