When allocate memory from PHP memory heap, PHP runtime check the memory_limit which in php.ini, but this can only give a error message and not to continue to excute php code, it can't control the PHP-FPM child process, my idea is that when the memory out of limit we set, kill this child process, we know, though PHP runtime can free its heap memory, but it can't give it back to the system, so we can kill this child process and ensure the system have enough free memory. We do check the memory limit is to control the process.
2010/4/15 Jérôme Loyet <jer...@loyet.net> > 2010/4/15 滕路遥 <tly.phpf...@gmail.com>: > > We check error log after our server crashed, and we found that php heap > > memory is out of limit, > > so I think imagick use emalloc to allocate php heap memory, to check the > > zend_memory_usage is > > not a method for imagick, other circumstances which occupy huge memory > can > > use this method to > > ensure the system have enough free memory. > > OK, > > one thing I didn't understand is "why should you want check de zend > memory usage when there is a memory_limit parameter in PHP.ini " ? > does'nt it do the same at PHP layer when allocating ? > > > > > thanks, > > looyao > > > > 2010/4/14 Rasmus Lerdorf <ras...@lerdorf.com> > >> > >> On 04/14/2010 02:01 AM, Jérôme Loyet wrote: > >> > The patch seems good (I didn't test it yet) but I'm curious about the > >> > way you check the memory real size: > >> > > >> > + if(zend_memory_usage(1 TSRMLS_CC) > > >> > fpm_global_config.term_on_memory_limit){ > >> > > >> > I don't know much about the zend_memory_usage() function. But does it > >> > return the real memory size of the process ? > >> > >> Right, that will only give you the memory allocated by the memory > >> manager, obviously. But, pecl/imagick does seem to use emalloc to > >> allocate the imagick objects. However, if the underlying magickwand > >> library mallocs a bunch of temporary space on its own, this will not get > >> picked up. > >> > >> -Rasmus > > > > >