摘要:本文在虚拟机上测试了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占用时长(%) |
|---|---|---|---|---|---|---|
| Kangle | 38.01 | 8.79 | 78.23 | 7901 | 0 | 27.44 |
| Nginx | 59.41 | 12.79 | 129.99 | 5053 | 0 | 12.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占用时长(%) |
|---|---|---|---|---|---|---|
| Kangle | 1770 | 248.31 | 1930 | 8205 | 0 | 30.41 |
| Nginx | 1050 | 584.63 | 2000 | 5068 | 4763 | 13.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) |
|---|---|---|---|---|---|
| Kangle | 0.02 | 6.25 | 6.75 | 8.38 | 263.82 |
| Nginx | 0.03 | 5.61 | 5.78 | 9.21 | 0.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) |
|---|---|---|---|---|---|
| Kangle | 0.08 | 2.06 | 2.13 | 7.21 | 0 |
| Nginx | 0.08 | 1.96 | 2.04 | 8.60 | 0 |
总结
从上面的测试可以得出结论:
对于动态网页:
- 在低压环境下,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 国际许可协议。转载请注明出处!



Nginx 除了目前在 upstream 端不支持 h2/h3 外,几乎没什么短板。
By 涛叔 at October 15th, 2025 at 11:53 am.
拿这两个nginx也对比一下
Tengine-3.1.0和OpenResty 1.27.1.2
By 无名 at September 9th, 2025 at 02:17 am.
我去 看这个网站样子 就知道 和小樱有那么点关系,果然不错。。。。一样的喜好。。无语!
By 斩上月 at August 29th, 2025 at 09:41 pm.
@斩上月
By 小欢 at August 29th, 2025 at 09:54 pm.
大佬,能不能把caddy也加入对比
By July at August 16th, 2025 at 10:01 am.
文中写的评测,只有6%的成功访问率,,nginx基本是报废了,这就起码15倍差距了
By 小樱 at May 16th, 2025 at 11:53 pm.
然后性能非常高,是nginx的数百倍,测试结果看起来不止,如果是https,那么差距会更明显
3.6.0新版也开始支持调用系统缓存,但是目前感觉来说不太推荐新版
By 小樱 at May 16th, 2025 at 11:51 pm.
@小樱
没想到小樱大佬竟然也看到我博客了
哈哈
我当时测了一下,3.6.0性能下降得厉害,目前还是3.5好用
By 小欢 at May 17th, 2025 at 12:10 am.
@小欢
是这样的,3.6.0主要是拆分模块化和使用vue设计新的ui,然后编译方式又改了不是以前那种40多MB的静态编译,性能上肯定比不了3.5.x
不过在2024年12月初提交代码是勉强算优化了点性能
By 小樱 at May 17th, 2025 at 06:17 am.