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

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

浏览 31153 次
该帖已经被评为精华帖
作者 正文
   发表时间:2008-12-09  
ray_linn 写道
终于找到点东西了:

“NPTL uses a similar approach to LinuxThreads, in that the primary abstraction known by the kernel is still a process, and new threads are created with the clone() system call (called from the NPTL library). ”


总来来说内核决定了一切,该是进程还是进程,该是线程还是线程。

大锅,俺没有看出来你的这个引用有说明什么特殊的问题.

这段引用只是在描述NPTL和linuxthreads这两个模块产生的线程对内核来说其他都是进程.没有什么实质性的说明啊.

有人说"2.4内核的多线程无法使用多个cpu,一个进程的线程都被限制在同一个cpu上运行",不过我的内核是2.6的,而且我并没有说我出现一个核被使用,另外一个核没有被使用的情况.由此可见,在2.6内核中多线程是可以使用多个cpu的,但是正如robbin大哥所说,由于全局锁的问题,导致其并不能完全充分的使用这两个核
0 请登录后投票
   发表时间:2008-12-09   最后修改:2008-12-09
Windows操作系统在多CPU服务器上面的表现不佳,而且可以说是非常糟糕!这是我在HP公司,以及Dell公司从事服务器产品线咨询的两位朋友先后告诉我的情况。我那位Dell的朋友甚至告诉我,他们有些客户碰到的问题,必须向微软公司索要某些特定的Windows内核补丁,才能恢复正常。(有些问题微软公司会告诉说新补丁还没有出,那就只好继续忍受)

BTW: 其实我很奇怪的是,你在Dell公司的哪个部门工作,如果你是负责服务器产品线的,这些问题你怎么会都不知道?如果是公司内部的IT部门,那我就理解了。
0 请登录后投票
   发表时间:2008-12-09   最后修改:2008-12-09
ahuaxuan 写道
ray_linn 写道
终于找到点东西了:

“NPTL uses a similar approach to LinuxThreads, in that the primary abstraction known by the kernel is still a process, and new threads are created with the clone() system call (called from the NPTL library). ”


总来来说内核决定了一切,该是进程还是进程,该是线程还是线程。

大锅,俺没有看出来你的这个引用有说明什么特殊的问题.

这段引用只是在描述NPTL和linuxthreads这两个模块产生的线程对内核来说其他都是进程.没有什么实质性的说明啊.

有人说"2.4内核的多线程无法使用多个cpu,一个进程的线程都被限制在同一个cpu上运行",不过我的内核是2.6的,而且我并没有说我出现一个核被使用,另外一个核没有被使用的情况.由此可见,在2.6内核中多线程是可以使用多个cpu的,但是正如robbin大哥所说,由于全局锁的问题,导致其并不能完全充分的使用这两个核



我奇怪的是你这一段"两个核心可以”同时“控制不同的进程。而线程模型下是单进程的,有一个核就被浪费了"...如何被浪费了?


俺这一段的主旨是想说内核里运行的是啥,就该用啥.linux下就该用进程,windows下就该用线程,无须费老大力气去做测试.
0 请登录后投票
   发表时间:2008-12-10   最后修改:2008-12-10
ray_linn 写道

我奇怪的是你这一段"两个核心可以”同时“控制不同的进程。而线程模型下是单进程的,有一个核就被浪费了"...如何被浪费了?

之前我的理解是错误的,误认为线程模型下,没有完全使用多核的优势,这个错误的理解robbin大哥已经指出了啊.

ray_linn 写道

俺这一段的主旨是想说内核里运行的是啥,就该用啥.linux下就该用进程,windows下就该用线程,无须费老大力气去做测试.

做测试的原因是为了严谨一点,君不见网上n多的文章都说线程模型快,他们既没有测全面,也没有分析全面,误导大众.我只是想还进程模型一个清白,呵呵

-------------------------------------------------

不过我很奇怪的是,在windows下多线程真的可以使用多核吗,人家内部人事都说了,windows对多cpu支持比较差,你应该知道一点吧
0 请登录后投票
   发表时间:2008-12-10   最后修改:2008-12-10
ahuaxuan 写道

不过我很奇怪的是,在windows下多线程真的可以使用多核吗,人家内部人事都说了,windows对多cpu支持比较差,你应该知道一点吧



理论上来说,我觉得这应该没问题的,完全取决于内核如何调配CPU资源的问题。多线程的模式不单单是MS一家,许多比MS更优秀的OS/2(NT核心), MAC OS都是采用thread而不是进程的方式。这个内部人士难道不知道他的公司里几乎都是windows服务器么?

linux下的线程说到底就是个“仿真线程”进程,也就无怪呼慢了,NTPL我猜想是利用了"kernel thread"--(强烈鄙视这个混淆视听的名字)进程来提高效率,但从kernel看出来的话,到底还是进程。至于2.4上,如果开启的是linuxThread,那慢也是自然的。

所以我想首先请你确认一下用的是NTPL还是linuxthread,其次我想说的,linux上的thread不是真的thread,比较起来意义也不大。


你要测试线程的话,不喜欢windows也可以用Sun Solaris,我只是举一个典型的线程核心的os,robbin非要牵扯出对windows的讨伐,呵呵。

我们可以姑且认为solaris和linux的os效率接近,那么在两个os上比较一下django的performance吧。
0 请登录后投票
   发表时间:2008-12-10  
ahuaxuan 写道
做测试的原因是为了严谨一点,君不见网上n多的文章都说线程模型快,他们既没有测全面,也没有分析全面,误导大众.我只是想还进程模型一个清白,呵呵


我觉得首先还是应该问问他们的测试环境和测试方法,光看测试结果没有任何意义。

学过工科的,大概都学过测量学吧?
0 请登录后投票
   发表时间:2008-12-10  
ray_linn 写道

我觉得首先还是应该问问他们的测试环境和测试方法,光看测试结果没有任何意义。

学过工科的,大概都学过测量学吧?


我还真没有学过测量学,不过文章开头的那两个地址的测试都太单薄了,没有环境,没有参数,啥都没有结论就出来.

我的测试结果我在前面的帖子里就说明了,在linux kernel2.6且机器多核的场景下得到的结论,如果按你所说,soloris,mac,windos都测一遍其实意义不大.甚至什么人去关心这种事情.


所以要指出我的结论是错误的,前提也应该是在linux kernel2.6,机器是多核的前提下
0 请登录后投票
   发表时间:2008-12-10   最后修改:2008-12-10
PS: 我再多嘴问一句:

AB和django是在两台机上,还是在一台机器上? 如果是一台机器,那你的数据应该就有问题了。AB应该也是多线程来模拟多用户的,可能会对多线程模型造成影响。


I know for realistic benchmarks you shouldn't run it on the same server.
0 请登录后投票
   发表时间:2008-12-10  
ray_linn 写道
PS: 我再多嘴问一句:

AB和django是在两台机上,还是在一台机器上? 如果是一台机器,那你的数据应该就有问题了。AB应该也是多线程来模拟多用户的,可能会对多线程模型造成影响。


I know for realistic benchmarks you shouldn't run it on the same server.

这个应该没有什么关系,我测线程模型的时候cpu根本就没有能得到充分的利用.大概70-80%,所以不会有什么影响,而且ab的多线程对django的多线程根本不在同一个进程内,何来影响之说呀
0 请登录后投票
   发表时间:2008-12-13  
robbin 写道
ahuaxuan 写道
robbin 写道

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

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

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


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


这样感觉是一个饭馆,只要开张,只有10张桌子, 如果客人真的来多了,也就真的没办法服务了.
不知道有没有更好的办法,即能解决服务器的稳定服务,又能提供动态的扩展?
0 请登录后投票
论坛首页 编程语言技术版

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