广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >如何解决php fpm出错问题
  • 173
分享到

如何解决php fpm出错问题

phpfpm 2014-09-15 23:09:20 173人浏览 才女
摘要

本文操作环境:linux5.9.8系统、PHP5.5版、Dell G3电脑。如何解决php fpm出错问题?nginx调用php-fpm出错解决方法和nginx配置详解这篇文章介绍了Nginx调用php-fpm出错的解决方法,最后给出了ng

本文操作环境:linux5.9.8系统、PHP5.5版、Dell G3电脑。

如何解决php fpm出错问题?

nginx调用php-fpm出错解决方法和nginx配置详解

这篇文章介绍了Nginx调用php-fpm出错的解决方法,最后给出了nginx配置方法,需要的朋友可以参考下

装完了nginx和php-5.5,配置好了nginx调用php后,就开始启动php-fpm。

使用下面的命令

代码如下:

/usr/local/php/sbin/php-fpm

就可以启动了。

在nginx的目录中创建个php的检测脚本index.php

结果在打开Http://localhost/index.php

悲剧的发现居然无法打开 。查看日志文件,看了下报错原因

代码如下:

2013/07/01 22:34:26 [error] 3214#0: *64 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.168.19, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.168.140"

查看下端口 。看到php-fpm的9000端口已经打开了,说明php-fpm是没什么问题的,问题出在了nginx上了。可能是我的配置文件有问题。

找到nginx加载php配置的那块。另外参考了下网上nginx的配置文件。

在第69行有一个调用脚本路径

代码如下:

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

我把路径改下,改成下面的就可以了。

代码如下:

 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
http://localhost/index.php

可以出现php的版本信息了。

大家还可以参考下面的配置方法

php-fpm不用再依赖其它的fastcgi启动器,比如lighttpd的spawn-fcgi。

php-fpm的使用非常方便,配置都是在php-fpm.ini的文件内

而启动,重启都可以从php/sbin/php-fpm中进行

更方便的是修改php.ini后可以直接使用php-fpm reload进行加载 无需杀掉进程就可以完成php.ini的修改加载

结果显示使用php-fpm可以使php有不小的性能提升

php-fpm控制的进程.cpu回收的速度比较慢.内存分配的很均匀

而spawn-cgi控制的进程CPU下降的很快.而内存分配的比较不均匀.

有很多进程似乎未分配到,而另外一些却占用很高.

可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降

而php-fpm合理的分配.导致总体响应的提到以及任务的平均

使用php-fpm需要在php源码上打补丁,然后重新编译php

一.下载php-fpm

wget http://cn.php.net/get/php-5.2.8.tar.gz/from/www.php.net/mirror
wget http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz

与php-5.2.9在同一级目录

gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.9 -p1

补丁打好以后,编译php的时候增加了下面几个参数:

–enable-fpm 激活fastcgi模式的fpm支持

–with-fpm-conf php-fpm的配置文件(默认是PREFIX/etc/php-fpm.conf)

–with-fpm-log php-fpm的日志文件(默认是PREFIX/logs/php-fpm.log)

–with-fpm-pid php-fpm的pid文件(默认是PREFIX/logs/php-fpm.pid)
./configure --prefix=/EBS/php \
--with-config-file-path=/EBS/php/etc \
--enable-fastcgi \
--enable-fpm \
--OTHERS

注:--enable-fastcgi \ 需要在--enable-fpm \的前面,否则,fpm不能编译上。

二.编译好php后,修改配置文件

vi /EBS/php/etc/php-fpm.conf

需要注意下面几处配置

<value name="listen_address">127.0.0.1:9000</value>

这个表示php的fastcgi进程监听的ip地址以及端口

<value name="user">nobody</value>
<value name="group">nobody</value>

表示php的fastcgi进程以什么用户以及用户组来运行,默认该行是注释掉的,需要打开

<value name="display_errors">0</value>

是否显示php错误信息

<value name="max_children">5</value>

最大的子进程数目

运行php-fpm:

php-fpm用一个程序来控制fastcgi进程,这个文件在$PREFIX/sbin/php-fpm

/usr/local/php/sbin/php-fpm

该程序有如下参数:

start 启动php的fastcgi进程

stop 强制终止php的fastcgi进程

quit 平滑终止php的fastcgi进程

restart 重启php的fastcgi进程

reload 重新加载php的php.ini

logrotate 重新启用log文件

也就是说,在修改了php.ini之后,我们可以使用

/usr/local/php/sbin/php-fpm reload

这样,就保持了在php的fastcgi进程持续运行的状态下,又重新加载了php.ini。

代码如下:

