Nginx与Kangle性能对比

Nginx与Kangle性能对比

摘要:本文在虚拟机上测试了Nginx和Kangle两款Web服务器在动态页面、静态资源和反向代理方面的性能。测试结果显示:低压环境下,Kangle动态页面响应更快,但CPU占用更高;高压环境下,Kangle吞吐量更大,无超时,Nginx有大量请求超时。引言Nginx一向以其高性能著称,而Kangle也自称是轻量、高性能的Web和反代服务器。为了测试这两款Web服务器在动态页面、静态资源和反向代理方面的性能,我在虚拟机上搭建了一个Typecho博客,在宿主机上使用wrk和ab工具进行压力测试,使用dool工具监控系统的CPU、IO和内存情况,再通过脚本计算平均值。 注意:由于虚拟机环境及其他因素的影响,本次测试的结果未必准确,仅供参考。欢迎对测试过程中需要改进的地方留言指正。

测试环境使用Debian12虚拟机,配置为8核心、8G内存,使用默认内核参数。动态页面测试:PHP版本为8.3,安装Typecho 1.2.1,使用默认主题和默认的文章、评论数据。静态资源测试:我在Ubuntu官网找的Ubuntu 24.04.1 LTS镜像,大小为2.6G。反向代理测试:反代vultr洛杉矶测速节点的1G测试文件。测试的Kangle版本为3.5.21.16,测试的Nginx版本为1.22.1。测试动态页面时,Nginx和Kangle均使用Brotli页面压缩,压缩等级为5。测试静态资源时,Nginx和Kangle均使用默认缓存配置,其中Nginx使用操作系统的文件系统缓存;Kangle默认不缓存本地的静态大文件(普通的静态文件JS、CSS、图片等是会缓存的,详见下文)。测试反向代理时,Nginx启用proxy_cache,最大缓存空间为5G;Kangle配置2G内存缓存、5G磁盘缓存。

动态页面测试动态页面低压测试测试命令为:

wrk -t10 -c10 -d30s --latency http://192.168.17.135wrk将使用10个线程,创建10个连接,持续进行30秒的压力测试。

Kangle-动态低压wrk输出页面的平均响应时间为38.01ms、标准差为8.79ms、最大响应时间为78.23ms;有71.4%的请求延迟在平均延迟的一个标准差范围内波动,有99%的请求响应时间在59.09ms内。30秒内共发送7901个请求,没有请求超时。

资源占用情况Kangle的CPU的占用较高,用户进程占27.44%的时间,CPU空闲时间仅占58.06%。

Nginx-动态低压wrk输出页面的平均响应时间为59.41ms、标准差为12.79ms、最大响应时间为129.99ms;有70.85%的请求延迟在平均延迟的一个标准差范围内波动,有99%的请求响应时间在96.07ms内。30秒内共发送5053个请求,没有请求超时。

资源占用情况Nginx的CPU占用显然更低,用户进程占用了12.34%的时间,CPU空闲时间占82.48%。

动态低压-对比Web服务器平均响应时间(ms)标准差(ms)最大响应时间(ms)总发送请求(个)超时请求(个)CPU占用时长(%)Kangle38.018.7978.237901027.44Nginx59.4112.79129.995053012.34动态页面高压测试测试命令为:

wrk -t10 -c500 -d30s --latency http://192.168.17.135wrk将使用10个线程,创建500个连接,持续进行30秒的压力测试。

Kangle-动态高压wrk输出页面的平均响应时间为1.77s、标准差为248.31ms、最大响应时间为1.93s;有94.8%的请求延迟在平均延迟的一个标准差范围内波动,有99%的请求响应时间在1.91s内。30秒内共发送8205个请求,没有请求超时。Kangle的响应时间明显地增加了。

资源占用情况用户进程占用了30.41%的时间,CPU空闲时间占54.75%。

Nginx-动态高压wrk输出页面的平均响应时间为1.05s、标准差为584.63ms、最大响应时间为2s;有56.07%的请求延迟在平均延迟的一个标准差范围内波动,有99%的请求响应时间在1.98s内。30秒内共发送5068个请求,有4763个请求超时。Nginx的平均响应时间的增幅比Kangle低,但吞吐量明显低于Kangle。

资源占用情况用户进程占用了13.75%的时间,CPU空闲时间占81.17%。

动态高压-对比Web服务器平均响应时间(ms)标准差(ms)最大响应时间(ms)总发送请求(个)超时请求(个)CPU占用时长(%)Kangle1770248.3119308205030.41Nginx1050584.6320005068476313.75静态资源测试测试命令为:

ab -n 10 -c 10 http://192.168.17.135/ubuntu.isoKangle-本地静态测试通常情况下,Kangle将直接从磁盘读取并输出本地的大文件而不写入缓存。

这是因为Kangle有两种缓存模式:普通缓存和智能缓存。普通缓存通常设置的值比较小,在本次测试中设置为5M;智能缓存支持断点缓存,通常值较大,设置为2G。然而,Kangle只会在普通缓存时缓存本地的各类静态文件到内存或磁盘中,而智能缓存通常只缓存来自源站的文件,并且不会走内存,只存在磁盘中。Kangle本地静态-ab输出Kangle每秒响应0.02个请求,平均响应时间为6.25分,最大响应时间为6.75分。

Kangle本地静态-资源占用由于Kangle没有使用到缓存,因此产生了263.82KB/s的磁盘读写,影响了速度。

Nginx-本地静态测试Nginx默认使用文件系统缓存,无需额外配置。在测试前,已经通过预先请求产生文件系统缓存。

Nginx本地静态-ab输出Nginx每秒响应0.03个请求,平均响应时间为5.61分,最大响应时间为5.78分。

Nginx本地静态-资源占用在预先请求时,文件被写入到了操作系统的文件系统缓存中,可以看到Cached存储了6048M的数据。在输出文件时,完全通过内存缓存输出,整个过程几乎没有出现磁盘输出,极大地提高了响应速度。

本地静态-对比Web服务器响应请求(个/s)平均响应时间(min)最大响应时间(min)CPU占用时长(%)IO占用(KB/s)Kangle0.026.256.758.38263.82Nginx0.035.615.789.210.00反向代理测试测试命令为:

ab -n 10 -c 10 http://192.168.17.135/vultr.com.1000MB.binKangle和Nginx在反向代理时都会使用缓存,因此下面的所有测试都会进行预先请求。

Kangle-反向代理测试Kangle反代-ab输出Server software显示nginx是因为vultr源站使用nginx,kangle保留了nginx的响应头Kangle每秒响应0.08个请求,平均响应时间为2.06分,最大响应时间为2.13分。

Kangle反代-资源占用Kangle的内存缓存被计算在Kangle自身的占用中,而非操作系统的缓存中。

Nginx-反向代理测试Nginx反代-ab输出Nginx每秒响应0.08个请求,平均响应时间为1.96分,最大响应时间为2.04分。

Nginx反代-资源占用Nginx使用操作系统的文件系统缓存,因此性能更佳。

反向代理-对比Web服务器响应请求(个/s)平均响应时间(min)最大响应时间(min)CPU占用时长(%)IO占用(KB/s)Kangle0.082.062.137.210Nginx0.081.962.048.600总结从上面的测试可以得出结论:对于动态网页:

在低压环境下,Kangle的性能优于Nginx:Kangle的响应时间比Nginx快了36%,响应时间的波动明显比Nginx更小,吞吐量也比Nginx高36%。在高压环境下,Nginx的响应速度比Kangle快了40%,但吞吐量灾难性地下降:5068次请求中仅有6%的请求得到了响应,其余均超时;而Kangle的响应时间波动比Nginx小、分布比Nginx更均匀,而且响应成功率达到了100%。作为稳定性和高连接数的代价,在处理动态网页时,Kangle的CPU使用量比Nginx高约55%。对于本地静态资源:

对于较大的静态文件,Nginx使用操作系统的文件系统缓存,响应速度比Kangle快了10%;Kangle不会使用任何方式进行缓存,因此响应速度很大程度上依赖磁盘IO性能,在磁盘性能较差的情况下,响应速度的差距可能会进一步扩大。对于较小的静态文件,由于Kangle会使用普通缓存将之缓存到内存或磁盘中,和Nginx的性能差距会减小,但由于Kangle的缓存不使用操作系统自身的文件系统缓存,因此性能上仍有差距。Nginx和Kangle使用的CPU资源几乎一致。对于反向代理的静态文件:

虽然Kangle和Nginx都会使用缓存,但Nginx在缓存时会使用文件系统缓存,而Kangle的缓存存储在自身内存中,存储方式的不同导致了5%的响应速度差异。在内存较小的情况下,操作系统的文件系统缓存无法完整地读入文件数据,Nginx和Kangle都必须从磁盘中读入缓存,此时两者之间的响应速度差异较小,但Nginx仍然占优。Nginx和Kangle使用的CPU资源几乎一致。一句话总结:Kangle在动态网页上有显著的性能优势,而Nginx在静态资源上的表现则更好。所谓日久生情,我最初建站时使用了Kangle,一直到现在也仍然在使用Kangle。这次测试的结果证明我的选择还算不错 我爱Kangle必须指出的是:虽然Kangle在动态网页下有更好的性能,但Kangle的社区规模相较于Nginx实在是太小了。这意味着,如果在使用Web服务器的时候碰到某些问题,Nginx的用户可能可以直接从谷歌上找到类似问题的解答,而Kangle用户受限于社区规模,未必能找到有相同问题的人,然后就只能自己琢磨或者去问其他Kangle用户了 静态网页相较于动态网页有非常明显的速度优势,对于博客这类网站,使用Hexo等静态框架的博主也越来越多了。如果你希望用Web服务器做反向代理或者提供静态页面访问,Nginx无疑是更好的选择。无论如何,选择Web服务器还是要仔细考虑的!

本文作者:小欢

本文链接:Nginx与Kangle性能对比 - https://www.cups.moe/archives/nginx-vs-kangle.html

版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 小欢博客 所有,遵循知识共享署名-相同方式共享 4.0 国际许可协议。转载请注明出处!

相关推荐

共享手机,拿什么撬开市场胃口
det365在线平台

共享手机,拿什么撬开市场胃口

📅 07-02 👁️ 9361
送鲜花还是扔牛粪?倩女幽魂家园际遇玩法
365速发国际平台登陆

送鲜花还是扔牛粪?倩女幽魂家园际遇玩法

📅 06-30 👁️ 8469
小程序究竟还能火多久?
365速发国际平台登陆

小程序究竟还能火多久?

📅 08-18 👁️ 2515