• php缓存模块apc可能导致php-fpm终止


    如果你的网站出现502错误。同时你网站中又使用了apc模块来做缓存处理。那么这篇文章兴许能帮到你。


    首先,查看了php-fpm 的进程数。

    发现php-fpm的进程数已经到达了php-fpm.conf中设置的最大值。

    发现很多php-fpm进程,肯定有问题。

    ​然后,用pstack命令查看这些php-fpm进程都在干啥。

    sudo pstack pid
    

     由堆栈信息我们可以肯定php的apc模块申请互斥锁权限时,一直获取不到互斥锁权限,一直等待,导致卡死了。

    接下来,我们查下,是什么导致apc模块一直拿不到互斥锁权限。我们使用gdb排查,最终查出互斥锁的权限被进程号11274的进程占用着

    那么为啥11274进程一直占用互斥锁权限,不释放呢?最终发现这个进程已经退出了。11274的进程为啥会退出呢?在php-fpm 的日志中找到了答案。

    NOTICE: [pool www] child 11274 started
    WARNING: [pool www] child 11274 exited on signal 11 (SIGSEGV) after 0.089068 seconds from start
    

      

    此进程运行过程中遇到了段错误,导致进程异常退出了。

    然后发现是php的hsf扩展在启动初始化的时候遇到内存问题,导致段错误。

    罪魁祸首:

    因为php扩展hsf启动的时候发生内存错误

    导致php-fpm进程异常退出。

    退出的进程当时拥有apc的互斥锁。

    但是退出时,由于是异常退出,没能释放互斥锁。

    导致php-fpm其他进程无法获取apc的互斥锁。导致死锁。

    所以建议不再使用apc而采用opcache来做缓存。

  • 相关阅读:
    SQL Server 【应用】行列转换Pivot&Unpivot
    SQL Server 【优化】in & exists & not in & not exists
    SQL Server 【提高】 死锁
    SQL Server 【提高】 锁
    SQL Server 【提高】 游标
    .Net 【基础回顾】关键字
    .Net 【基础回顾】值类型与引用类型
    mysql中point类型数据的操作
    CGI环境配置(Ubuntu)
    CGI环境配置(CentOS)
  • 原文地址:https://www.cnblogs.com/black-humor/p/7805569.html
Copyright © 2020-2023  润新知