On Thu, Apr 15, 2010 at 9:25 AM, Jérôme Loyet <jer...@loyet.net> wrote:
> 2010/4/15 Ferenc Kovacs <tyr...@gmail.com>: > > > > > > On Thu, Apr 15, 2010 at 9:09 AM, Ferenc Kovacs <tyr...@gmail.com> wrote: > >> > >> > >> 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 ? > >>> > >> > >> Obviously you didn't read the original mail, and the links inside: > >> > >> > http://groups.google.com/group/highload-php-en/browse_thread/thread/1882a3b2257dcc5c/ea73892cea011541?lnk=gst&q=gaochunhui#ea73892cea011541 > >> > >> The problem here is that PHP wouldn't free any allocated memory untill > >> the process exits, so there's the risk of memory exhaustion if too > >> many PHP processes were running, even though each process wouldn't > >> exceed PHP's memory_limit. > >> > >> My suggestion is more about releasing the allocated memory as soon as > >> possible. That is, this option is similar to "max_requests". > >> > >> PHP-FPM would kill the PHP process if the requests a process handled > >> exceed max_requests, and similarly, PHP-FPM should kill the PHP > >> process whose memory usage exceeds "exit_on_memory_exceeds". > >> > >> So one of your lib (for example imagick) leaks memory, on the long run, > it > >> will exhaust the memory limit, and will kill a totaly request. > >> You can set that how many request should be served with one worker, but > >> you can't soft limit it's memory consumption. > >> This is what the patch does: > >> if you set the hard limit: (memory_limit) you can guarante that no > process > >> will use more memory, because if it tries, it will fail. > >> and you can set soft limit, if that reached, the process will die and > >> respawn after finishing the current request. > >> > >> Tyrael > > > > Btw: did you know about > > http://php.net/manual/en/function.apache-child-terminate.php I just > noticed > > a few days ago, obviously, you can't use with cgi/fastcgi/php-fpm but for > > apache, it does exactly what you need, except that you have to execute > from > > userland. > > This function is interesting but it's called from php scripts. When > you are a sysadmin who host hundreds of different customers, you can't > garanty each customer will call this function each time he uses > consomption scripts. > Yeah, I know, and I think I did mention that, but this sounds like a good feature in the language, but sadly it has too many limitation in it's current form. (no windows support, only works with apache) Tyrael