最近访问网站,发现出现了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罢工!相关推荐

  1. Windows APC学习笔记(一)—— APC的本质备用APC队列

    Windows APC学习笔记(一)-- APC的本质&备用APC队列 基础知识 APC的本质 APC队列 APC结构 分析 KiServiceExit 总结 备用APC队列 挂靠环境下Apc ...

  2. KingbaseES V8R6 集群运维案例 -- 磁盘空间问题导致集群故障

    某商业银行生产系统KingbaseES读写分离集群主库出现故障,导致集群主备发生切换.客户要求说明具体的原因. KingbaseES读写分离集群基本信息: KingbaseES集群信息   操作系统 ...

  3. 案例分享|地弹现象导致DCDC电源芯片工作不正常

    很多读者都应该听过地弹,但是实际遇到的地弹的问题应该很少.本案例就是一个DCDC电源芯片的案例. 1. 问题描述 如下图1 ,产品其中一个供电是12V转3.3V的电路,产品发货50K左右以后,大约有1 ...

  4. java堆外内存溢出_JVM 案例 - 堆外内存导致的溢出错误

    案例 一个网站为了实现客户端实时从服务端接收数据,使用了 CometD 1.1.1 作为服务端推送框架,服务器是 Jetty7.1.4,CPU i5,内存 4G,操作系统 32位Windows. 服务 ...

  5. 【raid数据恢复案例】raid5扩容导致的数据丢失的数据恢复

    环境: Dell R720服务器 4块sas硬盘组成的raid5磁盘阵列 每块硬盘容量为4T 故障: 业务扩大,原来阵列的空间不足,添加2块硬盘组成raid0进行空间扩容. 导致数据丢失的操作:添加2 ...

  6. HBase案例 | 20000个分区导致HBase集群宕机事故处理

    这是几个月前遇到的一次HBase集群宕机事件,今天重新整理下事故分析报告.概况的说是业务方的一个10节点HBase集群支撑百TB级别的数据量,集群region数量达 23000+,最终集群支持不住业务 ...

  7. 不小心关闭进程导致电脑黑屏已解决

    1.打开任务管理器 按下[CTRL+SHIFT+ESC]快捷键或[CTRL+ALT+.] 2.点击[文件].[运行新任务]选项 3.在输入框中输入[explorer.exe],点击[确定]即可.

  8. php 缓存模块,PHP缓存之模块缓存(APC)_PHP教程

    PHP缓存之模块缓存(APC) APC是Alternative PHP Cache的简称,是 PHP 的一个免费公开的优化代码缓存.它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码. ...

  9. apc php7,深入解析php之apc

    apc定义:apc是一个开放自由的php opcode缓存.它的目标是提供一个自由.开放和健全的框架,用于缓存和优化php中间代码. apc常用函数: 1.apc_clear_cache() 清楚ap ...

最新文章

  1. 【炼丹】深度学习多目标优化的多个loss应该如何权衡
  2. 多线程处理list_数组两元素的最大差:从暴力到多线程
  3. java二柱子_japonensisjava导航
  4. “蜥蜴之尾”——长老木马四代分析报告
  5. 《XNA高级编程:Xbox 360和Windows》1-2
  6. (读书笔记).NET大局观-.NET框架类库概观
  7. ASP封裝OWC CLASS
  8. 基于surging 的stage组件设计,谈谈我眼中的微服务
  9. java springmvc 后台读取文件,springMVC
  10. 运行python的两种方式磁盘式_python计算机基础-Day1
  11. android监听自身被卸载的方法
  12. 续上节,,基于App布局信息操作手机
  13. springMVC简易学习笔记三(文件上传与异常处理)
  14. 【面试】网易游戏社招一面总结
  15. Oracle数据脱敏
  16. Failed to sync vcpu reg
  17. 油管铺设 离散数学 合工大 prim算法
  18. 互联网公司各岗位真实工作内容起底
  19. 【Python脚本】harris调试时转换gray,Ix,Iy,resp等数据为png图片
  20. 技术真好玩第一期(2019-11-01)

热门文章

  1. 电脑如何设置微信里打印准考证
  2. 有趣的三扇门问题(Monty Hall Problem)
  3. 无线模块超远距离传输中实现中继的方法
  4. vulnhub-HACKABLE: Hackable: III
  5. 上证50ETF买卖操作详解
  6. 维盟服务器系统,10.198.1.1维盟服务器系统登录?
  7. 【渝粤题库】陕西师范大学151106中级财务管理 作业(高起专)
  8. 北京交通广播对话雷建平:揭秘中概股上市背后故事
  9. 爬虫示例-网易云歌单
  10. 华为SmartAX MA5620配置成交换机