【问题标题】:How can diagnose a Segmentation fault on a CentOS production server?如何诊断 CentOS 生产服务器上的分段故障?
【发布时间】:2020-03-23 18:29:54
【问题描述】:

我们有几个可以从 CLI 运行的 PHP 脚本。这两者都可能需要几个小时才能完成并且历史运行正常(有时需要增加内存限制)。但是,在我们的生产服务器上,脚本会在相对较短的一段时间后停止运行并出现段错误:

/home/*******/bin/runlive: line 3:  9558 Segmentation fault      php 
 $HOME/********/sites/live/index.php" $*

(runlive - 只是设置一个路径) 我们尝试在具有相同数据库数据和代码库的不同服务器上运行它,并且没有得到相同的错误。 我们已尝试将生产服务器移至新 VM 以降低硬件成本,但这并没有解决问题。 我们尝试使用“catchsegv”实用程序来输出有关段错误的信息:

sudo /usr/bin/catchsegv runlive [script name] > catchsegv.txt

但这并没有输出任何东西。 如果我在同一个数据集上运行这些脚本,它在处理用户记录时并不总是在同一点失败,我认为这是一个数据问题。

任何有关如何诊断此问题的想法,非常感谢。

【问题讨论】:

  • 这是面向互联网的吗?您是否考虑过聘请渗透测试员?
  • “我们已尝试将生产服务器移至新 VM 以降低硬件成本”——您怎么知道新 VM 没有在完全相同的物理硬件上运行?跨度>
  • Employed Russian - 是的,你是对的,这是有可能的,但我们的托管服务提供商执行了这项任务,事实上,建议它排除硬件故障,所以我希望他们使用新的硬件 - 我会查询这个。
  • Stark - 我不确定渗透测试人员在这种情况下会如何提供帮助,但无论如何,我们最近让渗透测试人员进行测试,因为它是一个面向 Web 的站点。此外,这些 CLI 脚本不使用 Apache 而只使用 PHP,所以再次不确定它们的用途是什么?
  • 在生产环境中运行时的主要区别在于服务器不断受到攻击。这就是我建议渗透测试的原因。

标签: php linux segmentation-fault


【解决方案1】:

关于如何诊断的任何想法

有几种可能:

  1. 硬件不好
  2. 软件不好

不良软件可细分为:

  1. 错误的库组合(错误的版本组合、powned 服务器等)
  2. 不良环境(例如特定主机名或安装路径)

您想使用divide and conquer 方法来消除可能性。

您已经采取了消除硬件的步骤,但这还没有完全定论。

您可能需要执行以下操作:

构建另一个虚拟机(最好在您知道在不同物理机器上运行的地方),使用完全相同所有已安装软件包的相同版本,使用受信任的 来源(不要只是从原始机器复制包)。

检查崩溃仍然重现的天气。如果他们这样做了,那么您的原始服务器可能没有被占用,并且主机名可能无关紧要。

如果崩溃没有重现,那么您已经淘汰了 2.1(错误的版本组合),现在需要仔细检查两台机器之间的差异。

继续划分问题,直到找到根本原因。

或者您可以采用自下而上的方法:在调试器下运行php 二进制文件,重现崩溃,查找具有类似堆栈跟踪的上游错误报告,对这些错误应用修复(如果您发现任何此类错误)等。

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多