【问题标题】:Script killing too long process脚本查杀进程过长
【发布时间】:2012-06-14 09:46:35
【问题描述】:

我是一个虚拟主机所有者,目前我不知道为什么,但我有一些 php 脚本启动了好几个小时(作为个人已知的客户),所以我认为某处存在错误。

这些脚本正在占用 RAM 和交换空间...所以我正在寻找一种方法来列出进程,找到执行时间,如果执行时间超过 10 或 20 分钟,则一个一个地杀死它们。

我不是 bash 大师,但我知道 bash 和管道。我唯一不知道的是如何列出进程(执行时间和带有参数的完整命令行)。实际上,即使在顶部(然后是 c)中,php 中也没有参数:/

感谢您的帮助。

【问题讨论】:

  • 我是 IT 专业的学生。我成立了一个非营利组织,旨在提供免费/低成本的互联网服务。 1)我正在学习这些问题,2)我目前是系统管理员。
  • 这些php进程是如何创建的?你用的是 apache 的 mod_php、fastcgi、php-fpm 吗?也许ulimit 可以提供帮助。

标签: linux bash shell process


【解决方案1】:

如果您使用 mod_php 运行 Apache,您将看不到单独的 PHP 进程,因为该脚本实际上是在 Apache 进程中运行的。如果您作为 FastCGI 运行,您也可能看不到实际脚本执行的可区分 PHP 进程,尽管我没有 PHP/FastCGI 经验并且可能在这方面是错误的。

您可以设置max_execution_time 选项,但它可以在运行时通过调用set_time_limit() 覆盖,除非您在Safe Mode 中运行。但是,安全模式在 PHP 5.3 中已被弃用,在 5.4 中删除,因此如果您使用 5.4 或计划升级,则不能依赖它。

如果您可以与现有客户一起管理它(因为在某些情况下它需要对 PHP 代码进行重大更改),running PHP as CGI 应该允许您监控实际的脚本执行,因为每个 CGI 请求都会产生一个单独的 PHP解释器进程,您应该能够区分它们正在执行的脚本。但是请注意,CGI 是最不有效的设置(其他是 mod_php 和 FastCGI)。

【讨论】:

  • 感谢您的信息。好的...因此,设置 max_execution_time 将阻止大多数脚本。我们目前在 CGI 中,因为我们遇到了一些脚本的问题(比如 frapi,它使用 APC,在 FCGI 中什么都不做)。我们使用 suExec 将 PHP 作为 CGI 运行,我知道谁在运行脚本,但实际上我不知道是哪一个。如果我知道如何,也许我将能够追踪一个潜在的 nucked 脚本:/。谢谢。
  • 顺便说一句,max_execution_time 已经是 30 秒,安全模式已关闭。有时脚本仍在执行数小时......目前,服务器似乎很好。
  • 您如何确定脚本执行了几个小时?由于您作为 CGI 运行,您应该看到一个运行时间较长的单独 PHP 进程 — 您应该查看 ps aux 中的 START 列(这是进程启动时的挂钟时间)而不是 @ 987654329@(这是 CPU 时间,如果进程大部分时间处于空闲状态,它可能会很低)。
【解决方案2】:

您可以使用ps -aux 命令列出带有一些详细信息的进程。

您也可以查看ps man page

This 也可能会有所帮助。

【讨论】:

  • 我想过,但输出如下:clanrvvi 28303 0.6 0.1 167736 12968 ? S 11:59 0:00 /usr/bin/php 没有加载脚本,但是时间到了(0:00)
猜你喜欢
  • 1970-01-01
  • 2013-11-11
  • 2012-11-22
  • 1970-01-01
  • 2016-01-24
  • 2020-01-18
  • 2017-08-04
  • 2012-09-01
  • 2013-03-26
相关资源
最近更新 更多