Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:47954 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 21141 invoked from network); 15 Apr 2010 07:56:16 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 15 Apr 2010 07:56:16 -0000 Authentication-Results: pb1.pair.com header.from=tyra3l@gmail.com; sender-id=pass; domainkeys=bad Authentication-Results: pb1.pair.com smtp.mail=tyra3l@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.218.219 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: tyra3l@gmail.com X-Host-Fingerprint: 209.85.218.219 mail-bw0-f219.google.com Received: from [209.85.218.219] ([209.85.218.219:50983] helo=mail-bw0-f219.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 20/65-20494-E96C6CB4 for ; Thu, 15 Apr 2010 03:56:15 -0400 Received: by bwz19 with SMTP id 19so26772bwz.1 for ; Thu, 15 Apr 2010 00:56:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:received:message-id:subject:from:to:cc:content-type; bh=OqB17NOXzilNY5mr3oGAJCttNIhVFIeNDCe4P/rER30=; b=fx2cp3dMdYiXZqtwTK4SG2MaZUeKnWSElevYF8FpFmcxKZSp0ERxQhOA5ivNDqZFN6 ChhLftcCeESsLKDUDAWSksZ9gZmVrMrt3LKTNqotpO+Qtun0qeC7tNpOHZ2r4FxNjZy5 I9yIngBZWa3paRiDRsXcC6WDoMPXLLTOeGz8k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=NAmC27/vuoMcu2woe0l6icHgw+8lJSq4jl+IbKaPLzWbnCHQYnUiuuAuP+ZFEAPvge 9sZ97fP/PD+VQoAYw6h3hRWzSLwmwa+bCvdcx+zDVd8VsW4ytpIxkRJPEjGszlqPqy7g YP7OwhS6eFKoF3zuBC0pTX9WD4V8o1CTvFsMA= MIME-Version: 1.0 Received: by 10.204.123.20 with HTTP; Thu, 15 Apr 2010 00:56:11 -0700 (PDT) In-Reply-To: References: <4BC58D10.4050609@lerdorf.com> Date: Thu, 15 Apr 2010 09:56:11 +0200 Received: by 10.204.155.87 with SMTP id r23mr2330550bkw.27.1271318171991; Thu, 15 Apr 2010 00:56:11 -0700 (PDT) Message-ID: To: =?UTF-8?B?SsOpcsO0bWUgTG95ZXQ=?= Cc: =?UTF-8?B?5ruV6Lev6YGl?= , Rasmus Lerdorf , internals@lists.php.net Content-Type: multipart/alternative; boundary=0015175ccffe09c1a5048441d467 Subject: Re: [PHP-DEV] One suggestion to PHP-FPM From: tyra3l@gmail.com (Ferenc Kovacs) --0015175ccffe09c1a5048441d467 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Thu, Apr 15, 2010 at 9:41 AM, J=C3=A9r=C3=B4me Loyet = wrote: > 2010/4/15 Ferenc Kovacs : > > > > > > On Thu, Apr 15, 2010 at 9:25 AM, J=C3=A9r=C3=B4me Loyet wrote: > >> > >> 2010/4/15 Ferenc Kovacs : > >> > > >> > > >> > On Thu, Apr 15, 2010 at 9:09 AM, Ferenc Kovacs > wrote: > >> >> > >> >> > >> >> 2010/4/15 J=C3=A9r=C3=B4me Loyet > >> >>> > >> >>> 2010/4/15 =E6=BB=95=E8=B7=AF=E9=81=A5 : > >> >>> > We check error log after our server crashed, and we found that p= hp > >> >>> > 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 zen= d > >> >>> 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/1882a= 3b2257dcc5c/ea73892cea011541?lnk=3Dgst&q=3Dgaochunhui#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 handle= d > >> >> 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 a= nd > >> >> 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 bu= t > >> > for > >> > apache, it does exactly what you need, except that you have to execu= te > >> > 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 go= od > > 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 This is what the proposed php-fpm patch does, or am I missing something? > , because the child > won't be able to check it's memory realtime (or I missed something) > > ++ Jerome > If we talking about my proposal(to kill/set to kill the worker from inside the request), then maybe you are right, I don't know much about the interna= l memory management system, but you are saying, that there is no way to tell the worker's memory consumption from inside the php userland? there are functions like memory_get_usage(), memory_get_peak_usage(), and there are ways in every OS to tell the ~ memory consumption of a given process. Am I missing something? Tyrael --0015175ccffe09c1a5048441d467--