Blame view

bb.sh 3.18 KB
00c8ddb9   tangwang   suggest rank opti...
1
  #!/bin/bash
00c8ddb9   tangwang   suggest rank opti...
2
  
e38dc1be   tangwang   融合公式参数调整、以及展示信息优化
3
4
5
6
7
8
9
10
  # 配置参数
  FILE="/home/ubuntu/rerank_test/titles.1.8w"
  LINES=400
  REPEAT=10
  URLS=(
      "http://localhost:6007/rerank"
      "http://172.19.27.9:9997/v1/rerank"
  )
00c8ddb9   tangwang   suggest rank opti...
11
  
e38dc1be   tangwang   融合公式参数调整、以及展示信息优化
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
  # 检查必要命令
  if ! command -v jq &> /dev/null; then
      echo "错误:jq 未安装,请先安装 jq。"
      exit 1
  fi
  
  # 检查文件是否存在
  if [ ! -f "$FILE" ]; then
      echo "错误:文件 $FILE 不存在。"
      exit 1
  fi
  
  # 读取前 LINES 行,构建 docs 数组的 JSON
  echo "正在从 $FILE 读取前 $LINES 行..."
  docs_json=$(head -n "$LINES" "$FILE" | jq -R . | jq -s .)
  if [ -z "$docs_json" ]; then
      echo "错误:读取文件失败或文件为空。"
      exit 1
  fi
  
  # 构建完整请求体 JSON
  base_json='{"query": "健身女生T恤短袖", "top_n": 386, "normalize": true}'
  full_json=$(echo "$base_json" | jq --argjson docs "$docs_json" '. + {docs: $docs}')
  if [ -z "$full_json" ]; then
      echo "错误:构建 JSON 失败。"
      exit 1
  fi
  
  # 创建临时文件存放请求体
  temp_file=$(mktemp)
  echo "$full_json" > "$temp_file"
  echo "请求体已保存到临时文件: $temp_file"
  
  # 函数:测试单个 URL
  test_url() {
      local url=$1
      local durations=()
      local failed=0
  
      echo "========================================"
      echo "开始测试 URL: $url"
      echo "重复次数: $REPEAT"
      echo "----------------------------------------"
  
      for i in $(seq 1 $REPEAT); do
          # 开始计时(纳秒)
          start=$(date +%s%N)
  
          # 发送请求,-s 静默,-o /dev/null 丢弃响应体,--data-binary 直接读取文件
          http_code=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$url" \
              -H "Content-Type: application/json" \
              --data-binary @"$temp_file")
  
          # 结束计时
          end=$(date +%s%N)
          duration=$(( (end - start) / 1000000 ))  # 毫秒
  
          # 判断是否成功(HTTP 2xx 视为成功)
          if [[ "$http_code" -ge 200 && "$http_code" -lt 300 ]]; then
              durations+=($duration)
              echo "第 $i 次: 耗时 ${duration} ms (HTTP $http_code)"
          else
              echo "第 $i 次: 失败 (HTTP $http_code) 耗时 ${duration} ms"
              failed=$((failed + 1))
          fi
  
          # 可选:每次请求间隔一点时间,避免过载(取消注释以启用)
          # sleep 0.1
      done
  
      # 统计成功请求的耗时
      local count=${#durations[@]}
      echo "----------------------------------------"
      if [ $count -eq 0 ]; then
          echo "所有请求均失败,无法统计耗时。"
          return
      fi
  
      # 计算总和、平均值、最小值、最大值
      local sum=0
      local min=${durations[0]}
      local max=${durations[0]}
      for d in "${durations[@]}"; do
          sum=$((sum + d))
          (( d < min )) && min=$d
          (( d > max )) && max=$d
      done
      local avg=$((sum / count))
  
      echo "成功请求数: $count / $REPEAT"
      echo "失败请求数: $failed"
      echo "平均耗时: $avg ms"
      echo "最小耗时: $min ms"
      echo "最大耗时: $max ms"
      echo "========================================"
  }
  
  # 依次测试每个 URL
  for url in "${URLS[@]}"; do
      test_url "$url"
  done
  
  # 清理临时文件
  rm -f "$temp_file"
  echo "临时文件已删除。"