看nginx源代码ngx_debug_init函数,本意是打开FreeBSD内存调试的功能:
voidngx_debug_init(){#if (NGX_DEBUG_MALLOC)
#if __FreeBSD_version >= 500014 _malloc_options = "J";#else malloc_options = "J";#endif
ngx_freebsd_debug_malloc = 1;
#else char *mo;
mo = getenv("MALLOC_OPTIONS");
if (mo && ngx_strchr(mo, 'J')) { ngx_freebsd_debug_malloc = 1; }#endif
对'J'有些不解,上网查一下资料,查看环境变量MALLOC_OPTIONS:
TUNING Once, when the first call is made to one of these memory allocation rou- tines, various flags will be set or reset, which affect the workings of this allocator implementation.
The ``name'' of the file referenced by the symbolic link named /etc/malloc.conf, the value of the environment variable MALLOC_OPTIONS, and the string pointed to by the global variable _malloc_options will be interpreted, in that order, character by character as flags.
Most flags are single letters, where uppercase indicates that the behav- ior is set, or on, and lowercase means that the behavior is not set, or off.
A All warnings (except for the warning about unknown flags being set) become fatal. The process will call abort(3) in these cases.
H Use madvise(2) when pages within a chunk are no longer in use, but the chunk as a whole cannot yet be deallocated. This is pri- marily of use when swapping is a real possibility, due to the high overhead of the madvise() system call.
J Each byte of new memory allocated by malloc(), realloc() will be initialized to 0xa5. All memory returned by free(), realloc() will be initialized to 0x5a. This is intended for debugging and will impact performance negatively.
K Increase/decrease the virtual memory chunk size by a factor of two. The default chunk size is 1 MB. This option can be speci- fied multiple times.
N Increase/decrease the number of arenas by a factor of two. The default number of arenas is four times the number of CPUs, or one if there is a single CPU. This option can be specified multiple times.
P Various statistics are printed at program exit via an atexit(3) function. This has the potential to cause deadlock for a multi- threaded process that exits while one or more threads are execut- ing in the memory allocation functions. Therefore, this option should only be used with care; it is primarily intended as a per- formance tuning aid during application development.
Q Increase/decrease the size of the allocation quantum by a factor of two. The default quantum is the minimum allowed by the archi- tecture (typically 8 or 16 bytes). This option can be specified multiple times.
S Increase/decrease the size of the maximum size class that is a multiple of the quantum by a factor of two. Above this size, power-of-two spacing is used for size classes. The default value is 512 bytes. This option can be specified multiple times.
U Generate ``utrace'' entries for ktrace(1), for all operations. Consult the source for details on this option.
V Attempting to allocate zero bytes will return a NULL pointer instead of a valid pointer. (The default behavior is to make a minimal allocation and return a pointer to it.) This option is provided for System V compatibility. This option is incompatible with the ``X'' option.
X Rather than return failure for any allocation function, display a diagnostic message on stderr and cause the program to drop core (using abort(3)). This option should be set at compile time by including the following in the source code:
_malloc_options = "X";
Z Each byte of new memory allocated by malloc(), realloc() will be initialized to 0. Note that this initialization only happens once for each byte, so realloc() call do not zero memory that was previously allocated. This is intended for debugging and will impact performance negatively.
The ``J'' and ``Z'' options are intended for testing and debugging. An application which changes its behavior when these options are used is flawed.
哪位路过的大侠详细解释一下