经测试,支持Win32和Linux-x86平台。对于用php的人,有了这个东西来维护一定数量的进程,就能制服经常崩溃退出的php-cgi啦!!!
Usage: xxfpm path [-n number] [-i ip] [-p port]
Manage FastCGI processes.-n, –number number of processes to keep
-i, –ip ip address to bind
-p, –port port to bind, default is 8000
-u, –user start processes using specified linux user
-g, –group start processes using specified linux group
-r, –root change root direcotry for the processes
-h, –help output usage information and exit
-v, –version output version information and exit
第一个写得比较标准的终端应用程序,我是看了cygwin的里的一些源代码,然后学会了如何使用getopt,算是写得比较标准的,但是代码也不短。
使用例子:
xxfpm z:/php5/php-cgi.exe -n 5 -p 8080
有人问,如何给程序加入参数?这个不难,使用双引号即可,路径要用”/”而不用”\”。例如要指定php.ini的路径,可以用下面例子:
xxfpm “z:/php5/php-cgi.exe -c z:/php5/php.ini” -n 5 -i 127.0.0.1 -p 8080
如何维护进程:
Windows上使用CreateProcess创建进程,使用WaitForSingleObject等待进程结束;Linux上使用fork和execl创建进程,使用waitpid等待进程结束。Linux的版本多了在创建子进程的时候可以设置进程限制,能够以受限用户方式来运行。
当进程管理器被关闭的时候,它所创建的所有子进程也必须被关闭。Windows上使用JobObject这个东西来把子进程与管理器的进程产生关联,感谢iceboy提供的资料!Linux上通过捕捉关闭信号,然后给所有子进程发送SIGTERM来结束子进程。详见源代码!!!
点击下载:
GitHub地址:
sofa
不错
不错!
虾的coding能力就是强
跟你学习了:-)
楼主怎么用吖!不懂,用nginx配置php-cgi.exe总自动退出
是个命令行程序来的,参照本文提及的例子呀!
用lnmp偶尔502用这个能解决不?
是什么引起502错误的呢?代理服务器?
不是代理服务器,lnmp。org的套件,502后重启下php就好了,不知道什么原因。。。
难道是所有php-cgi进程崩溃退出后,没有重新打开?
你可以试试xxfpm维护一下php-cgi的进程呀,用参数设置一下ip和端口就行了。
ok,谢谢,有空试试
怎么不把设置端口跟ip放出来设置呢,放里面每次修改还要编译很麻烦的
有参数设置的嘛!!!
xxfpm z:/php5/php-cgi.exe -n 5 -i 127.0.0.1 -p 8080
不好意思,呵呵,之前没有看见,后来仔细看-h 看见了,
博主辛苦了,小程序很有用呢~
很不错的软件,找了很久了,谢谢博主。
博主您好,我现在也是遇到这个问题,但我不太懂技术,我想知道您这个如何使用呢? 大家看了别笑。。。。
我在cmd里面输入命令行,老是弄不对,能提点一下到我邮箱么,谢谢!
文章里不是写了使用说明吗???
按着里面的例子做。
还是不行的话,代码能不能看懂呢?也不是很长,就是注释少了点唉。
最后弄明白了用法,现在已经用上。感谢
用上,非常好,多谢。。。。终于解决了自动退出问题。
谢谢博主!想请教一个问题,xxfpm这个FastCGI进程管理器是否能够支持自动新增php-cgi.exe线程,以适应请求数?
你好,不会的,只能维持一定数量的进程。你可以修改代码加入这一个新功能的。
就我目前测试,该程序不支持Windows 7 64Bit环境,希望能够改进,谢谢
要支持windows各种版本,是很有难度的,因为其中用到了win32 api,各个版本都有差异。
唉,大家还是转投Linux吧……
太遗憾了。。。
可以支持 win7 64位啊, 我现在就是, 已经使用中。
问一下 能否隐藏cmd窗口 ,一直开着很烦。有没有隐藏的命令???望博主赐教
好像写windows服务不是一般的麻烦。。。所以还没时间帮的上忙咯!
请问一下,能否限制php-cgi的进程数量呢?
没明白你的意思,这个软件是固定进程数量的。通过-n参数来指定。
呵呵,就是说能不能使php-cgi.exe进程不超过某一个数量。
我现在遇到的问题是php-cgi正常情况10个左右,但是会突发性瞬间出现50~80个php-cgi进程。
我研究如何把这个进程限制在一个数值下找到这里的
很好,已经用于生产环境了,win2003下Nginx和xxfpm都以服务的方式运行了。
观察几天看有没有什么问题。
谢谢小虾
嗯,希望看到你的测试结果,方便完善这个程序
请问能不能使php-cgi.exe进程不超过某一个数量。
我现在遇到的问题是php-cgi正常情况10个左右,但是会突发性瞬间出现50~80个php-cgi进程。
我研究如何把这个进程限制在一个数值下找到这里的
缺少pthreadgc2.dll
Widnows缺少posix thread库在这里下,http://sourceware.org/pthreads-win32/
Pingback引用通告: Linux下让父进程结束后,子进程自动结束 « Xiaoxia[PG]
为什么要使用 /bin/sh 去执行 cgi 程序呢?
哈,这个是fcgi,跟cgi不一样的。
话说,我代码里用/bin/sh执行别的程序了么?
是啊,使用 scgi or fcgi 转 cgi 的方式,由 scgi to cgi 中间件通过子进程去执行 php-cgi 解释执行 php 脚本,效率应该是差不多的吧。
Pingback引用通告: 用iptables让SSH服务对陌生人说不 « Xiaoxia[PG]
—————————
xxfpm.exe – 系统错误
—————————
无法启动此程序,因为计算机中丢失 pthreadGC2.dll。尝试重新安装该程序以解决此问题。
—————————
确定
—————————
找到了,在这里可以下载 ftp://sourceware.org/pub/pthreads-win32/dll-latest/dll/x86/
打算封装个本地环境
同一个端口 5个进程 有用?
嗯!!!多进程工作嘛。一个出问题了,还有别的备用的。
我的服务器用了你的xxfpm,还配合了RunHiddenConsole把命令窗口隐藏,startPHP.bat是这么写的。没什么问题吧?
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9000
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9001
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9002
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9003
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9004
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9005
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9006
D:\webser\RunHiddenConsole.exe D:\webser\xxfpm.exe D:\webser\php5317\php-cgi.exe -n 2 -i 127.0.0.1 -p 9007
能交流一下webserver如何支持fastcgi吗
自己写了个webserver,但不知如何使用这个进程管理器(如何与之通信),如何支持fastcgi,希望指引
Hi,
给你以前我研究的资料!
http://xiaoxia.org/2009/10/05/fastcgi-protocol-analysis/
这个已经看过,但还没有头绪,看似比HTTP协议简单点
是C的,我的WEBSERVER是powerbasic写的,
对比测试了下,你那个性能还有待提高.我的那个性能比IIS Apache 甚至比NGINX都要快.
我对PHP的支持是通过ISAPI方式,但为服务器安全稳定性,所以在考虑FASTCGI,但据说FASTCGI方式的性能比ISAPI方式不占多少优势,只是稳定性提高一些,ISAPI方式如果DLL出错易导致WEBSERVER崩溃,但我还做了一些处理,DLL中的工作线程就算发生了一般内存保护性非法访问异常(除了栈溢出等),不会导致WEB崩溃.稳定性和性能都有了保障.
你好,我用的Intel Xeon E5405(8线程),2G内存,Win2003,Nginx1.2.5,PHP5.4.9.PHP用您的xxfpm维护,16个进程(-n 16)。160人登录,Nginx错误日志有17行 [error] 1768#3848: *1585 WSASend() failed (10054: An existing connection was forcibly closed by the remote host) while sending request to upstream。
你好,应该是php-cgi进程关闭了才出现这条错误?
我也遇到了一样的问题,一直都是用xxfpm,之前都是好好的,前两个月开始不知道为何就开始出现这个问题,就是502 bad gateway。php版本比较老,5.2.17。试过增加fast-cgi缓存了。每次出现问题时php-cgi进程还在的,重启xxfpm就暂时恢复了,但不久就又会出现问题。
我在windows 2008 R2下使用xxfpm,关机重启时,提示“php-cgi.exe – 应用程序错误: 应用程序无法正常启动(0xc0000142)。”,造成关机失败,请问是什么原因
应该先关掉xxfpm。
Pingback引用通告: 历经磨难将博客从Bo-Blog转换到WordPress | 陈叨叨·幻色
博主,为啥不关掉或者隐藏cmd窗口呢??这样的牛X程序都写了,多加几点代码把当前窗口也隐藏掉吧。
Pingback引用通告: Windows+Nginx+Mysql+PHP环境php-cgi.exe进程自动关闭,退出 | Me
太赞了,如果能集成 RunHiddenConsole 的功能(比如说带一个参数就自动隐藏窗口),并且可以解决关机时不先关 xxfpm 就出错的情况就完美了。
我在window7 32位系统上使用的时候用xxfpm启动cgi。window会报cgi停止工作。xp或2003完全正常测试php的版本的是5.2.9
以下问题的环境在window7 32Bit WEBSERVER:nginx1.6.2 PHP:php5.3.29报告如下错误,
问题签名:
问题事件名称: APPCRASH
应用程序名: php-cgi.exe
应用程序版本: 5.3.29.0
应用程序时间戳: 53ee40b0
故障模块名称: php-cgi.exe
故障模块版本: 5.3.29.0
故障模块时间戳: 53ee40b0
异常代码: c0000005
异常偏移: 00001d29
OS 版本: 6.1.7601.2.1.0.256.1
区域设置 ID: 2052
其他信息 1: 0a9e
其他信息 2: 0a9e372d3b4ad19135b953a78882e789
其他信息 3: 0a9e
其他信息 4: 0a9e372d3b4ad19135b953a78882e789
虾哥,PHP5.6已经不能用了,劳驾百忙之中抽空的时候升个级吧!
不能用是什么原因呢,你可以把问题详细列在这里 😀
与PHP版本应该无关,具体是什么原因也没有找到规律,今天又在一个人的电脑上发现此类问题了,就是php-cgi进程在不断报错死掉,然后新的cgi进程被创建出来,cpu使用率飙升。刚做完的win10系统第一个就是装的php环境,仅在一台电脑上发生了,其它电脑没事。好像在进程中有个w开头的一个系统报错的程序在不断出现,应该是每次cgi死掉的时候就出现一次。
问一下怎么弄成服务。每次只有登陆后才能用。好麻烦。
感谢博主。
window2008 nginx+php-cgi php经常莫名退出,试下您这个好不好用
Pingback引用通告: Windows php-cgi | IT民工的博客
怎么关掉 xxfpm 啊,没有命令啊,然后关闭进程是关不了的。。
taskkill /F /IM xxfpm.exe > nul
关掉了。。。一直在关php-cgi去了,难怪关不了
感谢博主!您的程序解决了我遇到的问题!
Pingback引用通告: Day 2 – php-cgi自动退出解决办法 – CHIKUN.TECH
Pingback引用通告: 解决windows下php-cgi进程经常自动关闭 - 锅子博客
Pingback引用通告: wnmp不同路径部署多个php博客 - SunSeekerX