2012-06-14 62 views
-1

我是虚拟主机用户,我不知道为什么现在,但我有被好几个小时推出(如personnaly知名客户)一些PHP脚本,所以我认为这是一个错误的地方。脚本杀死过漫长的过程

这些脚本是吃的RAM和交换。所以我在寻找一种方式来列出进程,找到执行时间,由1杀了他们1如果执行超过10或20分钟。

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

感谢您的帮助。

+0

既然你是一个虚拟主机,你不应该雇用一个系统管理员来处理这些问题吗? – lanzz

+1

我是IT专业的学生。我成立了一个旨在提供免费/低成本互联网服务的非营利组织。 1)我正在学习这些问题,2)我是系统管理员。 – Max13

+0

这些php进程是如何创建的?你使用的是Apache的mod_php,fastcgi,php-fpm吗?也许[ulimit](http://ss64.com/bash/ulimit.html)可以提供帮助。 –

回答

4

如果您正在使用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)。

+0

感谢您的信息。好吧...因此,设置max_execution_time将阻止大部分脚本。我们目前在CGI中导致我们遇到了一些脚本问题(如frapi,它使用APC,它在FCGI中什么都不做)。我们使用suExec作为CGI运行PHP,我知道谁在运行脚本,但我不知道哪一个是实际的。如果我知道如何,也许我将能够追踪一个潜在的嵌入脚本:/。谢谢。 – Max13

+0

顺便说一句,max_execution_time已经在30秒,安全模式关闭。有时候脚本仍然会执行几个小时...目前,服务器似乎没有问题。 – Max13

+0

您如何确定脚本正在执行几个小时?由于您以CGI身份运行,因此您应该看到一个运行时间很长的单独PHP进程 - 您应该查看'ps aux'中的“START”列(这是进程启动时的挂钟时间),而不是'TIME'(这是CPU时间,如果进程大部分空闲,可能会很低)。 – lanzz

1

可以使用ps -aux命令与一些详细信息列表的过程。

您还可以查看ps man page

This也可能有一定的帮助。

+0

我想过,但这里是输出:clanrvvi 28303 0.6 0.1 167736 12968? S 11:59 0:00/usr/bin/php没有关于脚本加载,但时间在那里(0:00) – Max13