Re: Tracking down a problem with php on FreeBSD

看板FB_hackers作者時間15年前 (2011/02/09 10:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串15/15 (看更多)
Ivan Voras wrote: > On 5 February 2011 19:43, Ruslan Mahmatkhanov <cvs-src@yandex.ru> wrote: >> Hi, Ivan! >> >> Thank you much for response and sorry for late answer. We was able to >> collect some data about the issue to make discussion more objective. See >> below. > >>>> Simple php-fpm restart solves the problem, but i need to track it down >>>> to the cause of this situation and ask for your assistance and >>>> instructions on how to debug it. Some facts about this: >>> On one hand, FPM is said to be very experimental... >>> >>> Personally, I've been using apache22-worker or apache22-event + >>> mod_fcgid for years without trouble. >> We prefer to avoid using apache at all, because in this it's just adds yet >> another unneeded link and complexity. > > I guess it's about tradeoffs beween complexity and stability :) > >>>> - `top -mio` shows very high (80000-90000 for VCSW) VCSW/IVCSW values >>>> for php-fpm processes and LA is more than 120 > > I think this is significant, especially with this: > >> When attaching to any hanging php-fpm proccess with truss, than i see a lot >> of this calls: >> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078) >> = 0 (0x0) >> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078) >> = 0 (0x0) >> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078) >> = 0 (0x0) >> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078) >> = 0 (0x0) > > "Normal" processes of the type PHP is have no need to call > sched_yield() arbitrarily, unless they are implementing something they > shouldn't - like a synchronization primitive (semaphore/lock). If "a > lot" means "of the same order of magnitude as your VCSW rate", this is > the reason for it. > > I've analyzed my php-cgi binary and modules and they don't use sched_yield. > > And yes, grepping for it in the source finds it only in FPM: > > sapi/fpm/fpm/fpm_atomic.h:140: sched_yield(); > > It seems they are trying to implement a spinlock by hand, instead of > using what the OS provides. (on the other hand, the implementation > might be correct but they may be using it wrong). > > In any case, this points to bugs in FPM. if so, unfortunately I can't > help you further. > > If you really want to continue using FPM, I guess you should probably > replace this hand-made lock implementation by sem(4) or see if > "robust" pthreads mutexes can be committed and MFCed (maybe with David > Xu). > Yes, there is a p4 branch implemented pthread robust mutex, it requires ABI change. Document for the POSIX robust mutex is here: http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getrobust.html _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
文章代碼(AID): #1DKVoZB2 (FB_hackers)
討論串 (同標題文章)
文章代碼(AID): #1DKVoZB2 (FB_hackers)