Files
fiscoBcosJDK/doc/服务器部署运行指南.md
2026-02-11 10:22:09 +08:00

14 KiB
Raw Permalink Blame History

服务器部署运行指南

TPS测试工具服务器部署和使用说明


📦 打包部署包

1. 在本地打包

cd /Users/kiro/IdeaProjects/contract

# 清理并打包(使用 fatJar 任务)
./gradlew clean fatJar

# 查看生成的 jar 文件
ls -lh build/libs/tps-test.jar

输出: build/libs/tps-test.jar (约 25MB包含所有依赖

注意: 必须使用 ./gradlew fatJar 命令打包这样才会生成包含所有依赖的可执行jar文件。

2. 准备部署文件

需要上传到服务器的文件:

部署包/
├── tps-test.jar              # 可执行jar必需
└── config.toml               # 链连接配置(必需)

从本地复制配置文件:

# 复制配置文件到 build 目录
cp src/main/resources/config.toml build/libs/

🚀 上传到服务器

方法1使用 SCP 上传

# 1. 创建本地部署目录
cd /Users/kiro/IdeaProjects/contract
mkdir -p deploy
cp build/libs/tps-test.jar deploy/
cp src/main/resources/config.toml deploy/

# 2. 上传到服务器
scp -r deploy/* root@121.196.226.157:~/tps-test/

# 如果需要上传到第二台服务器
scp -r deploy/* root@8.137.93.11:~/tps-test/

方法2使用 rsync 上传(推荐)

# 自动创建目录并上传
rsync -avz --progress \
  build/libs/tps-test.jar \
  src/main/resources/config.toml \
  root@121.196.226.157:~/tps-test/

⚙️ 服务器端配置

1. SSH 登录到服务器

ssh root@121.196.226.157

2. 检查 Java 环境

# 检查 Java 版本(需要 JDK 11+
java -version

# 如果没有安装,安装 OpenJDK
# Ubuntu/Debian
sudo apt update && sudo apt install -y openjdk-11-jdk

# CentOS/RHEL
sudo yum install -y java-11-openjdk

3. 验证文件

cd ~/tps-test
ls -lh

# 应该看到:
# tps-test.jar   (约 30-40MB)
# config.toml

4. 修改配置文件(如需要)

# 编辑配置文件,确保连接到本地节点
vim config.toml

如果在服务器上运行,建议使用本地地址:

[network]
peers=["127.0.0.1:20200"]  # 使用本地节点,延迟最低

🎯 运行测试

基本用法

cd ~/tps-test

# 查看帮助
java -jar tps-test.jar --help

# 使用默认参数100线程10000笔交易
java -jar tps-test.jar -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

命令行参数说明

参数 简写 说明 默认值
--threads -t 并发线程数 100
--transactions -n 总交易数 10000
--qps -q QPS限制0表示不限 0
--contract -c 合约地址(必填)
--accounts -a 测试账户数 100
--help -h 显示帮助 -

常用测试场景

场景1快速验证1000笔

java -jar tps-test.jar \
  -t 50 \
  -n 1000 \
  -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

场景2标准压测10000笔

java -jar tps-test.jar \
  -t 100 \
  -n 10000 \
  -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

场景3大规模压测50000笔

java -jar tps-test.jar \
  -t 200 \
  -n 50000 \
  -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

场景4极限压测100000笔

java -jar tps-test.jar \
  -t 500 \
  -n 100000 \
  -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

场景5限速测试

# 限制 QPS 为 5000
java -jar tps-test.jar \
  -t 100 \
  -n 50000 \
  -q 5000 \
  -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

📊 后台运行和日志管理

1. 后台运行测试

# 使用 nohup 后台运行,输出重定向到日志文件
nohup java -jar tps-test.jar \
  -t 200 \
  -n 100000 \
  -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4 \
  > tps_test.log 2>&1 &

# 查看进程
ps aux | grep tps-test

# 实时查看日志
tail -f tps_test.log

2. 使用 screen推荐

# 安装 screen如果没有
sudo apt install screen  # Ubuntu/Debian
sudo yum install screen  # CentOS/RHEL

# 创建新会话
screen -S tps-test

# 运行测试
java -jar tps-test.jar -t 200 -n 100000 -c 0x06ac...

# 断开会话按键Ctrl+A然后按 D
# 重新连接screen -r tps-test
# 查看所有会话screen -ls

3. 查看测试报告

# 测试完成后,会生成报告文件
ls -lt tps_test_report_*.txt | head -5

# 查看最新报告
cat $(ls -t tps_test_report_*.txt | head -1)

🔧 批量测试脚本

创建一个自动化测试脚本:

# 创建测试脚本
cat > run_tps_tests.sh << 'EOF'
#!/bin/bash

# TPS 自动化测试脚本
CONTRACT="0x06ac2fe406f1ae06494946ee281d58f1c79c39e4"
JAR="tps-test.jar"

echo "======================================"
echo "  FISCO BCOS TPS 自动化测试"
echo "======================================"
echo ""

# 测试配置数组(线程数 交易数 描述)
tests=(
  "50:5000:快速验证"
  "100:10000:基础压测"
  "200:10000:中等压测"
  "400:10000:高并发压测"
)

# 循环执行测试
for test in "${tests[@]}"; do
  IFS=':' read -r threads txs desc <<< "$test"
  
  echo ""
  echo "======================================"
  echo "测试: $desc"
  echo "并发数: $threads, 交易数: $txs"
  echo "======================================"
  echo ""
  
  java -jar $JAR -t $threads -n $txs -c $CONTRACT
  
  echo ""
  echo "等待10秒后开始下一轮测试..."
  sleep 10
done

echo ""
echo "======================================"
echo "所有测试完成!"
echo "======================================"

# 汇总报告
echo ""
echo "测试报告列表:"
ls -lt tps_test_report_*.txt | head -10
EOF

# 给脚本添加执行权限
chmod +x run_tps_tests.sh

# 运行自动化测试
./run_tps_tests.sh

📈 分阶段找准确TPS的脚本

基于文档中推荐的测试方法:

cat > find_optimal_tps.sh << 'EOF'
#!/bin/bash

# 二分法找最佳TPS脚本
CONTRACT="0x06ac2fe406f1ae06494946ee281d58f1c79c39e4"
JAR="tps-test.jar"

echo "======================================"
echo "  寻找最佳 TPS 配置"
echo "======================================"
echo ""

# 阶段1基准测试
echo "[阶段1] 基准测试(单线程)"
java -jar $JAR -t 1 -n 100 -c $CONTRACT
echo ""
read -p "按 Enter 继续..."

# 阶段2逐步增加并发
threads_list=(50 100 200 400)

for threads in "${threads_list[@]}"; do
  echo ""
  echo "======================================"
  echo "[阶段2] 测试 $threads 线程"
  echo "======================================"
  echo ""
  
  java -jar $JAR -t $threads -n 5000 -c $CONTRACT
  
  echo ""
  read -p "成功率是否 ≥99%(y/n): " answer
  
  if [ "$answer" != "y" ]; then
    echo "成功率低于99%,建议使用上一个并发数"
    last_good=$((threads / 2))
    echo "建议最佳并发数: $last_good"
    
    echo ""
    read -p "是否用最佳并发数运行峰值测试?(y/n): " peak_test
    
    if [ "$peak_test" = "y" ]; then
      echo ""
      echo "======================================"
      echo "[阶段3] 峰值测试"
      echo "======================================"
      echo ""
      java -jar $JAR -t $last_good -n 50000 -c $CONTRACT
    fi
    
    break
  fi
done

echo ""
echo "======================================"
echo "测试完成!"
echo "======================================"
EOF

chmod +x find_optimal_tps.sh
./find_optimal_tps.sh

🔍 监控和诊断

1. 实时监控测试进程

# 监控 CPU 和内存
top -p $(pgrep -f tps-test.jar)

# 监控网络连接
watch -n 1 'netstat -antp | grep 20200'

2. 查看节点日志

# 查看节点日志
tail -f ~/fisco/nodes/*/node0/log/log* | grep -E "ERROR|TPS"

# 查看交易池状态
cd ~/fisco/console
bash start.sh
# 执行getPendingTxSize

3. 系统资源监控

# 整体系统监控
htop

# 磁盘 IO
iostat -x 1

# 网络流量
iftop -i eth0

⚠️ 常见问题

问题1找不到或无法加载主类

错误信息:

Error: Could not find or load main class com.org.fisco.TPSTest

原因: jar文件打包不正确缺少依赖类

解决:

# 1. 必须使用 fatJar 任务打包
cd /Users/kiro/IdeaProjects/contract
./gradlew clean fatJar

# 2. 验证jar文件可以运行
java -jar build/libs/tps-test.jar --help

# 3. 重新上传到服务器
scp build/libs/tps-test.jar root@服务器IP:~/tps-test/

注意: 不要使用 ./gradlew build,必须使用 ./gradlew fatJar

问题2找不到 config.toml

错误信息:

错误: 找不到配置文件 config.toml

解决:

# 确保 config.toml 在当前目录
cd ~/tps-test
ls config.toml

# 或者从 console 复制
cp ~/fisco/console/conf/config.toml .

问题3连接节点失败

错误信息:

连接FISCO BCOS节点失败

解决:

# 1. 检查节点是否运行
ps aux | grep fisco-bcos

# 2. 检查端口是否监听
netstat -tlnp | grep 20200

# 3. 测试连接
telnet 127.0.0.1 20200

# 4. 修改 config.toml 使用正确的地址
vim config.toml

问题4内存不足

错误信息:

java.lang.OutOfMemoryError

解决:

# 增加 JVM 内存
java -Xmx4g -Xms2g -jar tps-test.jar -t 200 -n 50000 -c 0x06ac...

问题5程序卡住不动

排查:

# 1. 查看是否有错误日志
tail -100 tps_test.log

# 2. 检查网络连接
netstat -antp | grep 20200

# 3. 检查节点是否正常
cd ~/fisco/nodes/*/node0
tail -50 log/log*

🎯 最佳实践

1. 在服务器上测试的优势

延迟更低:本地网络延迟通常 < 1ms
TPS更高:网络不是瓶颈
结果更准:排除网络抖动影响

2. 推荐的测试流程

# 第一步:快速验证
java -jar tps-test.jar -t 50 -n 1000 -c 0x06ac...

# 第二步:基础测试
java -jar tps-test.jar -t 100 -n 10000 -c 0x06ac...

# 第三步:根据成功率调整
# 如果成功率 ≥ 99%,增加并发到 200
# 如果成功率 < 99%,保持或降低并发

# 第四步:峰值测试
java -jar tps-test.jar -t [最佳并发] -n 50000 -c 0x06ac...

3. 参数选择建议

节点配置 推荐并发数 推荐交易数
2C4G 50-100 10000
4C8G 100-200 50000
8C16G 200-500 100000

📝 测试记录模板

建议每次测试记录:

# 创建测试记录文件
cat > test_record_$(date +%Y%m%d).md << 'EOF'
# TPS测试记录

## 测试日期
2026-02-10

## 测试环境
- 服务器: 121.196.226.157
- 节点配置: 4C8G SSD
- enable_parallel: true
- max_trans_num_per_block: 1000

## 测试结果

### 测试1
- 命令: java -jar tps-test.jar -t 100 -n 10000 -c 0x06ac...
- TPS: 
- 成功率: 
- 平均延迟: 

### 测试2
- 命令: 
- TPS: 
- 成功率: 
- 平均延迟: 

## 结论
最佳并发数: 
峰值TPS: 

## 优化建议

EOF

vim test_record_$(date +%Y%m%d).md

🔄 更新部署

当代码有更新时:

# 本地重新打包
cd /Users/kiro/IdeaProjects/contract
./gradlew clean fatJar

# 验证jar可以运行
java -jar build/libs/tps-test.jar --help

# 上传到服务器(覆盖旧版本)
scp build/libs/tps-test.jar root@121.196.226.157:~/tps-test/

# 服务器上重新运行测试
ssh root@121.196.226.157
cd ~/tps-test
java -jar tps-test.jar -t 100 -n 10000 -c 0x06ac...

📞 快速命令参考

# 本地打包
cd /Users/kiro/IdeaProjects/contract
./gradlew clean fatJar

# 验证打包(本地测试)
java -jar build/libs/tps-test.jar --help

# 上传到服务器
scp build/libs/tps-test.jar src/main/resources/config.toml root@121.196.226.157:~/tps-test/

# SSH到服务器运行
ssh root@121.196.226.157
cd ~/tps-test

# 测试帮助
java -jar tps-test.jar --help

# 运行测试
java -jar tps-test.jar -t 100 -n 10000 -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

# 查看报告
cat $(ls -t tps_test_report_*.txt | head -1)

🎓 完整部署示例

从零开始的完整流程

# ========================================
# 第一步:在本地打包
# ========================================
cd /Users/kiro/IdeaProjects/contract

# 清理并打包
./gradlew clean fatJar

# 验证jar文件
java -jar build/libs/tps-test.jar --help
# 应该显示帮助信息,如果报错说明打包有问题


# ========================================
# 第二步:准备部署文件
# ========================================
mkdir -p deploy
cp build/libs/tps-test.jar deploy/
cp src/main/resources/config.toml deploy/

# 查看文件
ls -lh deploy/
# 应该看到:
# tps-test.jar   (约 25MB)
# config.toml


# ========================================
# 第三步:上传到服务器
# ========================================
# 方式1使用 scp
scp deploy/tps-test.jar deploy/config.toml root@121.196.226.157:~/tps-test/

# 方式2使用 rsync推荐
rsync -avz --progress deploy/* root@121.196.226.157:~/tps-test/


# ========================================
# 第四步SSH到服务器配置
# ========================================
ssh root@121.196.226.157

# 进入目录
cd ~/tps-test

# 检查文件
ls -lh
# 应该看到 tps-test.jar 和 config.toml

# 检查Java版本需要JDK 11+
java -version

# 编辑配置文件,使用本地节点地址
vim config.toml
# 修改为peers=["127.0.0.1:20200"]

# 测试jar文件
java -jar tps-test.jar --help
# 应该显示帮助信息


# ========================================
# 第五步:运行测试
# ========================================

# 快速验证1000笔
java -jar tps-test.jar -t 50 -n 1000 -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

# 如果上面的测试成功,运行正式测试
java -jar tps-test.jar -t 100 -n 10000 -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4

# 查看生成的报告
cat $(ls -t tps_test_report_*.txt | head -1)

🔍 验证清单

部署后请按此清单验证:

  • jar文件大小约25MB太小说明没打包依赖
  • 本地能运行 java -jar build/libs/tps-test.jar --help
  • 服务器上能显示帮助信息
  • config.toml 配置了正确的节点地址
  • 能连接到节点(显示区块高度)
  • 测试能正常运行并生成报告

祝测试顺利! 🚀