论坛首页 编程语言技术论坛

django,性能测试,以及对fastcgi下进程模型和线程模型的分析

浏览 30892 次
该帖已经被评为精华帖
作者 正文
   发表时间:2008-12-14  
bohemia 写道
robbin 写道
ahuaxuan 写道
robbin 写道

我部署JavaEye服务器是自己写shell脚本来控制FCGI进程的spawn,respawn,很稳定,很健壮,而且很容易维护。

想了几分钟,还是没有想通具体的做法或者思路是什么样子的,shell脚本是如何去控制系统中进程的行为的呢,难道那个进程有提供这样的接口或者什么滴?

知识不够用了,robbin大哥能否为我们讲解一下具体的思路。


我们是静态spawn的,用lighttpd的spawn-fcgi命令来spawn进程就可以了,不进行动态spawn,当然shell启动脚本还有很多其他工作要做。另外的一个shell脚本用来监控FCGI的内存使用状况,发现超过限额以后就respawn它,另外还有一个进程健康检查的shell,如果发现进程crash掉,就spawn一个新的进程。


这样感觉是一个饭馆,只要开张,只有10张桌子, 如果客人真的来多了,也就真的没办法服务了.
不知道有没有更好的办法,即能解决服务器的稳定服务,又能提供动态的扩展?


软件上动态的扩展不是很难的事情,但问题是你软件进行了动态扩展,你的硬件也能跟上吗? 如果你硬件不能动态跟上,就意味着更大的灾难。

就好比饭馆就那么大点地方,你摆了10张桌子,客人坐满了,新来的客人还是不要再进来的好,这就是静态spawn,至少能够保证进来的客人有饭吃,能服务的好。

你非要动态spawn,客人来几个,你就加几张桌子,结果摆了100张桌子,所有客人都坐得不舒服,吃不到饭,你觉得这样更好?
0 请登录后投票
   发表时间:2008-12-18  
robbin 写道
bohemia 写道
robbin 写道
ahuaxuan 写道
robbin 写道

我部署JavaEye服务器是自己写shell脚本来控制FCGI进程的spawn,respawn,很稳定,很健壮,而且很容易维护。

想了几分钟,还是没有想通具体的做法或者思路是什么样子的,shell脚本是如何去控制系统中进程的行为的呢,难道那个进程有提供这样的接口或者什么滴?

知识不够用了,robbin大哥能否为我们讲解一下具体的思路。


我们是静态spawn的,用lighttpd的spawn-fcgi命令来spawn进程就可以了,不进行动态spawn,当然shell启动脚本还有很多其他工作要做。另外的一个shell脚本用来监控FCGI的内存使用状况,发现超过限额以后就respawn它,另外还有一个进程健康检查的shell,如果发现进程crash掉,就spawn一个新的进程。


这样感觉是一个饭馆,只要开张,只有10张桌子, 如果客人真的来多了,也就真的没办法服务了.
不知道有没有更好的办法,即能解决服务器的稳定服务,又能提供动态的扩展?


软件上动态的扩展不是很难的事情,但问题是你软件进行了动态扩展,你的硬件也能跟上吗? 如果你硬件不能动态跟上,就意味着更大的灾难。

就好比饭馆就那么大点地方,你摆了10张桌子,客人坐满了,新来的客人还是不要再进来的好,这就是静态spawn,至少能够保证进来的客人有饭吃,能服务的好。

你非要动态spawn,客人来几个,你就加几张桌子,结果摆了100张桌子,所有客人都坐得不舒服,吃不到饭,你觉得这样更好?

Robbin的意思我理解;

这样处理是更合理的一种方式,软件在单台服务器上的服务上限必须加以限定;如果硬件需要扩展,可以采用负载均衡等方法扩展; 这样至少可以保证单台服务器的正常服务.

所以JVM有内存限定,要应用服务器有线程限定,应用程序有并发用户数限定.

可惜的是PythonVM,在Win下,暂时没资源的上限设置; 跑久了,内存就一直在高位了.
0 请登录后投票
   发表时间:2008-12-18  
引用
可惜的是PythonVM,在Win下,暂时没资源的上限设置; 跑久了,内存就一直在高位了.


这个到简单,写个监控shell脚本,定期监测Python进程内存占用,一旦超过限额,杀掉重起。

事实上你目前的方式也是需要python进程定期重起的,只不过是根据进程处理的请求数,达到一个请求数,就杀掉重起了。这还不如我根据内存限额来决定是否需要杀掉重起来的合理。
0 请登录后投票
   发表时间:2008-12-25  
引用
定期监测Python进程内存占用,一旦超过限额,杀掉重起。


有点暴力. 呵呵.
如果系统正在处理某些关键业务,被Kill后的结果可能会出现不可预知的问题了.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics