lighttpd VS ngix 性能比较,技术架构比较

      最近在公司里进行了一次深入HTTP分享,有同事提到了lighttpd在处理大文件时性能很差,不如ngix. 之前也没有对ngix研究过,所以无法评估.加上这么多年的linux上大型系统的开发经验和仔细研究过lighttpd 的代码,当时对同事的答复是估计ngix也提高不了到哪里去,最多10%,只是代码写法的一点差异. 同事们不太相信. 结束后上google查了一下ngix的资料,并下载了原代码进行研究(个人喜好从代码级研究认证,不喜欢看网上的评论,尤其是国内的评论,很多评论是没有经过深入研究之后的误人之第),并从网上找了一些评论,果然有看到lighttpd大文件下载或大并发连接性能不好之类的评论.

      经过仔细研究ngix代码之后发现,ngix的技术架构是结合lighttpd和apache之长, module的写法基本上与apache 一致,非常类似; 网络处理的架构与lighttpd类似,都是使用单进程单线程方式,并使用异步I/O,sendfile等,在linux2.6内核都使用epoll处理网络事件,因此很难看出本质上的区别,唯一的区别是ngix充分利用了C语言的特性来节省内存(如bit位). 

      经过20000个并发连接测试10万次小文件下载测试,两者性能上差别不大,CPU消耗都在10%以内; 再进行大文件测试10万次下载,并发2000,两者相差不大,CPU消耗都是在4%以内,lighttpd的CPU消耗甚至还小一点. 这个时候的网络带宽已经完全被消耗干净,充分利用了网络带宽.

     因此就非常奇怪为什么网上有评价lighttpd性能差的原因? 仔细思考后,估计是lighttpd的event_handler配置问题,因为默认event_handler是使用poll, 而不是epoll(linux). 然后注释掉#server.event-handler="linux-sysepoll" 再进行性能测试,果然发现lighttpd的CPU消耗就上去了. 看来网上的评论就是这个缘故,使用了默认配置,而ngix默认配置就是使用了epoll.

     说明了国内很多人没有仔细研究过系统,就对系统枉加评论,结果误倒了很多人.这也是我听到同事说什么什么问题是网上评论的时候,我总是怀疑其正确性的原因.

你可能感兴趣的:(apache,linux,网络,Module,测试,lighttpd)