web 性能压测工具

发布于: 13 小时前

在运维工作中,压力测试是一项很重要的工作。比如在一个网站上线之前,能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验。但是,在压力测试中存在一个共性,那就是压力测试的结果与实际负载结果不会完全相同,就算压力测试工作做的再好,也不能保证100%和线上性能指标相同。面对这些问题,我们只能尽量去想方设法去模拟。所以,压力测试非常有必要,有了这些数据,我们就能对自己做维护的平台做到心中有数

package main
import (
"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
}



用户头像

张磊

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
web 性能压测工具