# GoSpeed
**Repository Path**: liumou_site/GoSpeed
## Basic Information
- **Project Name**: GoSpeed
- **Description**: 基于go语言实现多协程网络资源缓存到内存的功能,基于此实现设备网络极限速度测试
- **Primary Language**: Go
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-07-11
- **Last Updated**: 2025-09-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GoSpeed 🚀



*高性能、轻量级的多线程下载测速工具*
## ⚠️ 免责声明
> **重要声明**:此工具仅用于测试与学习目的,请勿用于非法用途。使用此程序时,请确保所有下载的内容都拥有合法的使用权或分发权,避免侵犯版权、恶意访问。
> **重要声明**:此程序不对外提供任何下载资源链接,请用户自行解决并确保所有下载的内容都拥有合法的使用权或分发权,避免侵犯版权、恶意访问。
## 📖 项目介绍
GoSpeed 是一款使用 Go 语言编写的高性能持续下行压力测速工具,具有以下特点:
- ✅ **跨平台支持**:可在任意平台使用
- ✅ **智能测速**:通过指定 URL 清单文本文件自动遍历测速
- ✅ **多线程下载**:支持并发下载,提升测速效率
- ✅ **内存优化**:采用内存缓存数据,最大程度减少磁盘 IO
- ✅ **智能跳过**:可自定义最大下载文件大小,超出自动跳过
## ✨ 核心特性
| 特性 | 描述 |
|------|------|
| 🪶 轻量级 | 无外部依赖,单文件可执行 |
| 💾 内存优化 | 纯内存操作,保护硬盘寿命 |
| 🔄 智能分块 | 支持断点续传,自动分块下载 |
| ⚡ 高性能 | 多协程并发,充分利用带宽 |
| 🎯 可配置 | 灵活的参数配置,适应不同场景 |
| 🔍 内存监控 | 实时监控内存使用,防止内存泄漏 |
| 🛡️ 泄露保护 | 自动检测内存泄漏,智能GC回收 |
## 🧮 内存配置指南
### 不支持断点续传的情况
```
内存公式: 协程数 × 最大文件大小 = 建议内存大小
```
**示例配置:**
- 协程数量: `4`
- 最大下载文件大小: `1000` MB
- 所需内存: `4 × 1000 = 4GB`
### 支持断点续传的情况
```
内存公式: 协程数 × 单次大小(默认20MB) × 2 = 建议内存大小
```
**示例配置:**
- 协程数量: `4`
- 单次下载大小: `20` MB
- 所需内存: `4 × 20 × 2 = 80MB`
### 🔍 内存监控功能
GoSpeed 内置了强大的内存监控和泄露保护机制:
#### 内存监控特性
- **实时监控**: 每5秒检查一次内存使用情况
- **智能告警**: 内存使用超过80%时发出告警
- **自动保护**: 内存使用超过95%时触发强制GC
- **泄漏检测**: 自动检测可能的内存泄漏
- **缓冲区池**: 重用内存缓冲区,减少分配开销
#### 内存限制设置
```bash
# 设置最大内存限制为1GB
./GoSpeed -memory 1024 -thread 4
# 调试模式下会显示详细内存统计
./GoSpeed -debug -memory 512
```
#### 内存统计信息
在调试模式下,程序会输出详细的内存使用统计:
```
内存统计 - 当前使用: 45.2 MB, 峰值: 67.8 MB, 池命中率: 1250, 池未命中率: 23
下载完成 - 内存使用: 38.1 MB, 峰值: 89.4 MB, GC次数: 15
```
## 🚀 快速开始
### 🏗️ 多架构支持
GoSpeed 支持多种 CPU 架构,包括:
- ✅ **linux/amd64** - x86_64 架构(Intel/AMD 处理器)
- ✅ **linux/arm64** - ARM 64位架构(Apple Silicon、AWS Graviton)
- ✅ **linux/arm/v7** - ARM 32位架构 v7(树莓派 2/3/4)
- ✅ **linux/arm/v6** - ARM 32位架构 v6(树莓派 Zero/1)
📖 **详细文档**: [MULTIARCH.md](MULTIARCH.md)
### 🐳 Docker部署(推荐)
#### 使用 Docker Compose(最简单)
```bash
# 1. 克隆项目
git clone https://gitee.com/liumou_site/GoSpeed.git
cd GoSpeed/
# 2. 启动服务
docker compose -f compose.yaml up -d
# 3. 查看日志
docker compose -f compose.yaml logs -f
```
#### 使用 Docker 命令
```bash
# 构建镜像
docker build -t gospeed:latest .
# 运行容器(本地构建镜像)
docker run -d \
--name gospeed \
--restart unless-stopped \
-v $(pwd)/urls.txt:/app/urls.txt:ro \
-e THREADS=4 \
-e MAX_SIZE=0 \
-e START_TIME=9 \
-e STOP_TIME=23 \
-e DEBUG=false \
gospeed:latest
# 或者使用腾讯云镜像(推荐)
docker run -d \
--name gospeed \
--restart unless-stopped \
-v $(pwd)/urls.txt:/app/urls.txt:ro \
-e THREADS=4 \
-e MAX_SIZE=0 \
-e START_TIME=9 \
-e STOP_TIME=23 \
-e DEBUG=false \
ccr.ccs.tencentyun.com/liumou/gospeed:latest
# 使用多架构镜像(自动选择合适架构)
docker run -d \
--name gospeed \
--restart unless-stopped \
-v $(pwd)/urls.txt:/app/urls.txt:ro \
-e THREADS=4 \
-e MAX_SIZE=0 \
-e START_TIME=9 \
-e STOP_TIME=23 \
-e DEBUG=false \
ccr.ccs.tencentyun.com/liumou/gospeed:multiarch
```
#### 多架构构建(高级用户)
```bash
# 使用多架构Dockerfile构建
chmod +x build-multiarch.sh
./build-multiarch.sh
# 手动构建多架构镜像
docker buildx build \
--platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 \
--tag gospeed:multiarch \
--file Dockerfile.multiarch \
--push \
.
```
#### Docker环境变量配置
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `URLS_FILE` | `urls.txt` | URL清单文件路径 |
| `THREADS` | `4` | 并发线程数 |
| `MAX_SIZE` | `0` | 单文件最大下载大小(MB) |
| `START_TIME` | `9` | 开始时间(小时) |
| `STOP_TIME` | `23` | 停止时间(小时) |
| `DEBUG` | `false` | 调试模式 |
| `TZ` | `Asia/Shanghai` | 时区设置 |
### 一键安装(推荐)
```bash
# 使用 curl 安装
curl -sSL https://gitee.com/liumou_site/GoSpeed/raw/master/install.sh | bash
# 或者使用 wget 安装
f=install.sh; rm -f $f; wget https://gitee.com/liumou_site/GoSpeed/raw/master/$f && bash $f; rm -f $f
```
### 自行编译
如果您的平台不在支持列表中,请自行编译:
```bash
git clone https://gitee.com/liumou_site/GoSpeed.git
cd GoSpeed/
go mod tidy
go build
```
## 📋 使用说明
### 命令行参数
```bash
./GoSpeed [参数]
```
| 参数 | 简写 | 默认值 | 说明 |
|------|------|--------|------|
| `-urls` | | `urls.txt` | 指定 URL 清单文件路径 |
| `-thread` | `-t` | `4` | 设置并发线程数 |
| `-max` | `-m` | `0` | 单文件最大下载大小 (MB),0 表示无限制 |
| `-start` | | `9` | 设置开始时间 (小时),24小时制 |
| `-stop` | | `23` | 设置停止时间 (小时),24小时制 |
| `-debug` | `-d` | `false` | 显示调试信息 |
| `-v` | | | 显示版本号 |
| `-memory` | | `2048` | 设置最大内存限制(MB),默认2GB |
### 使用示例
```bash
# 基础使用(使用默认配置)
./GoSpeed
# 自定义线程数和最大文件大小
./GoSpeed -thread 8 -max 500
# 设置工作时间(9点开始,18点结束)
./GoSpeed -start 9 -stop 18
# 使用自定义 URL 文件
./GoSpeed -urls my_urls.txt -thread 6
# 调试模式
./GoSpeed -debug
# 设置内存限制(1GB)
./GoSpeed -memory 1024 -thread 4
```
## 📊 使用效果

*GoSpeed 实际运行效果截图*
## 🔧 配置文件格式
### URL 清单文件 (urls.txt)
程序会自动读取当前目录下的 `urls.txt` 文件,每行一个 URL,支持 HTTP/HTTPS 协议。
**URL 文件格式说明:**
- 每行一个下载链接
- 支持空行(会被自动忽略)
- 支持注释行:以 `#` 开头的行会被视为注释,不会被执行
- 支持混合模式:可以同时包含 URL、注释和空行
**示例 urls.txt 文件:**
```
# 这是一个注释行
https://example.com/file1.zip
# 另一个注释
https://example.com/file2.pdf
https://example.com/file3.tar.gz
```
## 🛠️ 开发环境
### 系统要求
- Go 1.22 或更高版本
- Linux / Windows / macOS 操作系统
- 最低 512MB 内存(推荐 2GB+)
### 项目结构
```
GoSpeed/
├── main.go # 主程序入口
├── model/ # 数据模型
│ ├── info.go # 核心信息结构
│ ├── download.go # 下载逻辑
│ ├── thread.go # 线程管理
│ └── ...
├── client/ # 预编译二进制文件
├── image/ # 文档图片
├── test/ # 测试文件
├── Dockerfile # Docker镜像构建文件
├── compose.yaml # Docker Compose配置
├── docker-entrypoint.sh # Docker入口脚本
└── .dockerignore # Docker忽略文件
```
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建您的功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开一个 Pull Request
## 📄 许可证
本项目基于 [MIT](LICENSE) 许可证开源。
## 🔗 相关链接
- 🏠 [项目主页](https://gitee.com/liumou_site/GoSpeed)
- 📖 [使用文档](https://gitee.com/liumou_site/GoSpeed/wikis)
- 🐛 [问题反馈](https://gitee.com/liumou_site/GoSpeed/issues)
- 🐳 [Docker文档](DOCKER.md)
---
**⭐ 如果这个项目对您有帮助,请给个 Star 支持一下!**