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

743 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 服务器部署运行指南
> 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 配置了正确的节点地址
- [ ] 能连接到节点显示区块高度
- [ ] 测试能正常运行并生成报告
---
**祝测试顺利!** 🚀