# 服务器部署运行指南 > TPS测试工具服务器部署和使用说明 --- ## 📦 打包部署包 ### 1. 在本地打包 ```bash 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 # 链连接配置(必需) ``` 从本地复制配置文件: ```bash # 复制配置文件到 build 目录 cp src/main/resources/config.toml build/libs/ ``` --- ## 🚀 上传到服务器 ### 方法1:使用 SCP 上传 ```bash # 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 上传(推荐) ```bash # 自动创建目录并上传 rsync -avz --progress \ build/libs/tps-test.jar \ src/main/resources/config.toml \ root@121.196.226.157:~/tps-test/ ``` --- ## ⚙️ 服务器端配置 ### 1. SSH 登录到服务器 ```bash ssh root@121.196.226.157 ``` ### 2. 检查 Java 环境 ```bash # 检查 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. 验证文件 ```bash cd ~/tps-test ls -lh # 应该看到: # tps-test.jar (约 30-40MB) # config.toml ``` ### 4. 修改配置文件(如需要) ```bash # 编辑配置文件,确保连接到本地节点 vim config.toml ``` **如果在服务器上运行,建议使用本地地址:** ```toml [network] peers=["127.0.0.1:20200"] # 使用本地节点,延迟最低 ``` --- ## 🎯 运行测试 ### 基本用法 ```bash 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笔) ```bash java -jar tps-test.jar \ -t 50 \ -n 1000 \ -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4 ``` #### 场景2:标准压测(10000笔) ```bash java -jar tps-test.jar \ -t 100 \ -n 10000 \ -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4 ``` #### 场景3:大规模压测(50000笔) ```bash java -jar tps-test.jar \ -t 200 \ -n 50000 \ -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4 ``` #### 场景4:极限压测(100000笔) ```bash java -jar tps-test.jar \ -t 500 \ -n 100000 \ -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4 ``` #### 场景5:限速测试 ```bash # 限制 QPS 为 5000 java -jar tps-test.jar \ -t 100 \ -n 50000 \ -q 5000 \ -c 0x06ac2fe406f1ae06494946ee281d58f1c79c39e4 ``` --- ## 📊 后台运行和日志管理 ### 1. 后台运行测试 ```bash # 使用 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(推荐) ```bash # 安装 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. 查看测试报告 ```bash # 测试完成后,会生成报告文件 ls -lt tps_test_report_*.txt | head -5 # 查看最新报告 cat $(ls -t tps_test_report_*.txt | head -1) ``` --- ## 🔧 批量测试脚本 创建一个自动化测试脚本: ```bash # 创建测试脚本 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的脚本 基于文档中推荐的测试方法: ```bash 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. 实时监控测试进程 ```bash # 监控 CPU 和内存 top -p $(pgrep -f tps-test.jar) # 监控网络连接 watch -n 1 'netstat -antp | grep 20200' ``` ### 2. 查看节点日志 ```bash # 查看节点日志 tail -f ~/fisco/nodes/*/node0/log/log* | grep -E "ERROR|TPS" # 查看交易池状态 cd ~/fisco/console bash start.sh # 执行:getPendingTxSize ``` ### 3. 系统资源监控 ```bash # 整体系统监控 htop # 磁盘 IO iostat -x 1 # 网络流量 iftop -i eth0 ``` --- ## ⚠️ 常见问题 ### 问题1:找不到或无法加载主类 **错误信息:** ``` Error: Could not find or load main class com.org.fisco.TPSTest ``` **原因:** jar文件打包不正确,缺少依赖类 **解决:** ```bash # 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 ``` **解决:** ```bash # 确保 config.toml 在当前目录 cd ~/tps-test ls config.toml # 或者从 console 复制 cp ~/fisco/console/conf/config.toml . ``` ### 问题3:连接节点失败 **错误信息:** ``` 连接FISCO BCOS节点失败 ``` **解决:** ```bash # 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 ``` **解决:** ```bash # 增加 JVM 内存 java -Xmx4g -Xms2g -jar tps-test.jar -t 200 -n 50000 -c 0x06ac... ``` ### 问题5:程序卡住不动 **排查:** ```bash # 1. 查看是否有错误日志 tail -100 tps_test.log # 2. 检查网络连接 netstat -antp | grep 20200 # 3. 检查节点是否正常 cd ~/fisco/nodes/*/node0 tail -50 log/log* ``` --- ## 🎯 最佳实践 ### 1. 在服务器上测试的优势 ✅ **延迟更低**:本地网络延迟通常 < 1ms ✅ **TPS更高**:网络不是瓶颈 ✅ **结果更准**:排除网络抖动影响 ### 2. 推荐的测试流程 ```bash # 第一步:快速验证 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 | --- ## 📝 测试记录模板 建议每次测试记录: ```bash # 创建测试记录文件 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 ``` --- ## 🔄 更新部署 当代码有更新时: ```bash # 本地重新打包 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... ``` --- ## 📞 快速命令参考 ```bash # 本地打包 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) ``` --- ## 🎓 完整部署示例 ### 从零开始的完整流程 ```bash # ======================================== # 第一步:在本地打包 # ======================================== 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 配置了正确的节点地址 - [ ] 能连接到节点(显示区块高度) - [ ] 测试能正常运行并生成报告 --- **祝测试顺利!** 🚀