user www www;
worker_processes 10;
error_log logs/error.log notice;
pid logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
   use epoll;
   worker_connections 51200;
}
http
{
   include mime.types;
   default_type application/octet-stream;
   charset gb2312;
   server_names_hash_bucket_size 128;
   #sendfile on;
   #tcp_nopush on;
   keepalive_timeout 60;
   tcp_nodelay on;
   gzip on;
   gzip_min_length 1k;
   gzip_buffers 4 8k;
   gzip_http_version 1.1;
   gzip_types text/plain application/x-javascript text/CSS text/html application/xml;
   {
   listen 80;
   server_name 192.168.1.2;
   index index.html index.htm index.php;
   root /EBS/www;
   if (-d $request_filename)
   {
   rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
   }
   location ~ .*\.php?$
   {
   include fcgi.conf
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   }
   log_fORMat access '$remote_addr - $remote_user [$time_local] "$request" '
   '$status $body_bytes_sent "$http_referer" '
   '"$http_user_agent" $http_x_forwarded_for';
   access_log logs/access.log access;
   }
}

新建配置文件

代码如下:

/usr/local/nginx/conf/fcgi.conf

注:nginx自带了一个配置文件,/usr/local/nginx/conf/fastcgi_params,该配置文件缺少粗体字体的部分,会造成访问php文件时报404错误。

复制代码代码如下:

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;

四 配置XCache

安装xcache模块

wgethttp://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
tar -xvzf xcache-1.2.2.tar.gz
cd xcache-1.2.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-xcache --enable-xcache-optimizer
make
make install

计算密码的md5值

echo -n "passWord"|md5sum
5f4dcc3b5aa765d61d8327deb882cf99

配置XCache

;注:zend_extension,用来加载zend的扩展,是绝对路径, extension是相对路径,相对于extension_dir的相对路径,非zend扩展

如果你更改路径以后,一定要apachectl stop后再start,而不要restart。

vi /usr/local/php/etc/php.ini

添加:

代码如下:

[xcache-common]
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so
[xcache.admin]
; Change xcache.admin.user to your preferred login name
xcache.admin.user = "admin"
; Change xcache.admin.pass to the MD5 fingerprint of your password
; Use md5 -s "your_secret_password" to find the fingerprint
xcache.admin.pass = "5f4dcc3b5aa765d61d8327deb882cf99"
[xcache]
; Change xcache.size to tune the size of the opcode cache
xcache.size = 24M
xcache.shm_scheme = "mmap"
xcache.count = 2
xcache.slots = 8K
xcache.ttl = 0
xcache.GC_interval = 0
; Change xcache.var_size to adjust the size of variable cache
xcache.var_size = 8M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.test = Off
xcache.readonly_protection = On
xcache.mmap_path = "/tmp/xcache"
xcache.coredump_directory = ""
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
[xcache.coverager]
xcache.coverager = On
xcache.coveragedump_directory = ""

重启PHP模块

正常load之后,

在phpinfo显出的信息内

Zend这快应该会加上XCache的内容

另外两种加速模块:

在我们的测试中,效果都要好于xcache,这3中加速不能同时存在两种,有冲突。

1 apc

代码如下:

wget http://pecl.php.net/get/APC-3.0.19.tgz
cd APC-3.0.19
/usr/local/php/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-apxs=/EBS/apache/bin/apxs --with-php-config=/EBS/php/bin/php-config
make
make install
6.2 eaccelerator
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.zip
cd eaccelerator-0.9.5.3
/usr/local/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/EBS/php/bin/php-config
make
make install
vi php.ini
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

五、使用nginx对应多台facgi服务器

思路:前端一台nginx,用于做为负载均衡和处理静态页面。利用nginx的upstream模块来将php请求分发到后段的php-fpm服务器上。

后端多台php-fpm的服务器,只起php-fpm服务来处理php。

这样做减少了php-fpm上的nginx服务,相当于少了一层。

--结束END--

本文标题: 如何解决php fpm出错问题

