Welcome to Snooda's Blog
lighttpd/nginx与后端fastcgi长连接的问题
[| 2012/06/05 16:45]
今天有同学希望将webserver与后端fcgi换成长连接以提高性能,于是在lighttpd里直接配置proxy-core.max-keep-alive-requests即可,为了做测试,后端只启动了一个fcgi进程。然后发现了奇怪的问题,每隔几个请求就会有一个非常非常慢的连接,需要等待10s左右。
后来决定开strace看看,由于lighttpd配了多进程,不好搞,于是改成单worker,结果问题解决了。
这样问题就豁然开朗了,原来多个请求落到了不同的lighttpd工作进程上,而唯一的一个fcgi进程被处理第一个请求的worker起长连接占用了,结果导致其他lighttpd无法连接到后端。
这是一个启用长连接后比较隐蔽的坑,可能会导致各个webserver的worker进程间负载不一致。需要小心了。
后来决定开strace看看,由于lighttpd配了多进程,不好搞,于是改成单worker,结果问题解决了。
这样问题就豁然开朗了,原来多个请求落到了不同的lighttpd工作进程上,而唯一的一个fcgi进程被处理第一个请求的worker起长连接占用了,结果导致其他lighttpd无法连接到后端。
这是一个启用长连接后比较隐蔽的坑,可能会导致各个webserver的worker进程间负载不一致。需要小心了。