资源图标

ServerGuard — BDS 内存优化插件 v0.0.1

请登录后获取
版权类型
原创
版权链接
#
适配版本(基岩)
  1. 最新版本
[MD] # ServerGuard — BDS 内存优化插件 > 让你的基岩版服务器内存占用稳定、不膨胀。 --- ## 为什么需要优化? BDS 在 Linux 上使用 glibc 的 ptmalloc2 内存分配器。它有一个致命问题:**内存只涨不降**。 玩家进出 → 区块加载/卸载 → 大量内存分配和释放 → glibc 把空闲内存留在 arena 里不还给操作系统 → RSS 持续增长 → 服务器越来越卡。 这不是 BDS 的 bug,是 glibc malloc 的设计缺陷。MySQL、Redis 都踩过同样的坑,它们的解决方案都是换分配器。 --- ## 优化方案 ### 一、替换内存分配器 用 **jemalloc** 替换 glibc malloc。jemalloc 是 Redis、Firefox、Facebook 的默认分配器,核心优势是**后台线程自动回收空闲内存**。 ```bash # 安装 sudo apt install libjemalloc2 # 启动 BDS 时加载 jemalloc LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 \ MALLOC_CONF="background_thread:true,dirty_decay_ms:30000,muzzy_decay_ms:30000" \ ./bedrock_server ``` ### 二、配置优化 ```properties # 降低视距,减少 90% 区块内存 view-distance=10 # 提高压缩阈值,降低 CPU 开销 compression-threshold=256 ``` ### 三、安装 ServerGuard 插件 负责运行时监控和主动内存回收(见下文)。 --- ## 实测效果 > 测试环境:Ubuntu 24.04 / 8 核 / 14GB / BDS 1.26.44 / 20 个模拟玩家 / view-distance=20 | 指标 | glibc(默认) | jemalloc | 改善 | |:----:|:------------:|:--------:|:----:| | 虚拟内存 | 1,471 MB | 679 MB | **↓ 54%** | | 峰值后回落 | ❌ 不下降 | ✅ 自动回落 | ✅ | | 长期趋势 | 持续增长 | 稳定 | ✅ | jemalloc 在玩家加载区块时内存达到峰值,随后**后台线程自动回收**,RSS 逐步回落并稳定。glibc 达到峰值后**再也不下降**。 --- ## ServerGuard 插件 ### 功能 | 功能 | 说明 | |------|------| | 📊 内存监控 | 每 30 秒记录 RSS / 虚拟内存 / TPS / MSPT 到日志文件 | | ♻️ 主动回收 | 每 2 分钟调用 `malloc_trim(0)`,归还空闲内存给操作系统 | | 👋 玩家离开回收 | 玩家退出后延迟 30 秒触发内存回收 | | ⚠️ TPS 告警 | TPS 低于 15 时控制台输出警告 | | 🔴 内存告警 | RSS 超过阈值时控制台输出警告 | | 📈 性能日志 | CSV 格式记录,方便绘制趋势图 | ### 安装 ```bash # 将 .whl 文件放入 plugins 目录 cp endstone_server_guard-*.whl /path/to/bedrock_server/plugins/ # 重启服务器 ``` ### 日志位置 ``` plugins/server_guard/logs/ ├── serverguard.log # 监控日志 └── performance.csv # 性能数据(CSV) ``` ### 控制台策略 正常运行时控制台**完全静默**,所有数据写入文件。只有以下情况才输出到控制台: - 🔴 RSS 超过 2GB → `[Memory WARNING]` - 🔴 RSS 超过 3GB → `[Memory CRITICAL]` - 🟡 TPS 低于 15 → `[TPS LOW]` - 🟢 malloc_trim 回收显著 → `[Trim] 350MB → 280MB` --- ## 完整部署 ```bash # 1. 安装 jemalloc sudo apt install libjemalloc2 # 2. 创建启动脚本 cat > start.sh << 'EOF' #!/bin/bash export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 export MALLOC_CONF="background_thread:true,dirty_decay_ms:30000,muzzy_decay_ms:30000" cd "$(dirname "$0")" ./bedrock_server EOF chmod +x start.sh # 3. 安装 EndStone(可选,用于加载插件) pip install endstone # 4. 安装 ServerGuard 插件 cp endstone_server_guard-*.whl plugins/ # 5. 修改配置 sed -i 's/view-distance=.*/view-distance=10/' server.properties sed -i 's/compression-threshold=.*/compression-threshold=256/' server.properties # 6. 启动 ./start.sh ``` --- ## FAQ **Q: 内存回收会影响玩家游玩吗?** 不会。回收的是已经释放、没人使用的空闲内存,不触碰正在使用的数据。回收操作是微秒级的 `madvise` 系统调用,不暂停游戏。 **Q: Windows 上能用吗?** jemalloc 方案仅支持 Linux。Windows 可用 mimalloc DLL 注入替代,后续支持。 --- *ServerGuard v1.0.0 · 基于 EndStone 0.11 · 适配 BDS 1.26.44* [/MD]
  • 喜欢
反馈: DEVILENMO
作者
xiaoziyi
价格
50.00金粒
下载
12
查看
354
首次发布
最后更新

评分

0.00 星 0 次评分

xiaoziyi 的其他资源

后退
顶部 底部