【Gin框架】为什么我压测Gin框架性能只能达到300qps就开始超时呢

qiran87 · 2017-05-02 03:36:55 · 24198 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-05-02 03:36:55 的主题,其中的信息可能已经有所发展或是发生改变。

大家一直都说Go性能很好,而Gin框架更是比较好的web服务框架。但是为什么我用http_load压测Gin,当300qps的时候,就开始出现大量超时。而且压测10min后就开始出现超时现象。

我的Gi操作就是当请求进来后,sleep 1毫秒,然后return ok(1毫秒为模拟服务响应时间,比如查数据库什么的),但是即使这样当压力到达300qps的时候,服务就超时了。。。

请大神们帮忙,是不是我使用的哪个地方有问题?至少Gin也要导到少说1千,多了1万的qps吧?为啥到了300就有问题了。。。

代码如下:

package main

import ( "time"

"gopkg.in/gin-gonic/gin.v1"
"net/http"

)

func main() { route := gin.Default() route.GET("/bin/search", func(c *gin.Context) {

    time.Sleep(time.Millisecond * 1)

    c.String(http.StatusOK, "OK")
})
s := &http.Server{
    Addr:           ":1234",
    Handler:        route,
    ReadTimeout:    1 * time.Second,
    WriteTimeout:   1 * time.Second,
    MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe()

}


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

24198 次点击  
加入收藏 微博
12 回复  |  直到 2019-09-19 10:14:09
DawnYe
DawnYe · #1 · 8年之前

是不是机器到瓶颈了, 看看机器的cpu使用率. 适当加大cpu试试看.

qiran87
qiran87 · #2 · 8年之前
DawnYeDawnYe #1 回复

是不是机器到瓶颈了, 看看机器的cpu使用率. 适当加大cpu试试看.

cpu使用率才到20%,还很小~Gin可以调整使用cpu的个数吗?

ltp5343
ltp5343 · #3 · 8年之前

你改成直接输出hello world看下。是不是sleep会存在go程频繁调度导致。

w287835375
w287835375 · #4 · 8年之前

要在本机测试

aixinaxc
aixinaxc · #5 · 7年之前

应该是你的超时时间设置太短吧,我看你超时时间好像设置也是1s吧,image.png

YoungBlood
YoungBlood · #6 · 7年之前

没问题啊,老铁,刚用wrk压的3.1W

javasgl
javasgl · #7 · 7年之前
~/codes/apkAdmin(master*) » wrk -c 100 -t 10 -d 10m http://127.0.0.1:1234/bin/search 
Running 10m test @ http://127.0.0.1:1234/bin/search
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    17.98ms   39.48ms 987.19ms   92.64%
    Req/Sec     1.32k   612.42     3.77k    65.24%
  7803730 requests in 10.00m, 0.86GB read
  Socket errors: connect 0, read 23, write 0, timeout 0
Requests/sec:  13003.68
Transfer/sec:      1.46MB
------------------------------------------------------------
~/codes/apkAdmin(master*) » wrk -c 100 -t 10 -d 10m http://127.0.0.1:1234/bin/search
Running 10m test @ http://127.0.0.1:1234/bin/search
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    36.36ms   74.70ms 997.60ms   90.05%
    Req/Sec     1.09k   726.72     4.70k    58.11%
  5881268 requests in 10.00m, 661.84MB read
  Socket errors: connect 0, read 309, write 0, timeout 0
Requests/sec:   9800.17
Transfer/sec:      1.10MB
------------------------------------------------------------
~/codes/apkAdmin(master*) » wrk -c 100 -t 10 -d 10m http://127.0.0.1:1234/bin/search
Running 10m test @ http://127.0.0.1:1234/bin/search
  10 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    68.92ms  125.57ms 996.69ms   87.01%
    Req/Sec     0.99k   583.94     3.72k    65.28%
  4554951 requests in 10.00m, 512.58MB read
  Socket errors: connect 0, read 328, write 0, timeout 0
Requests/sec:   7590.57
Transfer/sec:      0.85MB
------------------------------------------------------------

三次压测结果。4核8G Mac. go version go1.8.3 darwin/amd64

arterforyou
arterforyou · #8 · 7年之前

wrk -c 100 -t 10 -d 1m http://127.0.0.1:1234/bin/search Running 1m test @ http://127.0.0.1:1234/bin/search 10 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 19.64ms 69.76ms 1.01s 97.32% Req/Sec 1.07k 310.33 1.78k 76.10% 625373 requests in 1.00m, 70.38MB read Requests/sec: 10405.80 Transfer/sec: 1.17MB

kexirong
kexirong · #9 · 7年之前

没用过gin,如果是每个请求都开一个goroutine 处理,问题可能出在这,gouroutine 数量太多了。

hkloudou
hkloudou · #10 · 6年之前

300的话基本就是 mac系统限制的问题 mac系统会限制连接数

xiaoxiaogo
xiaoxiaogo · #11 · 6年之前
kexirongkexirong #9 回复

没用过gin,如果是每个请求都开一个goroutine 处理,问题可能出在这,gouroutine 数量太多了。

难道不应该一个处理一个协程吗?有其他什么方案?

Bingkeluo
Bingkeluo · #12 · 5年之前

我不是特别了解压测相关,但以前写代码的时候连接池的链接数不能设置特别大,最好是cpu*2,你可以试试。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传