fastcgi_read_timeout with PHP backend
Steve Holdoway
steve at greengecko.co.nz
Mon May 27 02:44:22 UTC 2013
OK, I leave you to it.
However, asynchronously spawning subprocesses *will* allow you to
parallelise the process. I'd call it design, rather than a workaround,
but there you go (:
Steve
On Sun, 2013-05-26 at 22:38 -0400, B.R. wrote:
> One way or another, even if an external script is called, PHP will
> need to wait for the scripts completion, making the parallelization
> impossible or at least useless (since, to wait for a return code of an
> external script is still blocking).
>
>
> I am not trying to find a workaround, I need to know how the
> fastcgi_reload_timeout works (if I understood it properly), if I
> properly disabled PHP buffering for my example case and how eventually
> to control those timeouts.
>
> I'd like to address the central problem here, not closing my eyes on
> it.
>
>
> ---
> B. R.
>
>
> On Sun, May 26, 2013 at 10:24 PM, Steve Holdoway
> <steve at greengecko.co.nz> wrote:
> Surely, you're still serialising the transfer with a loop?
>
> On Sun, 2013-05-26 at 22:11 -0400, B.R. wrote:
> > Thanks for your answer.
> >
> > I didn't go into specifics because my problem doesn't rely
> at the
> > application-level logic.
> >
> > What you describe is what my script does already.
> >
> >
> > However in this particular case I have 16 files weighting
> each a few
> > MB which need to be transfered back at once.
> >
> >
> > PHP allocates 30s for each loop turn (far enough to copy the
> file +
> > echo some output message about successes/failed completion).
> >
> > Nginx cuts the execution avec fastcgi_read_timeout time even
> with my
> > efforts to cut down any buffering on PHP side (thus forcing
> the output
> > to be sent to Nginx to reinitialize the timeout counter).
> >
> > That Nginx action is the center of my attention right now.
> How can I
> > get read of it in a scalable fashion (ie no
> fastcgi_read_time =
> > 9999999) ?
> > ---
> > B. R.
> >
> >
> >
> >
> > On Sun, May 26, 2013 at 9:46 PM, Steve Holdoway
> > <steve at greengecko.co.nz> wrote:
> > Write a script that lists the remote files, then
> checks for
> > the
> > existence of the file locally, and copy it if it
> doesn't
> > exist? That way
> > no internal loop is used - use a different exit code
> to note
> > whether
> > there was one copied, or there were none ready.
> >
> > That way you scale for a single file transfer.
> There's nothing
> > to be
> > gained from looping internally - well
> performance-wise that
> > is.
> >
> > Steve
> >
> > On Sun, 2013-05-26 at 21:31 -0400, B.R. wrote:
> > > No ideas?
> > >
> > > ---
> > > B. R.
> > >
> > >
> > > On Sat, May 25, 2013 at 1:01 PM, B.R.
> > <reallfqq-nginx at yahoo.fr> wrote:
> > > Hello,
> > >
> > >
> > > I am trying to understand how
> fastcgi_read_timout
> > works in
> > > Nginx.
> > >
> > >
> > > Here is what I wanna do:
> > >
> > > I list files (few MB each) on a distant
> place which
> > I copy one
> > > by one (loop) on the local disk through
> PHP.
> > >
> > > I do not know the amount of files I need
> to copy,
> > thus I do
> > > not know the total amount of time I need
> for the
> > script to
> > > finish its execution. What I know is that
> I can
> > ensure is a
> > > processing time limit per file.
> > >
> > > I would like my script not to be
> forcefully
> > interrupted by
> > > either sides (PHP or Nginx) before
> completion.
> > >
> > >
> > >
> > > What I did so far:
> > >
> > > - PHP has a 'max_execution_time' of 30s
> (default?).
> > In the
> > > loop copying files, I use the
> set_time_limit()
> > procedure to
> > > reinitialize the limit before each file
> copy, hence
> > each file
> > > processing has 30s to go: way enough!
> > >
> > >
> > > - The problem seems to lie on the Nginx
> side, with
> > the
> > > 'fastcgi_read_timeout' configuration
> entry.
> > >
> > > I can't ensure what maximum time I need,
> and I would
> > like not
> > > to use way-off values such as 2 weeks or 1
> year
> > there. ;o)
> > >
> > > What I understood from the documentation
> is that the
> > timeout
> > > is reinitialized after a successful read:
> am I
> > right?
> > >
> > >
> > > The challenge is now to cut any buffering
> occurring
> > on the PHP
> > > side and let Nginx manage it (since the
> buffering
> > will occur
> > > after content is being read from the
> backend). Here
> > is what I
> > > did:
> > >
> > > * PHP's zlib.output_compression is
> deactivated by
> > default in
> > > PHP
> > >
> > > * I deactivated PHP's output_buffering
> (default is
> > 4096 bytes)
> > >
> > > * I am using the PHP flush() procedure at
> the end of
> > each
> > > iteration of the copying loop, after a
> message is
> > written to
> > > the output
> > >
> > >
> > >
> > > Current state:
> > >
> > > * The script seems to still be cut after
> the
> > expiration of the
> > > 'fastcgi_read_timout' limit (confirmed by
> the error
> > log entry
> > > 'upstream timed out (110: Connection timed
> out)
> > while reading
> > > upstream')
> > >
> > > * The PHP loop is entered several times
> since
> > multiple files
> > > have been copied
> > >
> > > * The output sent to the browser is cut
> before any
> > output from
> > > the loop appears
> > >
> > >
> > > It seems that there is still some unwanted
> buffering
> > on the
> > > PHP side.
> > >
> > > I also note that the PHP's flush()
> procedure doesn't
> > seem to
> > > work since the output in the browser
> doesn't contain
> > any
> > > message written after eahc file copy.
> > >
> > >
> > > Am I misunderstanding something about
> Nginx here
> > (especially
> > > about the 'fastcgi_read_timeout'
> directive)?
> > >
> > > Have you any intel/piece of advice on hte
> matter?
> > >
> > > Thanks,
> > >
> > > ---
> > > B. R.
> > >
> > >
> >
> > > _______________________________________________
> > > nginx mailing list
> > > nginx at nginx.org
> > > http://mailman.nginx.org/mailman/listinfo/nginx
> >
> > --
> > Steve Holdoway BSc(Hons) MNZCS
> <steve at greengecko.co.nz>
> > http://www.greengecko.co.nz
> > MSN: steve at greengecko.co.nz
> > Skype: sholdowa
> >
> > _______________________________________________
> > nginx mailing list
> > nginx at nginx.org
> > http://mailman.nginx.org/mailman/listinfo/nginx
> >
> >
> > _______________________________________________
> > nginx mailing list
> > nginx at nginx.org
> > http://mailman.nginx.org/mailman/listinfo/nginx
>
> --
> Steve Holdoway BSc(Hons) MNZCS <steve at greengecko.co.nz>
> http://www.greengecko.co.nz
> MSN: steve at greengecko.co.nz
> Skype: sholdowa
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
>
>
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
--
Steve Holdoway BSc(Hons) MNZCS <steve at greengecko.co.nz>
http://www.greengecko.co.nz
MSN: steve at greengecko.co.nz
Skype: sholdowa
More information about the nginx
mailing list