我在使用 Apache 的 Windows 2003 服务器上运行 PHP5.3.3 时遇到一个奇怪的问题。
有时已启动的脚本完成了它们正在执行的工作,但进程并未关闭。
这可能会留下大量孤立的 php-cgi.exe 进程在运行,但显然不会执行任何操作(不使用任何 CPU 时间)。
一段时间后,这些累积起来并导致服务器出现性能问题。
PHP 脚本本身似乎没有问题,因为正常情况下它运行和关闭都很好,只是有些地方没有,而且似乎也没有任何明显的模式。
此外,我们在从 PHP4 迁移到 PHP5.3 之前没有遇到这个问题。
有什么想法吗?感觉好像我在 Apache 或 PHP 的某个地方出错了?我没有使用 apache dll 来运行 PHP,这对我来说也不是一个选项。
提前致谢
最佳答案
这可能有三个原因,既然你说“孤儿”,我怀疑它可能是第二个。
启动 php-cgi 时,php 在线程控制管理器上启动。在 unix 上,您通常只让该管理器产生一个子线程,因为 apache 已经在管理进程。
在初始请求完成后,此过程将重新用于新的传入请求,因为它可以节省时间(解析 .ini 文件、加载库等)。在多次重用之后,这个进程就会被杀死,如果需要的话会产生一个新的进程。
如果是这样的话,其实也是一种很好的行为。否则页面加载将花费相当长的时间。
但是,由于存在性能问题,我建议检查以下内容:
如果这些都没有帮助,您的启动脚本可能有问题。当我第一次开始使用带 fcgid 的 apache 时,我自己编写了 php-cgi 的启动脚本,而不是复制。我忘记了启动 php-cgi 的命令格式中的一个小exec。
这导致 cgi 作为脚本进程的子进程启动。
+apache2
|-+shell-launch-script.sh
|-+php-cgi
这意味着一旦 apache 决定终止脚本,因为它有 served enough pages ,脚本的子进程被孤立并成为 init 进程的直接后代。一旦到达那里,cgi 进程就永远不会终止并填满内存。
exec 命令使 php-cgi 进程接管 shell 脚本进程并在其位置运行。因此,当 apache 向其子进程发送终止信号时,php 被终止,而不仅仅是启动脚本。
我怀疑您的启动脚本也可能是这种情况。
您可以验证 Process Monitor 是否属于这种情况。 .我不知道 Windows 进程管理的确切工作原理,因此您可能会得到错误的否定确认(意思是,它们仍然是 Apache 进程的子进程,但 Apache 无法向它们发出终止信号)。
如果您使用的是 fastcgi 而不是 fastcgid,您可能会遇到文档中提到的问题:
Under Windows, there are no signals. A shutdown event is used instead. This is setup by mod_fastcgi and honored by the latest version of the C, C++, and Perl application library. If your using a library which doesn't support this, your application will not get shutdown during an Apache restart/shutdown (there's room for improvement here).
来自fastcgi documentation在注释部分。
免责声明:这些观察来自 Unix 系统,但我的猜测是,CGI 部分在 Windows 上应该以相同的方式工作。
关于脚本完成执行后 php-cgi 进程未关闭 - PHP5.3.3、Win Server 2003、apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3512399/
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
我想通过控制台手动创建一个用户:User.find_or_create_by(email:"user@mail.com",first_name:"Stan",last_name:"Smith",password:"password",password_confirmation:"password",confirmed_at:Time.now)我在过去的项目中多次这样做,但这次没有用。它没有获取Devise密码模型属性,所以这是我得到的错误:PG::UndefinedColumn:ERROR:columnusers.passworddoesnotexist我有Rails4.1.4和Dev
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
更新:当输入“passenger-memory-stats”时,我显示:---Passengerprocesses---Processes:0我该如何解决这个问题?为什么即使我在httpd.conf中添加它并重新启动apache,passenger也不会启动?我无法让PhusionPassenger在服务器上运行RubyonRails。我已经按照Phusion网站上的所有说明安装了passenger并修改并创建了ApacheVirtualHost以指向新目录并验证所有.conf文件都已成功加载。还加载了httpd-Mpassenger_module。我还在本地主机上成功运行了Passe
我最近将我的Ruby1.9.3升级到2.0.0并感到惊讶;CGI::escapeHTML现在转义单引号,意思是:CGI::escapeHTML("'")=>"'"最奇怪的是,当定义escapeHTML时,一切似乎都很好,复制方法的定义给出了正确的结果(它不转义单引号)有人知道这件事吗?谢谢, 最佳答案 实际上,它执行2.0源代码中定义的操作。但你是对的,实现从1.9.3更改为2.0。1.9.3source:defCGI::escapeHTML(string)string.gsub(/[&\"]/,TABLE_FOR_ESCA
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?
我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob
Lisp是否适合Web编程/应用程序(交互式),就像ruby和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common
我的带有apache+passenger的Rails应用程序一开始工作得很好。但是,运行一段时间后,遇到如下错误:Theapplicationspawnerserverexitedunexpectedly:Unexpectedend-of-filedetected.我查看了apache的错误日志,发现了这个错误:../gems/passenger-3.0.7/lib/phusion_passenger/utils.rb:716:[BUG]Segmentationfault似乎乘客有内存问题。有人可以帮忙吗?谢谢。 最佳答案 最可能的
项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。 因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不