PHP 致命错误:require():无法解锁 pthread 锁

Posted

技术标签:

【中文标题】PHP 致命错误:require():无法解锁 pthread 锁【英文标题】:PHP Fatal error: require(): unable to unlock pthread lock 【发布时间】:2012-11-09 21:00:49 【问题描述】:

我在 Debian Linux 上使用 LAMP。 Apache 2.2.22-12,php 5.4.4。

有时我收到此错误,然后我无法重新加载页面或打开页面,其中包括带有此错误的文件。出现此类错误后,我无法重新启动 apache

重新启动网络服务器:apache2(98)地址已在使用中:make_sock:无法绑定到地址 [::]:80

(98)地址已在使用中:make_sock:无法绑定到地址 0.0.0.0:80 没有可用的监听套接字,正在关闭

无法打开日志

动作“开始”失败。

Apache 错误日志可能包含更多信息。 失败!

在 apache 日志文件中:

[Wed Nov 21 15:07:55 2012] [warn] 子进程 4020 仍然没有退出,发送一个 SIGTERM

[Wed Nov 21 15:07:55 2012] [warn] 子进程 4021 仍然没有退出,发送一个 SIGTERM

[Wed Nov 21 15:07:55 2012] [warn] 子进程 4022 仍然没有退出,发送一个 SIGTERM

[Wed Nov 21 15:07:57 2012] [error] 子进程 1309 仍然没有退出,发送 SIGKILL

[Wed Nov 21 15:07:57 2012] [error] 子进程 1310 仍然没有退出,发送 SIGKILL

[Wed Nov 21 15:07:57 2012] [error] 子进程 1311 仍然没有退出,发送一个 SIGKILL

和主机日志:

[2012 年 11 月 21 日星期三 12:21:24] [错误] [客户端 127.0.0.1] PHP 致命错误:require():无法解锁 ~/www/yii/yii-1.1.11.58da45/ 中的 pthread 锁framework/base/CApplication.php 第 127 行

$config=require($config);

或者:

[2012 年 11 月 14 日星期三 21:04:26] [错误] [客户端 127.0.0.1] PHP 致命错误:require_once():无法在 ~/projects/politiya/index.php 第 14 行解锁 pthread 锁

有:

require_once($game_loader);

我已经删除了 php-apc,现在 lamp 工作正常。

【问题讨论】:

某事锁定了 apache 子节点,阻止它退出,并阻止 apache 重新启动/重新绑定到端口 80,因为来自前一个实例的子节点仍被绑定。没有任何代码,我们无法为您提供帮助。 这个错误可以链接到任何带有 php-require 的行 define("GAME_PATH", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'game'); define("ENGINE_PATH", dirname(__FILE__) . DIRECTORY_SEPARATOR . 'engine'); $config = ENGINE_PATH . '/config/game.php'; $game_loader = ENGINE_PATH . '/loader.php'; 看起来像是与 apc 相关的东西。您的确切错误消息显示在此处:uni-jena.de/bin/tool/APC/APC/apc_pthreadmutex.c 所以,出现这个错误后启动 apache 的唯一方法就是重启所有系统,这不是很好 【参考方案1】:

修复

正如here所提到的,我不得不快速卸载并重新安装apc(字面意思是5s):

1 sudo pecl uninstall apc

2 sudo pecl install apc

BUT 将已为 pthread 互斥锁填充的 no 更改为 yes

AND将已经为pthread读/写锁填写的yes更改为no

【讨论】:

谢谢,它适用于 APC 3.1.13。我以前有很多死锁,现在没有了。【参考方案2】:

由于 APC 中的“死锁错误”而发生此错误。 php bug report page 说,此错误已在 APC 3.1.8 中修复

我们还可以看到 APC 更改日志here

【讨论】:

【参考方案3】:

仅供参考(针对 OMG 关于 APC 版本错误的评论),我正在运行 APC 3.1.13 和 PHP 5.4.17,但我仍然遇到了错误:

unable to obtain pthread lock (EDEADLK)

【讨论】:

我遇到了同样的问题,这对于 APC 3.1.13 是可修复的,请参阅答案 here【参考方案4】:

这意味着一些正在运行的进程正在使用此端口,因此请尝试终止该进程

喜欢获取过程

例如:ps -ef | grep httpd

然后杀死进程

例如 kill -9 进程 ID

-----------或----------

80 端口被另一个服务使用,因此找到并更改 system-config-httpd.conf:system-config-httpd.conf system-config-httpd.conf。所有这一切,重新启动httpd: /etc/init.d/httpd 启动

【讨论】:

以上是关于PHP 致命错误:require():无法解锁 pthread 锁的主要内容,如果未能解决你的问题,请参考以下文章

安装 Sylius 时出错:“PHP 致命错误:require():无法打开所需的 autoload.php”

PHP致命错误:require_once():无法打开所需的'Mail.php'(include_path ='。:/usr/share/pear:/usr/share/php')

PHP目录警告和require的致命错误

PHP致命错误无法打开所需文件

require_once() 中的 PHP 致命错误可以 n

无法激活插件,因为它触发了致命错误:意外的“require_once”