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')