502由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而导致的错误
我已经看到很多帖子,其他人由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而得到502错误,但不幸的是,没有一个提供的解决方案修复了我的错误。我正在获取内核转储的回溯,同时也在使用Valgrind Memcheck,但同时,我只想在这里发布,看看你们是否有任何提示或过程来调试这个 发生的情况如下:各种脚本在某种随机位置崩溃,但大多数时间是在主脚本退出/返回(没有错误)之后,即调用类析构函数/关闭方法,并执行主脚本中的最后一行502由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而导致的错误,php,nginx,Php,Nginx,我已经看到很多帖子,其他人由于PHP与信号6(SIGABRT)或11(SIGSEGV)崩溃而得到502错误,但不幸的是,没有一个提供的解决方案修复了我的错误。我正在获取内核转储的回溯,同时也在使用Valgrind Memcheck,但同时,我只想在这里发布,看看你们是否有任何提示或过程来调试这个 发生的情况如下:各种脚本在某种随机位置崩溃,但大多数时间是在主脚本退出/返回(没有错误)之后,即调用类析构函数/关闭方法,并执行主脚本中的最后一行 Nginx错误: 2015/06/23 03:57:
- 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_请求减少到较低数量可降低崩溃频率
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中复制这一点,很不幸,这是不同的。我一直试图让他们都一样,但有困难。这不是我想要的位置,但这个问题太笼统和开放,无法真正回答。继续砍掉那些不会导致它崩溃的东西,你最终会有希望留下一个小的崩溃部分。