swift - Kitura 每秒请求速度慢或低?

标签 swift kitura

我已经下载了 Kitura 0.20 并为 swift build -c release 上的基准创建了一个新项目

import Kitura

let router = Router()

router.get("/") {
request, response, next in
    response.send("Hello, World!")
    next()
}

Kitura.addHTTPServer(onPort: 8090, with: router)
Kitura.run()

与可以达到 400k+ 请求/秒的 Zewo 和 Vapor 相比,分数似乎较低?

MacBook-Pro:hello2 yanli$ wrk -t1 -c100 -d30 --latency http://localhost:8090
Running 30s test @ http://localhost:8090
  1 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   415.36us  137.54us   3.09ms   91.11%
    Req/Sec     5.80k     2.47k    7.19k    85.71%
  Latency Distribution
     50%  391.00us
     75%  443.00us
     90%  513.00us
     99%    0.93ms
  16229 requests in 30.01s, 1.67MB read
  Socket errors: connect 0, read 342, write 55, timeout 0
Requests/sec:    540.84
Transfer/sec:     57.04KB

最佳答案

我怀疑您的临时端口已用完。您的问题可能与此问题相同:'ab' program freezes after lots of requests, why?

Kitura 目前不支持 HTTP keepalive,因此每个请求都需要一个新连接。这种情况的一个症状是,无论您尝试驱动负载多少秒,您都会看到类似数量的已完成请求(在您的示例中为 16229)。

在 OS X 上,默认情况下有 16,384 个可用的临时端口,除非您调整网络设置,否则这些端口将很快耗尽。

[1] http://danielmendel.github.io/blog/2013/04/07/benchmarkers-beware-the-ephemeral-port-limit/ [2]https://rolande.wordpress.com/2010/12/30/performance-tuning-the-network-stack-on-mac-osx-10-6/

我的方法是减少最大段生命周期可调参数(默认为 15000,即 15 秒)并在基准测试时临时增加可用端口的范围,例如:

sudo sysctl -w net.inet.tcp.msl=1000
sudo sysctl -w net.inet.ip.portrange.first=32768
<run benchmark>
sudo sysctl -w net.inet.tcp.msl=15000
sudo sysctl -w net.inet.ip.portrange.first=49152

关于swift - Kitura 每秒请求速度慢或低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38160261/

相关文章:

swift - Kitura 未能部署到 bluemix

ios - 带有对象映射器的动态键

swift - AvFoundation框架,AvPlayer暂停方法导致应用程序最小化后崩溃

Facebook Graph API 没有返回每个 friend 的分数

swift - 无法在 Xcode 8 上使用 Kitura 编译 Swift 包

swift - 从AWS EC2下载到iOS应用程序时出现超时问题

swift - 从随机排列的数组中设置按钮的标题 - Swift

ios - 以编程方式将 View 对象定位在其最近邻居的下方

swift - 从 Framework 内部记录消息到 XCode 控制台

SwiftKueryPostgresql 连接失败,错误为 "Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)"