php apc 502,【案例】小心,apc可能导致php-fpm罢工!
最近访问网站,发现出现了502错误。一般出现502错误,都是php-fpm 进程处理请求时出现异常导致的。
首先,查看了php-fpm 的进程数。发现php-fpm的进程数已经到达了php-fpm.conf中设置的最大值。最近流量没有大的变动,这么多php-fpm进程,肯定有问题。
然后,用pstack命令查看这些php-fpm进程都在干啥。
根据上面的堆栈信息,我们可以肯定php的apc模块申请互斥锁权限时,一直获取不到互斥锁权限,一直等待,导致卡死了。
接下来,我们查下,是什么导致apc模块一直拿不到互斥锁权限。我们使用gdb排查,最终查出互斥锁的权限被进程号11274的进程占用着。查杀步骤如下:
那么为啥11274进程一直占用互斥锁权限,不释放呢?最终发现这个进程已经退出了。11274的进程为啥会退出呢?在php-fpm 的日志中找到了答案。
[18-Feb-2014 15:48:45] NOTICE: [pool www] child 11274 started
[18-Feb-2014 15:48:45] WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
显然,11274进程运行过程中遇到了段错误,导致进程异常退出了。继续追查,发现是php的hsf扩展在启动初始化的时候遇到内存问题,导致段错误。
现在原因已经很明确了,是因为php扩展hsf启动的时候发生内存错误,导致php-fpm进程异常退出。退出的进程当时拥有apc的互斥锁。但是退出时,由于是异常退出,没能释放互斥锁。导致php-fpm其他进程无法获取apc的互斥锁。导致死锁。
那么如何解决呢?
1.与惠新宸(apc维护者之一)沟通,他建议不要再使用apc,建议换成opcache。因为apc已经基本不再维护。之前也做过opcache和apc的对比。可以看下这篇文章。
php的 zend opcache VS apc 性能比较
2.hsf相关的问题,已经提交相关开发人员去完善。
3.如果你对apc情有独钟,不离不弃。那建议看看下面的文章,自己尝试修改下源码修复这个问题。
https://bugs.php.net/bug.php?id=46025
https://bugs.php.net/patch-display.php?bug_id=59281&patch=APC-3.1.9-bailout_deadlock.patch&revision=latest
php apc 502,【案例】小心,apc可能导致php-fpm罢工!相关推荐
- Windows APC学习笔记(一)—— APC的本质备用APC队列
Windows APC学习笔记(一)-- APC的本质&备用APC队列 基础知识 APC的本质 APC队列 APC结构 分析 KiServiceExit 总结 备用APC队列 挂靠环境下Apc ...
- KingbaseES V8R6 集群运维案例 -- 磁盘空间问题导致集群故障
某商业银行生产系统KingbaseES读写分离集群主库出现故障,导致集群主备发生切换.客户要求说明具体的原因. KingbaseES读写分离集群基本信息: KingbaseES集群信息 操作系统 ...
- 案例分享|地弹现象导致DCDC电源芯片工作不正常
很多读者都应该听过地弹,但是实际遇到的地弹的问题应该很少.本案例就是一个DCDC电源芯片的案例. 1. 问题描述 如下图1 ,产品其中一个供电是12V转3.3V的电路,产品发货50K左右以后,大约有1 ...
- java堆外内存溢出_JVM 案例 - 堆外内存导致的溢出错误
案例 一个网站为了实现客户端实时从服务端接收数据,使用了 CometD 1.1.1 作为服务端推送框架,服务器是 Jetty7.1.4,CPU i5,内存 4G,操作系统 32位Windows. 服务 ...
- 【raid数据恢复案例】raid5扩容导致的数据丢失的数据恢复
环境: Dell R720服务器 4块sas硬盘组成的raid5磁盘阵列 每块硬盘容量为4T 故障: 业务扩大,原来阵列的空间不足,添加2块硬盘组成raid0进行空间扩容. 导致数据丢失的操作:添加2 ...
- HBase案例 | 20000个分区导致HBase集群宕机事故处理
这是几个月前遇到的一次HBase集群宕机事件,今天重新整理下事故分析报告.概况的说是业务方的一个10节点HBase集群支撑百TB级别的数据量,集群region数量达 23000+,最终集群支持不住业务 ...
- 不小心关闭进程导致电脑黑屏已解决
1.打开任务管理器 按下[CTRL+SHIFT+ESC]快捷键或[CTRL+ALT+.] 2.点击[文件].[运行新任务]选项 3.在输入框中输入[explorer.exe],点击[确定]即可.
- php 缓存模块,PHP缓存之模块缓存(APC)_PHP教程
PHP缓存之模块缓存(APC) APC是Alternative PHP Cache的简称,是 PHP 的一个免费公开的优化代码缓存.它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码. ...
- apc php7,深入解析php之apc
apc定义:apc是一个开放自由的php opcode缓存.它的目标是提供一个自由.开放和健全的框架,用于缓存和优化php中间代码. apc常用函数: 1.apc_clear_cache() 清楚ap ...
最新文章
- 【炼丹】深度学习多目标优化的多个loss应该如何权衡
- 多线程处理list_数组两元素的最大差:从暴力到多线程
- java二柱子_japonensisjava导航
- “蜥蜴之尾”——长老木马四代分析报告
- 《XNA高级编程:Xbox 360和Windows》1-2
- (读书笔记).NET大局观-.NET框架类库概观
- ASP封裝OWC CLASS
- 基于surging 的stage组件设计,谈谈我眼中的微服务
- java springmvc 后台读取文件,springMVC
- 运行python的两种方式磁盘式_python计算机基础-Day1
- android监听自身被卸载的方法
- 续上节,,基于App布局信息操作手机
- springMVC简易学习笔记三(文件上传与异常处理)
- 【面试】网易游戏社招一面总结
- Oracle数据脱敏
- Failed to sync vcpu reg
- 油管铺设 离散数学 合工大 prim算法
- 互联网公司各岗位真实工作内容起底
- 【Python脚本】harris调试时转换gray,Ix,Iy,resp等数据为png图片
- 技术真好玩第一期(2019-11-01)