mirror of
https://github.com/labring/FastGPT.git
synced 2026-04-27 02:08:10 +08:00
cc3a91d009
* Opensandbox (#6651) * volumn manager * feat: opensandbox volumn * perf: action (#6654) * perf: action * doc * doc * deploy tml * update template
79 lines
3.3 KiB
Bash
79 lines
3.3 KiB
Bash
#!/bin/bash
|
|
# FastGPT Sandbox Python 压测脚本
|
|
# 用法: SANDBOX_TOKEN=xxx ./bench-sandbox-python.sh
|
|
# CODE_SANDBOX_URL=http://host:3000 SANDBOX_TOKEN=xxx ./bench-sandbox-python.sh
|
|
|
|
set -eo pipefail
|
|
|
|
BASE="${CODE_SANDBOX_URL:-http://localhost:3000}"
|
|
TOKEN="${SANDBOX_TOKEN:-}"
|
|
DURATION="${BENCH_DURATION:-10}"
|
|
|
|
# 构建 npx autocannon 认证参数
|
|
AUTH_ARGS=""
|
|
if [ -n "$TOKEN" ]; then
|
|
AUTH_ARGS="-H Authorization=Bearer%20${TOKEN}"
|
|
fi
|
|
|
|
echo "========================================"
|
|
echo " FastGPT Sandbox Python 压测"
|
|
echo " 服务: $BASE"
|
|
echo " 认证: $([ -n "$TOKEN" ] && echo '已配置' || echo '未配置')"
|
|
echo "========================================"
|
|
|
|
# 健康检查
|
|
HEALTH=$(curl -sf "$BASE/health" 2>/dev/null) || {
|
|
echo "错误: Sandbox 服务未启动 ($BASE/health)"
|
|
exit 1
|
|
}
|
|
echo "健康状态: $(echo "$HEALTH" | grep -o '"status":"[^"]*"' || echo "$HEALTH")"
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "▶ 测试 1: 普通函数 (简单计算)"
|
|
echo " 并发: 50 持续: ${DURATION}s"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
npx autocannon -c 50 -d "$DURATION" -m POST \
|
|
-H "Content-Type=application/json" \
|
|
$AUTH_ARGS \
|
|
-b '{"code":"def main(variables):\n return 1 + 1","variables":{}}' \
|
|
"${BASE}/sandbox/python"
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "▶ 测试 2: 长时间IO函数 (sleep 500ms)"
|
|
echo " 并发: 50 持续: ${DURATION}s"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
npx autocannon -c 50 -d "$DURATION" -m POST \
|
|
-H "Content-Type=application/json" \
|
|
$AUTH_ARGS \
|
|
-b '{"code":"import time\ndef main(variables):\n time.sleep(0.5)\n return \"done\"","variables":{}}' \
|
|
"${BASE}/sandbox/python"
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "▶ 测试 3: 高CPU函数 (大量计算)"
|
|
echo " 并发: 10 持续: ${DURATION}s"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
npx autocannon -c 10 -d "$DURATION" -m POST \
|
|
-H "Content-Type=application/json" \
|
|
$AUTH_ARGS \
|
|
-b '{"code":"import math\ndef main(variables):\n s=0\n for i in range(5000000):\n s+=math.sqrt(i)\n return s","variables":{}}' \
|
|
"${BASE}/sandbox/python"
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "▶ 测试 4: 高内存函数 (大列表)"
|
|
echo " 并发: 10 持续: ${DURATION}s"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
npx autocannon -c 10 -d "$DURATION" -m POST \
|
|
-H "Content-Type=application/json" \
|
|
$AUTH_ARGS \
|
|
-b '{"code":"def main(variables):\n arr = [i*i for i in range(2000000)]\n return len(arr)","variables":{}}' \
|
|
"${BASE}/sandbox/python"
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo " 压测完成!"
|
|
echo "========================================"
|