Re: [APC-DEV] [PATCH] APC signals + coredump shared memory unmapping

[email protected] (Lucas Nealan) Sun, 23 Dec 2007 17:11:08 -0800
Newsgroups php.apc.dev
Message-ID <C394472C.32DFE%[email protected]>
Yes, there is a definite risk when enabling this feature. Especially if a
segfault originates from corruption of the apc cache itself. For us the
majority of faults do not happen here so it's benificial to enabled for the
general case. I'm planning to do some updating of the apc documentation as
soon as the phpdoc project stabalizes and I can make sure to include some
text about the risks of enabling this feature.

-lucas

On 12/23/07 8:01 AM, "Rasmus Lerdorf" <[email protected]> wrote:

> We have extremely bad experience with SEGV signal handlers seg faulting
> themselves and sending the server into an infinite loop and thus taking
> it down.  I don't mind the patch, but we should make sure people
> understand the risks.
> 
> -Rasmus
> 
> Lucas Nealan wrote:
>> Hi,
>> 
>> I would like to propose the attached patch against APC CVS HEAD. It provides
>> the configurable ability to trap coredump related signals and unmap the APC
>> shared memory segment while still calling any previously installed signal
>> handlers. This feature would be enabled via a new apc ini entry,
>> apc.coredump_unmap, which is defaulted to disabled.
>> 
>> Although this will technically work in production environments the
>> functionality was engineered to solve a problem in shared development
>> environments that require a really large apc shm size. In these environments
>> when a coredump occurs in the SAPI, PHP or an extension the coredump file
>> mayb be many gigabytes. If enough of these are generated concurrently,
>> writing these large files may bring down a server.
>> 
>> All signal handling is done through sigaction and will be compiled out if
>> autoconf HAVE_SIGACTION is not set (or it's overrided). The signal handling
>> also uses SA_SIGINFO in order to maintain the ability to call previously
>> registered handlers that also use this flag.
>> 
>> Signal handlers are registered per child in module RINIT since SAPIs like
>> Apache may register their signal handlers after MINIT. Information about the
>> previous handlers is stored in a module static. I believe this will be safe
>> in ZTS builds since handlers will only be registered once in a non forking
>> mode. If requested I will move these into APC globals.
>> 
>> As a note, although newer Linux kernels and other kernels may provide the
>> facility to ignore various types of shared memory when generating a
>> coredump, this type of setting does not allow the specificity that this
>> patch provides. For example someone running Apache/PHP with a large APC
>> cache may not want their mmaped Apache scoreboard excluded from their
>> coredump files.
>> 
>> I've also made the patch available at the following url in case the
>> attachment is problematic:
>> 
>> http://sizzo.org/~screen/patches/apc_signal_unmap.patch
>> 
>> -lucas
>> 
>> 
>> 
>