php-fpm のインストール パス: 1. centos などの Linux プラットフォームでは、「/usr/local/php/etc/」および「/usr/local/php/sbin/」にあります。ディレクトリ; 2. Mac プラットフォームでは、「/etc/」および「/usr/bin/」ディレクトリにあります。
最近 php のパフォーマンスについて調べて学んでいるときに、factcgi を見ました。 php-fpm と php-fpm について調べてみたところ、ほとんど理解していなかった、あるいはほとんど何も知らなかったと言えるので、考えると非常に恐ろしいです。この点を注意深く研究することにしました。
以下の記事を参考・検討しました。
1. mod_php、mod_fastcgi、php-fpmの紹介、比較、性能データ
2. 実際のNginx_replacement
導入方法fastcgi と php-fpm を順を追って説明していきます。まずは PHP 周りのことを少しずつお話していきます。なぜ。突然、人生はとても疲れるものだと感じます!
php は Web のために生まれたバックエンド言語です。もちろん、それについては私たち php 犬が最もよく知っています。したがって、php は単なるバックエンド言語であるため、Web 機能を提供するには Web サーバーに依存する必要があります。もちろん、他のバックエンド言語が Web アプリケーションに使用されている場合は、Web サーバーにも依存する必要があります。はい、phpからWebサーバーを導入しました、よし!
それでは、一般的な Web サーバーとは何でしょうか?最も一般的に使用される PHP ドッグは Apache ですが、他にも次のようなものがあります:
- apache
- nginx
- IIS
- lighttpd
- tomcat
基本的には上記のものですが、php に関連して最も一般的に使用されるものは Apache と Nginx です。
まず、完全な PHP アクセス状況を説明するために、例として Web サーバーとして Apache を使用してみましょう:
この図は PHP についてよく説明しています。 Apache と mysql データベースを組み合わせたフローチャート
php は Web 機能サービスを提供するために Web サーバーに依存する必要があることは上で明確に述べられていますが、次にそれらが何であるかを見てみましょう。ゲイになる方法。
私たちが最もよく使用しているのは Apache です。 Apache が PHP コードを認識できるようにする方法を思い出してください。 Apache 設定ファイル httpd.conf に次の文を追加または変更する必要がありますか:
//加入以下2句 LoadModule php5_module D:/php/php5apache2_2.dll AddType application/x-httpd-php .php //将下面的 <IfModule dir_module> DirectoryIndex index.html </IfModule> //将其修改为: <IfModule dir_module> DirectoryIndex index.html index.htm index.php index.phtml </IfModule>
Windows で php と Apache 環境をインストールした後の上記の手動設定、Linux でのソース コードのインストールは大まかに次のように構成されます:
./configure --with-mysql=/usr/local --with-apache=/usr/local/apache --enable-track-vars
このように、それらの共通の本質は、LoadModule
を使用して php5_module
をロードすること、つまり php を Apache のサブモジュールとして実行することです。 Web 経由で php ファイルにアクセスすると、Apache は php5_module
を呼び出して php コードを解析します。
それでは、php5_module
はどのようにしてデータを PHP パーサーに渡し、PHP コードを解析するのでしょうか?
答えは sapi
別の図を見て、Apache、php、sapi について詳しく話しましょう関係:
上の図から、sapi
がそのような中間プロセスであることがわかります。SAPI は、次のような外部通信用のインターフェイスを提供します。 socket
。PHP が他のアプリケーション (Apache、nginx、cli など) と対話できるようにします。 PHP は、Apache および nginx 用の共通の php5_module、CGI、IIS 用の ISAPI、および Shell CLI など、多くの種類の SAPI をデフォルトで提供します。
つまり、上記の Apache 呼び出し php の実行プロセスは次のとおりです:
apache -> httpd -> php5_module -> sapi -> php
わかりました。 php5_module を通して Apache と php を理解しましょう!
この操作モードを mod_php
mode
上で php と apache がパスすることを注意深く説明しました。 php5_module、php5_module は、sapi を介して php にアクセスし、php web のプロセス全体を実現します。
上記で述べたように、sapi についても言及されています。sapi
は php が提供する統合インターフェイスであり、Web サーバーが php5_module と php コードをリンクおよび解析するための cgi を提供します。上記の php5_module
読み込みモードは、mod_php
モードと呼ばれます。 ######それで!ダンダンダン! fastcgi モードについてはすぐに説明しましょう。ハハハハ、それは受け入れられません。
PHP の sapi のもう 1 つの方法は、cgi モードを提供することですが、cgi は比較的古いため、fastcgi がそれを置き換えるようになりました。
それでは、こんにちは。まさか、改めて CGI とは何でしょうか?
CGI (Common Gateway Interface) です。 CGIとは、外部アプリケーション(CGIプログラム)とWebサーバーとの間のインターフェース規格であり、CGIプログラムとWebサーバー間で情報をやり取りするための手順です。 CGI 仕様により、Web サーバーが外部プログラムを実行し、その出力を Web ブラウザに送信できるようになり、Web の単純な静的ハイパーメディア ドキュメントのセットが完全に新しい対話型メディアに変わります。公式の説明を読むのは苦痛ですが、簡単に言えば、cgi は Web サーバーを処理するために特別に使用されるということです。 Web サーバーがユーザーのリクエストを受信すると、そのリクエストを CGI プログラム (php の fastcgi) に送信します。CGI プログラムは、リクエストで送信されたパラメータに従って処理 (php を解析) し、標準の HTML ステートメントを出力して返します。それを Web サーバーに送信し、クライアントに返す、これが通常の CGI の動作方法です。
cgi の利点は、どのサーバーからも完全に独立しており、仲介者としてのみ機能することです。 Apache と php へのインターフェイスを提供します。彼らは CGI 配線を使用してゲイ アクションを完成させました。この利点は、2 つの間の関連性を最小限に抑え、より独立性を高めることです。
しかし、CGI には厄介な点があり、すべての Web リクエストには起動プロセスと終了プロセスがあり、これが最も批判されている fork-and-execute
モードです。同時実行性が高いと、行き止まりになります。 ######それで。この時点で
アプリケーションが誕生しました。事前に早めに開始され、複数の CGI モジュールを開始できます。そこで実行を続け、Web からのリクエストを待ち、Web 用の HTML を生成するための php の解析操作を完了し、終了しません。次の Web リクエストを待ちます。さらに、これらの CGI モジュールの起動は制御可能であり、監視可能です。このテクノロジーにより、Web サーバーと PHP を異なるホスト上で実行して、生産性を損なうことなく大規模に拡張し、セキュリティを向上させることもできます。 つまり、現在、ほとんどのオペレーティング システムは fastcgi モードになっています。 CIGモードも徐々に歴史の舞台から退いています!記事内で cgi と言う場合、通常は fastcgi を指します。
mod_fastcgiModefastcgi モードを使用して php と Apache を接続する方法については、次回で説明します。段落 (または nginx)
: php を Apache または ngix と組み合わせると、sapi を使用して mod_php と mod_fastcgi という 2 つの接続方法が提供されます。 mod_php
このモードは、Apache で実行する php モジュールをインストールします。この 2 つはより高度に統合されています。 mod_fastcgi
モードは中間プロセスであり、Apache がユーザーリクエストを導入した後、それを fastcgi に送信し、php に接続してアクセスを完了します。 これら 2 つのモードをグラフィックで表現します
この図から、Apache がリクエストを受け取るたびに、php に接続するプロセスが生成され、sapi を介してリクエストを完了することが明確にわかります。 , ユーザー数や同時接続ユーザー数が多すぎると、サーバーが耐えられなくなります。
また、mod_php を apache にコンパイルすると、問題が発生したときに PHP の問題なのか、apache の問題なのかを判断することが困難になります。
mod_fastcgi モード
写真では、fastcgi が早めに起動され、静かに待機しています。apache から送信された httpd リクエストはすぐに受信され、sapi.php を呼び出して送信されます。手術。そして辞めません。これにより、Web サーバーの処理が減り、次のリクエストをより速く処理できるため、大規模な同時リクエストを処理でき、同時実行性が大幅に向上します。
Apache と php は独立しているためです。問題が発生した場合、問題の場所を簡単に特定できます。これもこのモデルが人気の理由の一つです。
php-fpm
いろいろなことをやりましたが、最後に php-fpm について話したいと思います。 ^....^早速、本題に入り、php-fpm の利点について話しましょう。これは、mode_fastcgi
モードを支援するために特別に設計されています。 えーっと。わかりました。機能を理解した後、
モードに戻りましょう。これまでの説明で、このモードがどのようなものかを理解しました。 fastcgi はプラットフォームや言語に依存せず、どの言語もそのインターフェイスに従って実装されている限り、独自の言語の fastcgi 機能を実現し、Web サーバーと通信できます。
PHP-CGI は、PHP によって実装された FastCGI マネージャーです。
これは PHP の公式製品であり、付属していますが、まったく強力ではなく、パフォーマンスも悪すぎます。また、非常に面倒で非人間的でもあり、主に次のような点に反映されています。
php-cgi php.ini の設定を変更した後、新しい php-ini を有効にするために php-cgi を再起動する必要があり、スムーズな再起動はできません。mode_php上記の 2 つの問題は長い間多くの人を悩ませてきたため、多くの人が今でも
- php-cgi プロセスを直接強制終了すると、php は実行できなくなります。
メソッドを使用しています。 <p>直到 2004年(确定是这么早吗?)一个叫 Andrei Nigmatulin的屌丝发明了PHP-FPM ,这神器的出现就彻底打破了这种局面,这是一个PHP专用的fastcgi管理器,它很爽的克服了上面2个问题,而且,还表现在其他方面更表现强劲. 请戳官网</p><p>我擦,这一篇貌似又瞎比比的说超时了啊。好吧。那windows和linux下安装配置php-fpm就下一节来说吧。反正我已经已经把php-fpm和fastcgi给讲清楚了。</p><p>===============================================================================</p><h1 id="php-fpm的安装和启动">2、php-fpm的安装和启动</h1><p>在前面我学习过了php中的<code>mod_php模式
和mode_fastcgi和php-fpm模式
:地址,中大致的讲述了几种模式的区别,也明白了php-fpm是fastcgi模式的管理器。今天就来看下php如何安装php-fpm,以及运行。
我的机器是centos 6.2 之前就已经安装过了php 5.4.11,PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。所以已经不需要另外下载了。我这里是5.4.11所以就可以直接用。
由于我php已经安装好了,而且之前编译的时候没有带上fpm模式,所以我必须找到源码重新编译一下:
要想使php支持php-fpm,只需要在编译的时候带上
--enable-fpm
就可以了。
所以,我需要找到之前的编译参数, 后面加上--enable-fpm
,重新编译下就可以了。之前就讲过,有2种方式可以找到之前的编译参数:
- 在源码 /lamp/php-5.4.11/中找到
config.nice
,这个就是之前的编译参数- 在php.ini配置文件中找到
Configure
相关的配置 :/usr/local/php/bin/php -i |grep 'Configure'
好,我们开始,找到之前的编译参数:
[root@localhost /]# cd /lamp/php-5.4.11 & vi config.nice './configure' \ '--prefix=/usr/local/php' \ '--with-config-file-path=/usr/local/php/etc/' \ '--with-apxs2=/usr/local/apache/bin/apxs' \ '--with-mysql=/usr/local/mysql/' \ '--with-libxml-dir=/usr/local/libxml2/' \ '--with-png-dir=/usr/local/libpng/' \ '--with-jpeg-dir=/usr/local/jpeg8/' \ '--with-freetype-dir=/usr/local/freetype/' \ '--with-gd=/usr/local/gd/' \ '--with-zlib-dir=/usr/local/zlib/' \ '--with-mcrypt=/usr/local/libmcrypt/' \ '--with-mysqli=/usr/local/mysql/bin/mysql_config' \ '--enable-soap' \ '--enable-mbstring=all' \ '--enable-sockets' \
加上--enable-fpm
后,重新编译:
[root@localhost /]# cd /lamp/php-5.4.11 [root@localhost php-5.4.11]# './configure' \ '--prefix=/usr/local/php' \ '--with-config-file-path=/usr/local/php/etc/' \ '--with-apxs2=/usr/local/apache/bin/apxs' \ '--with-mysql=/usr/local/mysql/' \ '--with-libxml-dir=/usr/local/libxml2/' \ '--with-png-dir=/usr/local/libpng/' \ '--with-jpeg-dir=/usr/local/jpeg8/' \ '--with-freetype-dir=/usr/local/freetype/' \ '--with-gd=/usr/local/gd/' \ '--with-zlib-dir=/usr/local/zlib/' \ '--with-mcrypt=/usr/local/libmcrypt/' \ '--with-mysqli=/usr/local/mysql/bin/mysql_config' \ '--enable-soap' \ '--enable-mbstring=all' \ '--enable-sockets' \ '--enable-fpm' [root@localhost php-5.4.11] make && make install
安装完成之后,我们尝试着启动:
启动命令是:
/usr/local/php/sbin/php-fpm
报错了:
[26-Feb-2015 15:39:55] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2) [26-Feb-2015 15:39:55] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf' [26-Feb-2015 15:39:55] ERROR: FPM initialization failed
错误信息说找不到 php-fpm.conf
哦,原来是php-fpm.conf还没有,我们到 /usr/local/php/etc目录下将php-fpm.conf.default
拷贝也一份成php-fpm.conf
cd /usr/local/php/etc/cp php-fpm.conf.default php-fpm.conf
编辑一下这个配置文件:
vim php-fpm.conf pid = run/php-fpm.pid user = www group = www
再次尝试启动:
/usr/local/php/sbin/php-fpm
再次报错说www 用户不存在:
[26-Feb-2015 15:57:38] ERROR: [pool www] cannot get uid for user 'www' [26-Feb-2015 15:57:38] ERROR: FPM initialization failed
好,那我们新建www 用户组:
groupadd wwwuseradd -g www www
再次启动:
/usr/local/php/sbin/php-fpm
没有任何的输出,表示成功了!!!
php-fpm占用的是9000端口,我们查看下进程:
[root@localhost php-5.4.11]# ps -ef|grep php-fpm root 1377 1231 0 11:19 pts/1 00:00:00 grep php-fpm root 29249 1 0 06:22 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) www 29250 29249 0 06:22 ? 00:00:00 php-fpm: pool www www 29251 29249 0 06:22 ? 00:00:00 php-fpm: pool www root 32132 6158 0 08:25 pts/2 00:00:00 vi php-fpm.conf
[root@localhost php-5.4.11]# netstat -tnl | grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN [root@localhost php-5.4.11]#
好,安装和启动都OK了。
之前接说过php-fpm是独立于web服务器和php之前的一层服务器,所以,我们需要开机启动它
开机启动的配置文件是:/etc/rc.local
,加入 /usr/local/php/sbin/php-fpm
即可
[root@localhost init]# vi /etc/rc.local 1 #!/bin/sh 2 # 3 # This script will be executed *after* all the other init scripts. 4 # You can put your own initialization stuff in here if you don't 5 # want to do the full Sys V style init stuff. 6 7 touch /var/lock/subsys/local 8 /usr/local/apache/bin/apachectl start 9 /usr/local/bin/redis-server /etc/redis.conf 10 /usr/local/php/sbin/php-fpm
光安装好php-fpm也是没用的,得配合web服务器使用,下一节,我要学习nginx的安装,以及nginx连接php-fpm来使用php。
我们在新安装扩展后,是需要重新php-fpm的,已使扩展生效。
最简单粗暴的重新php-fpm的方式是:
先找到php-fpm的进程号,kill 掉,再用/usr/local/php/sbin/php-fpm 这样启动。
其实还有更多温和的方法,就是使用信号
。
INT, TERM 立刻终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重载所有worker进程并重新载入配置和二进制模块
示例:
php-fpm 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
===============================================================================
我在前面几篇中,很详细的讲述了php-fpm的各种介绍,和安装。今天来看一下它的配置文件php-fpm
的各种配置以及一些常见的优化。
下面是我的平时的环境搭建php的各种安装目录,大家的基本也差不多。
/usr/local/php/php /usr/local/php/etc/php.ini /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf
/usr/bin/php /etc/php.ini /usr/bin/php-fpm /etc/php-fpm.conf
由于我开发以Mac为主,所以就用Mac的环境配置来学习。
这是搜索的一份还算算比较详细的php-fpm.conf
配置详解,我会针对性的修改下,当然php手册上也有详细的讲解:http://php.net/manual/zh/install.fpm.configuration.php
pid = /usr/local/var/run/php-fpm.pid #pid设置,一定要开启,上面是Mac平台的。默认在php安装目录中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/var/log/php-fpm.log #错误日志,上面是Mac平台的,默认在php安装目录中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log log_level = notice #错误级别. 上面的php-fpm.log纪录的登记。可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice. emergency_restart_threshold = 60 emergency_restart_interval = 60s #表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。0 表示 '关闭该功能'. 默认值: 0 (关闭). process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0. daemonize = yes #后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。 listen = 127.0.0.1:9000 #fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置。如果nginx和php在不同的机器上,分布式处理,就设置ip这里就可以了。 listen.backlog = -1 #backlog数,设置 listen 的半连接队列长度,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41 listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP白名单,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接。 listen.owner = www listen.group = www listen.mode = 0666 #unix socket设置选项,如果使用tcp方式访问,这里注释即可。 user = www group = www #启动进程的用户和用户组,FPM 进程运行的Unix用户, 必须要设置。用户组,如果没有设置,则默认用户的组被使用。 pm = dynamic #php-fpm进程启动模式,pm可以设置为static和dynamic和ondemand #如果选择static,则进程数就数固定的,由pm.max_children指定固定的子进程数。 #如果选择dynamic,则进程数是动态变化的,由以下参数决定: pm.max_children = 50 #子进程最大数 pm.start_servers = 2 #启动时的进程数,默认值为: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 pm.min_spare_servers = 1 #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程 pm.max_spare_servers = 3 #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.max_requests = 500 #设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0. pm.status_path = /status #FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到 ping.path = /ping #FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。 ping.response = pong #用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong. access.log = log/$pool.access.log #每一个请求的访问日志,默认是关闭的。 access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" #设定访问日志的格式。 slowlog = log/$pool.log.slow #慢请求的记录日志,配合request_slowlog_timeout使用,默认关闭 request_slowlog_timeout = 10s #当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off' request_terminate_timeout = 0 #设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。 rlimit_files = 1024 #设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。 rlimit_core = 0 #设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值. chroot = #启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用. chdir = #设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时) catch_workers_output = yes #重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.
当然还有一些无关紧要的设置,用到了再说吧。
在之前的文章中就说过了。在fasgcgi模式下,php会启动多个php-fpm进程,来接收nginx发来的请求,那是不是进程越多,速度就越快呢?这可不一定!得根据我们的机器配置和业务量来决定。
我们先来看下,设定进程的配置在哪里?
pm = static | dynamic | ondemand
pm可以设置成这样3种,我们用的最多的就上前面2种。
pm = static
表示我们创建的php-fpm子进程数量是固定的,那么就只有pm.max_children = 50
这个参数生效。你启动php-fpm的时候就会一起全部启动51(1个主+50个子)个进程,颇为壮观。
pm = dynamic
模式,表示启动进程是动态分配的,随着请求量动态变化的。他由 pm.max_children
,pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
这几个参数共同决定。
上面已经讲过,这里再重申一下吧:
pm.max_children = 50
是最大可创建的子进程的数量。必须设置。这里表示最多只能50个子进程。
pm.start_servers = 20
随着php-fpm一起启动时创建的子进程数目。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。这里表示,一起启动会有20个子进程。
pm.min_spare_servers = 10
设置服务器空闲时最小php-fpm进程数量。必须设置。如果空闲的时候,会检查如果少于10个,就会启动几个来补上。
pm.max_spare_servers = 30
设置服务器空闲时最大php-fpm进程数量。必须设置。如果空闲时,会检查进程数,多于30个了,就会关闭几个,达到30个的状态。
很多人恐惧症来袭,不知道选什么好?
一般原则是:动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。
如果你的内存很大,有8-20G,按照一个php-fpm进程20M算,100个就2G内存了,那就可以开启static模式。如果你的内存很小,比如才256M,那就要小心设置了,因为你的机器里面的其他的进程也算需要占用内存的,所以设置成dynamic是最好的,比如:pm.max_chindren = 8, 占用内存160M左右,而且可以随时变化,对于一半访问量的网站足够了。
我们有时候会经常饱受500,502问题困扰。当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。
这个时候,我们是可以开启慢日志功能的。
slowlog = /usr/local/var/log/php-fpm.log.slow request_slowlog_timeout = 15s
当一个请求该设置的超时时间15秒后,就会将对应的PHP调用堆栈信息完整写入到慢日志中。
php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:
[21-Nov-2013 14:30:38] [pool www] pid 11877 script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php [0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
通过日志,我们就可以知道第2行的file_get_contents 函数有点问题,这样我们就能追踪问题了。
以上がphp-fpmのインストールパスはどこでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。