«

golang 处理http请求 并发测试

时间:2023-12-28 14:22     作者:xiang     分类: golang


目的测试慢接口是否会阻塞服务,导致其他正常接口无法请求.

测试代码

package main

import (
    "fmt"
    "net/http"
    "time"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World")
}

func sleepHandler(w http.ResponseWriter, r *http.Request) {
    time.Sleep(2 * time.Second)
    fmt.Fprintf(w, "you are sleeping")
}

func main() {
    http.HandleFunc("/", helloHandler)

    http.HandleFunc("/sleep", sleepHandler)

    fmt.Println("Starting server at port 8081")
    if err := http.ListenAndServe(":8081", nil); err != nil {
        fmt.Println("Failed to start server:", err)
    }
}

方法如下:

A接口sleep2秒,
B接口hello world,

单独压测hello word接口
wrk -c 1000 -t 10 -d 10s http://127.0.0.1:8081

QPS 315572.06

同时压测 sleep接口 和 hello world接口
wrk -c 1000 -t 10 -d 15s http://127.0.0.1:8081/sleep
wrk -c 1000 -t 10 -d 10s http://127.0.0.1:8081

sleep接口 QPS 463.59 全部timeout
hello world接口 QPS 329326.68 几乎没有被sleep接口影响.

同样的测试,来测试php-fpm,大概就知道php-fpm有什么性能上的问题.
还有人在说什么 php项目的瓶颈是数据库性能,之类.
用了swoole框架,哪怕某些接口数据库查询慢,也就单单是那接口慢,不会影响到其他的接口

标签: golang 压测