502由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而导致的错误

502由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而导致的错误,php,nginx,Php,Nginx,我已经看到很多帖子,其他人由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而得到502错误,但不幸的是,没有一个提供的解决方案修复了我的错误。我正在获取内核转储的回溯,同时也在使用Valgrind Memcheck,但同时,我只想在这里发布,看看你们是否有任何提示或过程来调试这个 发生的情况如下:各种脚本在某种随机位置崩溃,但大多数时间是在主脚本退出/返回(没有错误)之后,即调用类析构函数/关闭方法,并执行主脚本中的最后一行 Nginx错误: 2015/06/23 03:57:

我已经看到很多帖子,其他人由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而得到502错误,但不幸的是,没有一个提供的解决方案修复了我的错误。我正在获取内核转储的回溯,同时也在使用Valgrind Memcheck,但同时,我只想在这里发布,看看你们是否有任何提示或过程来调试这个

发生的情况如下:各种脚本在某种随机位置崩溃,但大多数时间是在主脚本退出/返回(没有错误)之后,即调用类析构函数/关闭方法,并执行主脚本中的最后一行

  • Nginx错误: 2015/06/23 03:57:37[错误]10930#0:*318186 recv()在从上游读取响应头时失败(104:由对等方重置连接),客户端:68.71.252.49,服务器:,请求:“POST/rest/user-logout.php HTTP/1.1”,上游:fastcgi://unix:/var/run/php-fpm/php fpm.sock:,主机:“xyz”
  • php fpm错误: [18-Jun-2015 04:14:51]警告:[游泳池www]child 22018在启动548.942578秒后根据信号6(SIGABRT)退出
重要注意事项

  • 服务器未处于高负载状态(从不获取“服务器已达到pm.max_子项设置”)
  • 将pm.max_请求减少到较低数量可降低崩溃频率
php fpm状态似乎正常。我已经尝试了所有的设置组合,所以我不会在这里发布它们,但我会发布你需要知道的任何东西

下面是理解构造和用法的示例代码片段:

class Job {
  function execute() {
    // The following code are in separate classes but listed here for easier to follow.
    $cache = new Memcached();
    $cache->addServer(...);

    $link = mysqli_init(...);
    mysqli_real_connect($link, ...);

    $res = $cache->get(...);
    if (!$res) {
      $res = mysqli_query($link, $sql);
    }
    // Process the result.
  }
}
$job = new Job();
$job->execute();
// Most of the time, it crashes after the last line (i.e. after invoking destructor/shutdown hook).
  • Nginx=>1.6.2
  • PHP/PHP fpm版本=>5.3.19
  • libcouchbase版本=>2.5.0
  • memcached版本=>2.1.0
  • MySQL客户端API版本=>5.5.28
-坦率的


另外,我将在单独的主题中发布这些问题:脚本退出/返回后(除了保存会话之外)会发生什么?换句话说,当php fpm返回到池中时,它对进程做了什么(例如类状态、静态变量)?我要么显式关闭数据库连接,要么它们将自动关闭。

没有代码意味着我们不知道您在说什么。你有没有办法把它缩小到你正在调用的特定模块、代码块或函数?这相当于“救命,医生,很痛,告诉我怎么了!”看看访问不同的端点是否比其他端点更频繁地触发它。你至少需要把范围缩小到某个方面。你们能在其他环境中重现吗?公平评估-我已经用代码片段更新了我的帖子。是的,我试图通过一次删除一个依赖项来缩小范围(假设我无法获得回溯跟踪或Memcheck)。是的,某些端点比其他端点导致更多的崩溃。它们当然是不同的代码,但它们的结构和用法(DB、cache)非常相似。不,我不能在我们的dev env中复制这一点,很不幸,这是不同的。我一直试图让他们都一样,但有困难。这不是我想要的位置,但这个问题太笼统和开放,无法真正回答。继续砍掉那些不会导致它崩溃的东西,你最终会有希望留下一个小的崩溃部分。