2010/4/15 Ferenc Kovacs <tyr...@gmail.com>:
>
>
> 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)

I see how soft_limit could work (after processing a page, memory is
checked and if it's more than the soft limit, the process is killed).
But how can you make the hard_limit to work ? You'll have to setup
memory check for each process by a master process, because the child
won't be able to check it's memory realtime (or I missed something)

++ Jerome

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to