本文链接: https://www.lsjlt.com/news/1042.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解决php fpm出错问题
    本文操作环境:linux5.9.8系统、PHP5.5版、Dell G3电脑。如何解决php fpm出错问题?nginx调用php-fpm出错解决方法和nginx配置详解这篇文章介绍了nginx调用php-fpm出错的解决方法,最后给出了ng...
    99+
    2014-09-15
    php fpm
  • 怎么解决php fpm出错问题
    这篇文章主要介绍“怎么解决php fpm出错问题”,在日常操作中,相信很多人在怎么解决php fpm出错问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决php fpm出错问题”的疑惑有所帮助!接下来...
    99+
    2023-06-26
  • 如何解决php 签名出错问题
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑如何解决php 签名出错问题问题描述:我正在使用 TCPDF 生成一个 pdf 文档并对其进行签名.TCPDF 本身只是调用 PHP 的 openssl_pkcs7_si...
    99+
    2021-10-30
    php 签名
  • 如何解决php-fpm启动不了问题
    重新下载一个64位的“ZendGuardLoader.so”。 将其放到“/usr/local/zend/”下。 重新执行“lamp php-fpm start”即可。 修复步骤 用file命令查看当前的ZendGuardLoader.so...
    99+
    2017-01-15
    php-fpm 无法启动
  • 如何解决php-fpm启动不了的问题
    本篇内容主要讲解“如何解决php-fpm启动不了的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决php-fpm启动不了的问题”吧!php-fpm启动不了的解决办法:1、重新下载一个6...
    99+
    2023-06-25
  • 如何解决php加密后出错的问题
    这篇文章主要介绍如何解决php加密后出错的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php加密后出错的解决办法:1、修改内容为“$where .= " AND o.order_status...
    99+
    2023-06-22
  • php-fpm报502问题的解决办法
    搭建lnmp完lnmp环境后,测试时出现502报错,看到这个问题,我立刻想到是php-fpm没有起来,但是我用 ps -ef | grep php-fpm 截取 php-fpm 的进...
    99+
    2022-11-12
  • 如何解决apache2.4 php5.6出错问题
    本文操作环境:windows7系统、PHP5.6版、DELL G3电脑Apache2.4+PHP5.6配置教程和问题Apache服务无法启动以及php配置文件不生效等的解决 初学php时用的是Apache2.2+php5.4+mysq...
    99+
    2014-10-28
    Apache2.4 PHP5.6
  • 如何解决php Composer出现SSL报错的问题
    这篇文章主要介绍了如何解决php Composer出现SSL报错的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。解决Windows下运行php Composer出现SSL...
    99+
    2023-06-22
  • 如何解决mysql出现10055错误问题
    这篇文章主要介绍如何解决mysql出现10055错误问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql出现10055错误的解决办法:首先查一下netstat有多少连接和等待...
    99+
    2022-10-18
  • 如何解决php 40001报错问题
    本文操作环境:Windows7系统,PHP7.4版,Dell G3电脑。如何解决php 40001报错问题?PHP 发送微信模板消息报40001 invalid credential, access_token is invalid or ...
    99+
    2021-10-22
    php
  • 如何解决php 500错误问题
    本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。如何解决php 500错误问题PHP与500错误PHP开发过程中经常会遇到返回500错误的情况,而且body体中也没有任何调试(可用)内容。这个时候你就需要慢慢调试了...
    99+
    2017-05-15
    php 500错误
  • 如何解决php 535错误问题
    本文操作环境:Windows7系统、ThinkPHP5版、DELL G3电脑如何解决php 535错误问题解决 TP5 模板不存在 app.php 535错误删除项目data文件夹内的runtime文件夹,然后在浏览器界面按ctrl+F清除...
    99+
    2021-12-11
    php 535
  • 如何解决php define 报错问题
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑如何解决php define 报错问题?define()方法定义ture后报错    在PHP中,通常情况下我们可以使用define()方法定义常量,同时还可以通过定义第...
    99+
    2016-01-30
    php define
  • 如何解决php redis502错误问题
    本文操作环境:Windows7系统、PHP5.5.30版、DELL G3电脑如何解决php redis502错误问题php redis set 时 nginx 502 解决PHP Version 5.5.30-1+deb.sury.org~...
    99+
    2017-09-28
    php redis
  • 如何解决php mail错误问题
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑如何解决php mail错误问题?php的mail()函数出错的问题<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1....
    99+
    2015-10-23
    php
  • 如何解决php cgi.exe 错误问题
    本文操作环境:Windows10系统、PHP7.1版、DELL G3电脑如何解决php cgi.exe 错误问题php-cgi.exe –应用程序无法正确启动运行php-cgi.exe并单击一个弹出对话框,显示以下错误消息:Applicat...
    99+
    2019-07-14
    php cgi
  • 如何解决php exec报错问题
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑如何解决php exec报错问题?PHP中exec()函数执行系统命令失败?0.说明在php中,我们可以使用exec()来执行系统命令,但有时我们会遇到exec()命令执...
    99+
    2020-05-31
    php linux exec
  • 怎么解决php上传文件出错问题
    这篇文章将为大家详细讲解有关怎么解决php上传文件出错问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php上传文件出错的解决办法:1、在php.ini配置文件中设置“post_max_size”的值;...
    99+
    2023-06-08
  • php出现http500错误问题的解决方法
    这篇文章给大家分享的是有关php出现http500错误问题的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php http500错误的解决办法:1、打开IIS,重新启动FastCGI;2、将“requir...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作