Tag Archives: fastcgi

用 SYSOP 风格的方法研究 spawn-fcgi

不怕大家笑话,以前我一直不明白为啥会有 spawn-fcgi 这个东西。因为以前都是用 PHP 啊,PHP 本身就是可以并发处理多个请求的 fastcgi server 啊,要 spawn-fcgi 干啥用呢?更有意思的是有人用 spawn-fcgi 启动多个 php-cgi ,然后这个 php-cgi 再启动多个子进程,不知道有什么好处。 前几天,我读了一下代码,还是没太明白这个东西存在的必要性,于是就用我们 SYSOP 的方法研究了一下 spawn-fcgi: fakefcgi.sh脚本文件 #!/bin/sh ls -l /proc/self/fd/ >/var/log/$$.txt sleep 600s 执行 spawn-fcgi -p 3333 -F 5 — ./fakefcgi.sh 得到结果 spawn-fcgi: child … Continue reading

Posted in 默认分类 | Tagged , , | 1 Comment

在小饭馆看到的 HTTP 502 错误实例

周五拉着 wincss  去蓟门里的螺蛳粉先生吃饭,期间见到了一个场景,颇像当年 5D6D 网站遭遇的 502 错误。 我和 wincss 到饭馆的时候,屋里已经没有座位了。但是既然来了也不能轻易放弃啊,于是要求店家在外面支了桌子。其实瓶颈主要在于厨房(数据库),厨房做饭太慢,外面的客户只好先排着。在客人数量(请求数量)没有超出饭馆桌椅数量( fastcgi server 的进程和 backlog 上限)的情况下,系统 load 迅速增大,但还没崩溃,此时所有的吃饭请求都挂着,处于 I/O blocked 状态。 过了一会,饭还没做好。有些人等不及就撤了,于是发生了 HTTP 504 Gateway Timeout 错误。而不断前来的客人开始怨声载道(因为他们站在饭店门口的路上,所以载道),此时就发生了 HTTP 502 Bad Gateway 错误。 502、504 错误的根本原因在于系统搭配不均衡,后端的单点瓶颈和前端负载能力过于强大的搭配是不合适的。唯一值得庆幸的是,即使厨房很慢,我们索要辣椒调料的请求还是得到了满足,类似于 fastcgi 请求无法满足的时候,静态文件请求仍能满足的情况。

Posted in 默认分类 | Tagged , | 3 Comments

web服务器和web应用的结合方式是个很麻烦的事啊

今天在看python的资料,发现没看关于python作为web应用部署的方法。后来才发现,原来python的web应用功能大都是由开发框架提供的,用这些开发框架开发的程序可以以http、fastcgi、uwsgi等协议对外提供服务,但都是与该应用程序紧密相关的;和Apache的mod_php类似的mod_python文档上声称尚未支持Apache 2.0;没有找到和php-fpm类似的语言级别的fastcgi服务器。 web应用程序的部署是个挺麻烦的事。 普通web服务器+cgi: web服务器需要把URL映射到文件系统,并执行cgi 普通web服务器+内置语言处理模块: (像apache+mod_php这样的) web服务器需要把URL映射到模块(并判断文件是否存在,可选步骤),并由该模块处理) 普通web服务器+分离式web应用: (web服务器+php等语言级别的fastcgi、 web服务器+应用级别的fastcgi、uwsgi等种种协议) web服务器需要把URL映射到后端服务,并由该后端服务处理。而该后端服务还得再把URL映射Class、Function再运行,需要两次regexp匹配。这样就把应用的开发和部署紧密耦合了,增加了部署的麻烦啊 20130103更新:随着我对python的学习,我越来越认同python派的WSGI server+框架+应用程序的架构,也认同WSGI server直接对外提供高性能服务的理念。参考Shell Xu的博文

Posted in 默认分类 | Tagged , , , | 3 Comments

我的确定fastcgi数量的方法

这里主要讨论php-fastcgi 1 将 nginx 各项参数加到足够大,php 加到足够多 2 根据日志、各进程执行时间等,找出一天内的访问最高峰(请求/秒) 3 req per second / avg process time=amount of PHP needed 将数值适当放大,留出余量 4 worker_processes 大概是和 CPU、CPU 核的数量相关的。参考 mysql 的并发线程参数 5 根据 worker_processess * (worker_connections-2)=PHP数量 的公式,反算出 worker_connections 6 同时要保证worker_rlimit_nofile 留余量,要比 worker_connections 大

Posted in 默认分类 | Tagged , , | Leave a comment

nginx的极端测试

将各项参数减少,发现 worker_rlimit_nofile最少是10 worker_connections最少是2 才能正常启动 如果想正常工作, worker_rlimit_nofile最少12 worker_connections最少 3 TCP连接数不能超过worker_connections-2 猜测那两个是用于master进程和worker进程之间的通信吧 php-cgi进程少的情况下,对PHP的请求会依次被送去执行,后来的就等待 等待超时的就HTTP 504 Gateway Timeout php-cgi进程没有在运行的情况下,对PHP的请求会得到502 Bad Gateway的回答

Posted in 默认分类 | Tagged , , | Leave a comment