当前位置: 首页 > Linux

php-fpm

时间:2023-04-06 05:50:44 Linux

centos等linux平台配置及优化/usr/local/php/php/usr/local/php/etc/php.ini/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.confmacplatform/usr/bin/php/etc/php.ini/usr/bin/php-fpm/etc/php-fpm.conf由于我主要在Mac上开发,所以用Mac环境配置学习。php-fpm配置详解这是我搜索到的比较详细的php-fpm.conf配置详解。我将有针对性地修改它。当然php手册中也有详细的解释:http://php.net/manual/zh/inst...pid=/usr/local/var/run/php-fpm.pid#pid设置,必须开启,以上是针对Mac平台的。默认是php安装目录下的var/run/php-fpm.pid。比如centos在:/usr/local/php/var/run/php-fpm.piderror_log=/usr/local/var/log/php-fpm.log#Errorlog,上面是Mac平台,安装在php默认在var/log/php-fpm.log目录下,比如centos:/usr/local/php/var/log/php-fpm.loglog_level=notice#errorlevel。注册上面的php-fpm.log记录。可用的级别有:alert(必须立即处理)、error(错误情况)、warning(警告情况)、notice(一般重要信息)、debug(调试信息)。Default:notice.emergency_restart_threshold=60emergency_restart_interval=60s#在emergency_restart_interval中表示如果设置值中出现SIGSEGV或SIGBUS错误的php-cgi进程数超过emergency_restart_threshold,php-fpm将优雅重启。这两个选项一般保持默认值即可。0表示“关闭此功能”。Defaultvalue:0(off).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=41listen.allowed_clients=127.0.0.1#允许访问FastCGI进程的IP白名单,任意设置为无限IP,如果要设置其他的nginxhosts,你也可以访问这个FPM进程,listen必须设置为本地可访问的IP。默认值为任意。每个地址都用逗号分隔。如果未设置或为空,则允许任何服务器请求连接。listen.owner=wwwlisten.group=wwwlisten.mode=0666#unixsocket设置选项,如果你使用tcp访问,就在这里注释。user=wwwgroup=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)/2pm.min_spare_servers=1#保证最小空闲进程数,如果空闲进程小于这个值,创建新的子进程pm.max_spare_servers=3#,保证最大空闲进程数,如果空闲进程大于这个值,则清理pm.max_requests=500#设置每个子进程重生前服务的请求数。对于可能存在内存泄漏的第三方模块非常有用。如果设置为“0”,则始终接受请求。相当于PHP_FCGI_MAX_REQUESTS环境变量。默认值:0.pm.status_path=/status#FPM状态页面的URL。如果未设置,则无法访问状态页面。默认值:无。munin监控会使用ping.path=/ping#FPM监控页面pingURL。如果不设置,则无法访问ping页面。该页面用于对外检查FPM是否存活,是否可以响应请求。请注意,它必须以斜杠(/)开头。ping.response=pong#用于定义ping请求的返回响应。返回为HTTP200的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%%"#设置access的格式日志。slowlog=log/$pool.log.slow#记录慢请求的日志,与request_slowlog_timeout一起使用,默认关闭request_slowlog_timeout=10s#当一个请求达到设置的超时时间后,相应的PHP调用栈信息将被完整写入到中慢日志。Setto'0'表示'Off'request_terminate_timeout=0#设置单个请求的超时中止时间。此选项对于php.ini设置中的“max_execution_time”不会因某些特殊原因而中止的脚本很有用。设置为“0”表示“关闭”。当502错误频繁出现时,您可以尝试更改此选项。rlimit_files=1024#设置文件打开描述符的rlimit限制。默认值:系统定义值默认可打开句柄为1024,可以用ulimit-n查看,用ulimit-n2048修改。rlimit_core=0#设置corerlimit的最大限制值。可用值:'unlimited'、0或正整数。默认值:系统定义的value.chroot=#启动时的Chroot目录。定义的目录需要是绝对路径。如果没有设置,chroot将不会被使用。chdir=#设置启动目录,启动时会自动Chdir到该目录。定义的目录需要是绝对路径。默认值:当前目录,或/目录(当chroot时)catch_workers_output=yes#将运行进程的stdout和stderr重定向到主错误日志文件。如果未设置,stdout和stderr将根据FastCGI的规则重定向到/dev/null。默认值:空。当然有些是无所谓的设置,等到用到的时候再说吧。php-fpm进程分配的一些重要设置在fasgcgi模式下,php会启动多个php-fpm进程来接收来自nginx的请求。是不是进程越多,速度越快?不必要!得根据我们的机器配置和业务量来决定。我们先来看一下,设置进程的配置在哪里?下午=静态|动态|ondemandpm可以设置三种,前两种是我们用的最多的。pm=static模式pm=static表示我们创建的php-fpm子进程数量是固定的,所以只有参数pm.max_children=50生效。当你启动php-fpm时,所有51(1个主+50个子)进程将一起启动,这是相当壮观的。pm=dynamicmodepm=dynamicmode,意思是启动进程是动态分配的,会随着请求量的多少而动态变化。它由参数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时创建的子进程数。Default: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,基于一个20M的php-fpm进程,100个就有2G内存,那你可以开启静态模式。如果你的内存很小,比如只有256M,那么一定要慎重设置,因为你机器中的其他进程也需要占用内存,所以最好设置为动态的,例如:pm.max_chindren=8,takes最多160M左右的内存,可以随时更换,足够一半的网站访问量了。日志查询慢我们有时候经常会遇到500502的问题。当nginx收到以上错误码时,可以确定是后端php-fpm解析php出现了某种问题,比如执行错误,执行超时。这个时候我们可以开启慢日志功能。slowlog=/usr/local/var/log/php-fpm.log.slowrequest_slowlog_timeout=15s当一个请求设置超时时间为15秒时,对应的PHP调用栈信息会被完整的写入slowlog。php-fpm慢日志会记录进程号、脚本名、哪个文件、哪行代码、哪个函数执行时间过长:[21-Nov-201314:30:38][poolwww]pid11877script_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:2passedlog,可以知道第2行的file_get_contents函数有问题,可以追查问题。