【问题标题】:What is killing this process and how to stop it from doing so是什么杀死了这个过程以及如何阻止它这样做
【发布时间】:2015-06-27 09:29:49
【问题描述】:

作为流程自动化例程的一部分,我有一个 shell 脚本,它通过 CLI 执行多个 PHP 脚本。其中一个,当然是最后一个,非常非常长。我收到的代码库是一团糟,大部分 import.php 脚本和 ImportProduct.php 对象基本上是不可修改的。

上周我完成了将代码更新到 MySQLi 并开始测试并不断收到类似的进程终止消息。我已经挖掘了 Magento PHP 库、我自己的代码、原始代码,但找不到任何会导致它的东西。仅这种格式就让人相信是 PHP CLI 解释器、Linux 操作系统或 Apache(如果它甚至通过 Apache 运行,遗憾的是不是非常精通系统管理员)导致了终止。我 SSH 到远程服务器,但最后两行显示 SSH 本身没有超时。

通过 PHP CLI 的默认超时是没有,但是将其设置为 0 或 180 天没有区别。因此,我认为这个问题处于较低的水平。 请不要为 root 权限大喊大叫,这不是我的决定。

这是我的消息的一部分。第 5 行包含终止消息。

new_import_products.php: ET068FII.TXT: Processed 406085 records in 1686 queries. 
import.php: Begin
ImportProduct.php> start 1055398
import.php: done loadFile()
./executeFullUpdateImport.sh: line 58: 4908 Killed php -f import.php
executeFullUpdateImport> full update/import completed
executeFullUpdateImport> Performed in 384m, 56s.\n\n
[root@stinedev import]# 
[root@stinedev import]# ls

搜索这样的东西非常无益。谷歌返回了 90 亿页关于如何杀死进程的页面……不管我使用什么术语组合,都不能让一个进程存活(诚然,我可能问错了问题)。

【问题讨论】:

  • 可能是 linux OOM 杀手 - 内存不足。我敢打赌,您的脚本会执行某种foreach,它不会在每次迭代后清理其变量,并且它处理的项目越多,它使用的 RAM 就越多。 en.wikipedia.org/wiki/Out_of_memory
  • 会写入系统日志@ceejayoz 吗?
  • 我会将输出转储留给客户端。现在它只是输出到 stdout/stderr。 shell 脚本本身只不过是对其他文件的一堆调用,即几个其他的 shell 脚本、jar 文件和 php 文件。根本没有变数。我在 PHP 代码中非常小心地消除了全局变量,甚至成员变量,并确保 MySQL 资源尽快释放。
  • 通常情况下,OOM 会出现在系统日志中的某个地方。
  • @ceejayoz 找到它后,/var/log/messages[-date],我确实找到了一条 OOM 消息。我猜这就是我需要找到的:gist.github.com/anonymous/d667e8455adfe728e838

标签: php linux bash apache centos


【解决方案1】:

我遇到过这种情况。一个可能的原因是 oom 杀手。这很容易检查。 dmsg 将打印此行为。 由于其他一些用户进程发送信号杀死,我的解决方案是使用内核试听。 google auditctl 第一项。

【讨论】:

  • 如果你把它充实一点,我会接受它作为答案,但没有一些解释它太模糊了。
【解决方案2】:

这个问题的答案是它确实是一个内存不足 (OOM) 错误。希望消息在被杀死时更具描述性。

日志文件依赖于平台,但在 CentOS 上它位于:

/var/log/messages[-date]

其中 [-date] 是可选的 YYYYMMDD 日期戳。违规条目将如下所示:

... some log stuff here ...
Apr 13 21:26:23 MACHINE kernel: php invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
Apr 13 21:26:23 MACHINE kernel: php cpuset=/ mems_allowed=0
Apr 13 21:26:23 MACHINE kernel: Pid: 1337, comm: php Not tainted 2.6.32-431.29.2.el6.x86_64 #1
Apr 13 21:26:23 MACHINE kernel: Call Trace:
... more log stuff here ...

其中 MACHINE 是您的装备的名称。

PS:感谢 cmets 的帮助。如果没有帮助,我将无法回答这个问题,并且会从他们那里选择一个答案,但这是不允许的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多