Closed lichunqiang closed 5 years ago
@lichunqiang 是开启了apcu才会出现这种情况吗?
@longxinH 嗯,是的.
目前从日志看来,php慢日志最后几个都是在apcu_store
, 之后再无慢日志写入。
只有php-fpm.log 刷屏的执行超时而退出
@lichunqiang 不好意思,最近公司任务比较忙,周末抽时间看看
@lichunqiang 我这边无法重现出来,你能提供一个能重现的例子吗? 我的配置如下
php.ini
extension = apcu.so
apc.enabled= on
apc.shm_size= 64M
apc.enable_cli = on
test.php
xhprof_enable();
$bar = 'BAR';
apcu_store('foo', $bar);
apcu_fetch('foo');
xhprof_disable();
尝试过重现,但是失败了,无法重现.
应该是和代码有关系,因为业务代码中大量使用了apcu做共享内存使用。
xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
... 各个组件都有使用到apcu
xhprof_disable();
单单抽出部分代码确实无法重现。。。
从日志初步分析: slow log: 最后的日志停在 apcu_store
(最后N个记录都是),是不是xhprof在收集信息的时候遇到了这个阻塞(?猜测的状态)方法执行导致的呢
@lichunqiang 从你提供的gdb看,貌似是执行了pthread_rwlock_wrlock之后就卡住了,猜测是进程锁导致了
#0 0x00000036a620ac50 in pthread_rwlock_wrlock () from /lib64/libpthread.so.0
#1 0x00007ffb746ae1d9 in apc_lock_wlock (lock=<value optimized out>) at /usr/local/src/apcu-5.1.8/apc_lock.c:245
@lichunqiang 我这边重现不出来,也无法断点调试
@longxinH 嗯,目前看来无法通过几行代码就能复现。我们线上环境的机器也不是每次都复现这种情况,只是偶尔出现这个问题。
已经和运维商量了,下次在出现这种情况,先不要做php重启操作,先将机器摘掉,保存现场。这样就有环境进行复现了。
有进展会及时同步,另外有什么其他建议需要注意的么
@lichunqiang 谢谢你的帮助。如果可以的话最好能生成core_dump,这样能更好的定位
具体现象是:php-fpm打印出所有请求相应时间都很慢,导致服务器无法正常相应,只能通过重启php-fpm来解决。
系统环境:
gdb打印的调用栈: