如何摆脱CGI输出上的TCP或lighttpd 4KB缓冲?

我在EC2上运行的Amazon Linux AMI上安装了stockt lighttpd安装程序。 我做的唯一configuration更改是启用CGI支持。

然后有一个自定义的CGI工具(用C语言编写)放在/ cgi-bin /中,从外部调用,并输出gzip的JSON。 这个工具定期输出数据,每10-20秒说一次,但每次只有几百字节。

问题是,在CGI标准输出和什么lighttpd返回到客户端之间,事物被缓冲,一次达到大约4KB。 不幸的是,这个系统在Amazon Elastic Load Balancer之后,它不允许空闲连接超过60秒。 由于缓冲,如果服务器在60秒内没有返回任何内容,连接就会被终止,客户端也不会得到任何东西。

那么如何追踪这个缓冲设置并将其显着降低呢? 我尝试改变一些lighttpdconfiguration参数,甚至改变内核中的“net.ipv4.tcp_wmem”,但没有任何工作。

使用随后启用的lighttpd过程:

strace -f -tt -p PIDOFLIGHTTPD

您将得到显示由lighttpd和CGI所做的每个系统调用的输出。 微秒时间戳应指示CGI何时返回数据,以及lighttpd何时将其写回客户端。 这也将回答问题是否为上游(如果你看到lighttpd几乎立即发回数据等)。

当我用Perl编写cgi的时候,这是一个我必须包含在perl脚本中的设置。 在perl中是$|=1 。 你可能需要在C中做同样的事情。你可能想问Stack Overflow