一台测试服务器由于没做fastcgi_buffer单独设置,在跑一个显示10w条数据的循环输出时只能显示4700-5200条记录

<?php
$str = '';
for($i = 0; $i < 100000;$i++)
{
    //echo $i."<br>";
    $str .= $i."<br>";
}
echo $str;
?>

访问测试得到数据不完整,查看nginx手册后发现原因在于fastcgi_buffer设置

增加 fastcgi_buffers 256 128k;数据显示正常

关于这个参数的解释:

fastcgi_buffers

语法:fastcgi_buffers the_number is_size;
默认值:fastcgi_buffers 8 4k/8k;
使用字段:http, server, location
这个参数指定了从FastCGI进程到来的应答,本地将用多少和多大的缓冲区读取。
fastcgi_buffers可以设置为你的FastCGI返回的大部分应答大小,这样可以处理大部分的请求,较大的请求将被缓冲到磁盘。
如果想关闭对所有请求道磁盘的缓冲,可以将fastcgi_max_temp_file_size 设置为0。
fastcgi_buffer等于:fastcgi_buffer_size + the_number * is_size
如果一个fastcgi应答为12k,那么fastcgi_buffers 64 4k将分配3个4k的buffer。这便是为什么fastcgi_buffers有两个参数,而fastcgi_buffer_size(用于应答头与应答的第一部分)只有1个参数,在fastcgi_buffer_size被清空后,它们和fastcgi_buffers一起被使用。
例如:

posted on 2013-08-28 14:07  cycsa  阅读(9653)  评论(0编辑  收藏  举报