[PATCH] APC signals + coredump shared memory unmapping
[email protected] (Lucas Nealan) Sun, 23 Dec 2007 03:20:05 -0800
| Newsgroups | php.apc.dev |
|---|---|
| Message-ID | <C3938467.32DD0%[email protected]> |
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