web 性能压测工具
发布于: 2020 年 07 月 22 日
在运维工作中,压力测试是一项很重要的工作。比如在一个网站上线之前,能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验。但是,在压力测试中存在一个共性,那就是压力测试的结果与实际负载结果不会完全相同,就算压力测试工作做的再好,也不能保证100%和线上性能指标相同。面对这些问题,我们只能尽量去想方设法去模拟。所以,压力测试非常有必要,有了这些数据,我们就能对自己做维护的平台做到心中有数
package mainimport ( "errors" "fmt" "github.com/golang/glog" "net/http" "sync" "time")func main(){ url := "http://www.baidu.com" count := 10 workers := 10 topK := 8 ch := make(chan interface{}, workers) costs := make([]int, count) var wait sync.WaitGroup for i := 0; i < count; i++ { ch <- struct {}{} wait.Add(1) go func(i int) { defer func() { <- ch wait.Done() }() begin := time.Now().UnixNano() _, err := http.Get(url) if err != nil { glog.Error(err) } costs[i]= int(time.Now().UnixNano() - begin) / int(time.Microsecond) }(i) } wait.Wait() c, err := TopKByQuickSort(costs, topK) if err != nil { fmt.Println(err) } fmt.Printf("平均响应时间:%d \n", avg(costs)) fmt.Printf("95%%响应时间 %d \n", c)}func avg(nums []int) int { total := 0 for _, value := range nums { total += value } return total / len(nums)}func TopKByQuickSort(nums []int, k int) (int, error) { length := len(nums) if length < k { return 0, errors.New(fmt.Sprintf("nums length less then %d", k)) } left := 0 right := length pivotIndex := partition(nums, left, right) for pivotIndex != k { if pivotIndex < k { left = pivotIndex + 1 } else { right = pivotIndex } pivotIndex = partition(nums, left, right) } return nums[k], nil}func partition(nums []int, left, right int) int { pivot := nums[left] pos := left for i := left; i < right; i++ { if nums[i] < pivot { nums[i], nums[pos] = nums[pos], nums[i] pos++ } } return pos}
划线
评论
复制
发布于: 2020 年 07 月 22 日阅读数: 47
张磊
关注
还未添加个人签名 2017.10.17 加入
还未添加个人简介
评论