> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/zh/learn/bian-pai/deployments.md).

# 部署

了解部署及其生命周期——用于深入理解的概念和最佳实践。

## 🗺️ 编排

在几秒内启动新服务器，以满足容量需求，采用我们的云原生边缘计算方法。我们将服务器视为 [牲畜而不是宠物](https://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/) ——直接替换故障实例，而不是逐个手动修复。

{% hint style="info" %}
你的编排选择将 **影响你的 DevOps 成本、服务器成本和可扩展性**.
{% endhint %}

{% hint style="success" %}
[在 Discord 上联系我们](https://discord.gg/MmJf8fWjnt) ，了解混合编排选项并优化你的托管成本。
{% endhint %}

为了全面了解所有优缺点，让我们比较各种编排方法。某些游戏会根据游戏循环设计使用多种编排方法。

### 匹配绑定

短生命周期（限时）服务器会在匹配结束时缩减，提供 **最佳成本性能比**.

会话通常通过以下方式自动化： [匹配](/zh/unity/pi-pei.md) 一种服务，该服务按需使用严格规则部署服务器，并可选择将现有进行中的服务器填充到 [提高匹配填充率](https://edgegap.com/blog/how-session-fill-rate-affects-your-multiplayer-hosting-costs).

👍 **优势**

* 最佳成本效率——实时扩缩以按分钟满足玩家需求。
* 由于无区域托管，DevOps 成本最低，Edgegap 自动化处理 99% 的任务。
* 由于 Edgegap 公有云基础设施中有 615+ 个站点，延迟最低。
* 在意外流量激增时扩容最快（突发能力）。
* 最高标准的安全性和玩家作弊防护（服务器权威）。
* 服务器意外崩溃对玩家的影响最小，仅影响单场比赛。

👎 **缺点**

* 采用新的编排思维模型，最初需要一些上手适应成本。
* 运行超过 24 小时的服务器将被自动终止。

🧩 **最适合**

* 对延迟敏感的游戏—— **当网络代码优化无法克服高延迟时：**
  * 第一人称射击、格斗游戏、VR 与 XR（虚拟现实与扩展现实），…
* 具有 **按设计对匹配时长设有上限的游戏**,
  * 大逃杀， PvPvE[^1]，合作射击、MOBA、体育游戏、ARPG 与地下城爬行类，…

{% hint style="info" %}
Edgegap 会根据各区域玩家活动自动对全部 615+ 服务器位置进行扩缩容。为成功做好准备——无缝 [在 60 分钟内扩展到 1400 万并发用户](https://edgegap.com/resources/performance-benchmark).
{% endhint %}

### 区域待命

持久世界和社交 MMO 游戏 **服务器寿命通常超过单个玩家会话**.

会话通常通过以下方式分配： [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md) 基于玩家偏好（按区域自动化或自定义搜索），并根据区域容量进行水平部署预扩容。

👍 **优势**

* 熟悉且易于理解，适合久经沙场的老玩家的老派方法。
* 最高标准的安全性和玩家作弊防护（服务器权威）。
* 基于月度承诺的成本，易于预测。

👎 **缺点**

* 更高的托管成本——每个区域都需要一个或多个闲置待命服务器（突发容量）。
* 更高的 DevOps 成本——每个区域都需要重复进行扩容、运维和维护。
* 玩家基数较小的区域由于连接到较远的服务器而延迟较高。

🧩 **最适合**

* 即使玩家离线，服务器上仍存储用户生成内容的持久化世界。
  * MMO、具有基地建造或物品放置的沙盒、撤离射击游戏，...
* 对延迟容忍的游戏—— **当不需要服务器权威的实时物理时**:
  * 移动游戏、合作游戏、TCG/CCG、回合制策略，…
* 异步多人游戏， **当服务器崩溃对玩家体验影响最小时：**
  * 与鬼影竞速、敌方基地掠夺、计时建造/农场类游戏，…
* 初始化过程较重的应用——当准备服务器需要几分钟时。

### 点对点

将开发重点从 ~~专用服务器~~ 转向 **用于非竞技游戏的中继网络代码**.

相关主题：监听服务器、玩家主机权威、NAT 穿透。

👍 **优势**

* 最低托管成本，只需中继服务器即可解决 NAT 穿透问题。
* 最低 DevOps 成本——仅需维护客户端构建和分发渠道。
* 服务器意外崩溃对玩家的影响最小，仅影响单场比赛。
* 实现简单，原型制作时间最快，无需任何后端开发。

👎 **缺点**

* 点对点网络代码开发工作量增加，需要并发编程技能。
* 延迟最差，也最容易受不利网络条件影响（例如移动网络）。
* 安全性最弱，易受中间人攻击和会话劫持。
* 如果主机离开而你未实现自定义主机迁移，存在会话丢失风险。

🧩 **最适合**

* 合作与休闲游戏—— **当作弊不会减少乐趣或破坏游戏时**,
  * 儿童游戏、探索游戏、冒险，…

{% hint style="success" %}
查看我们的 [分布式中继](https://docs.edgegap.com/docs/distributed-relay-manager) 用于以同类最佳的延迟和安全性支持点对点服务。
{% endhint %}

## 📍 服务器位置

无论你选择哪种编排方式，为一组玩家选择正确的服务器位置对于确保尽可能低的延迟和最佳玩家体验都至关重要。了解不同的服务器位置策略，以及它们如何影响你的玩家。

{% hint style="info" %}
你的服务器位置策略将 **影响玩家体验、留存率和你的游戏评价**.
{% endhint %}

{% hint style="success" %}
**Edgegap 部署在** [**最佳可能的位置**](#server-score) **，并具备可用容量**，用于快速、低延迟的匹配。
{% endhint %}

<figure><img src="/files/4bbd86866f8edd9f4bfeb4b9cc0003effb84d40d" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
查看 [#deployment-balance-points](#deployment-balance-points "mention") 转向 **实时分析服务器位置**，在大规模下。
{% endhint %}

### 服务器评分

服务器评分策略使用 Edgegap 受专利保护的方法，该方法 **为每场比赛单独优化服务器部署位置**。它会进行非侵入式遥测，以近似每位玩家到我们服务器位置的网络距离，并选择能提供最佳以下体验的服务器：

* **响应性** ——平均为所有玩家提供最低延迟，
* **公平性** ——为所有玩家提供平衡且公平的延迟。

{% hint style="success" %}
我们的 [匹配器](/zh/learn/pi-pei.md) 默认使用 **服务器评分策略，以确保尽可能好的体验**。若要将此策略用于 [部署 API](https://docs.edgegap.com/api/#tag/Deployments)，请在你的部署请求中输入玩家的公网 IP 或地理坐标。
{% endhint %}

**无响应的部署位置** ——服务器太远，所有玩家延迟都很高：

<figure><img src="/files/480adb76441b89cc8235b512df53d297ccf69799" alt=""><figcaption></figcaption></figure>

**不公平的部署位置** ——延迟不均衡，有一名玩家处于劣势：

<figure><img src="/files/f0c354732f377859eb8bb21ee7a65890d7a4a297" alt=""><figcaption></figcaption></figure>

**良好部署位置示例** ——对所有玩家来说响应及时且公平：

<figure><img src="/files/23df4eaec66a3c38a2ebd23331fab507885dd961" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
这种策略 **对于托管彼此相距很远的一组玩家尤其有效** （北美 vs. 欧洲，或西海岸 vs. 东海岸），这在预设大厅中很常见。
{% endhint %}

### 地理定位

或者， **提供目标纬度和经度坐标，或在首选区域中的 ping 信标公共 IP 地址**。此方法需要额外的客户端地理定位实现，完全依赖开发者的方案。

{% hint style="warning" %}
不建议将此策略用于 [#match-bound](#match-bound "mention") 编排，除非应用程序对区域间数据传输有严格的监管要求，或者玩家 IP 不可用。
{% endhint %}

{% hint style="success" %}
或者，让玩家 **从列表中选择一个持久的（始终在线）服务器** 带有 [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md).
{% endhint %}

### 区域锁定

出于合规、技术或运营原因，某些设计或受众不适合跨越到邻近区域。请考虑 [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md) 结合 [区域扩容策略](/zh/learn/fu-wu-qi-liu-lan-qi.md#automated-scaling).

{% hint style="warning" %}
不建议将此策略用于 [#match-bound](#match-bound "mention") 编排，除非应用程序对区域间数据传输有严格的监管要求，或者玩家 IP 不可用。
{% endhint %}

## 🟢 连接质量

有些游戏（以及一些玩家）对延迟或卡顿比其他游戏更敏感。虽然玩家报告在大规模场景下是识别事故或回归缺陷的极佳指标， **玩家可能并不深刻理解网络概念** 并会很快将责任归咎于工作室、网络代码或服务器。

某些问题的根本原因可能对玩家隐藏，因此工作室与托管提供商的协作可能至关重要。 **Edgegap 的优先事项始终是提供尽可能好的服务。**

如果你收到大量玩家报告、遭遇大范围中断，或重复出现问题，请立即通过我们平台中的支持工单联系我们。

{% hint style="info" %}
如果你需要帮助， [请通过 Discord 联系我们](https://discord.gg/MmJf8fWjnt)。关于实时游戏支持，请查看我们的 [工单系统](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

#### 低延迟

玩家延迟是传输数据过程中产生的延迟之和，涉及：

* **物理设备——** 跨越传播的物理信号 [互联网网络拓扑](https://en.wikipedia.org/wiki/Internet#Routing),
* **主机到主机** ——由协议、传输和安全措施造成，
* **进程到进程** ——由客户端/服务器中的（解）封装和处理数据造成。

Edgegap 通过将服务器放置在更靠近玩家的位置来降低物理延迟，从而获得更短的响应时间和更少的网络跳数。凭借分布在 17 家云和裸金属提供商中的位置，你将获得 **世界各地玩家的同类最佳延迟**.

无论是否使用 Edgegap，全球服务器和互联网覆盖都受以下因素限制：

* **基础设施可用性** ——某一区域的互联网连接质量可能不足，
* **自然因素** ——高度复杂的服务器机架通常需要相对稳定的环境。

#### 高可用性

全球各地服务器的可用性会随时间变化，一天中会多次发生变化。Edgegap 会自动 **扩缩容** 位置 **按需**，并考虑：

* **突发流量** ——在 15 分钟内创建的部署，
* **vCPU 需求** ——每个部署需要更多 vCPU 会增加特定位置的总体需求，
* **提供商供给** ——某些偏远位置可用的提供商选项较少，
* **机器可用性** ——某些位置可能只提供 4 vCPU 或 8 vCPU 机器，
* **工作室请求** 用于测试、质量保证、抢先体验、封闭测试或锦标赛。

所有应用程序的部署请求会合并起来评估位置需求。默认情况下，所有组织享有同等分配优先级，并且 **可为需要特定硬件或位置的企业客户添加私有服务器池**.

{% hint style="success" %}
请 **联系我们以规划发布**，或者如果你对位置可用性有任何请求。
{% endhint %}

#### 玩家问题解决

玩家问题可能源于服务器 bug 或提供商事故，但也可能来自第三方，例如本地 ISP、游戏服务、低级库中的 bug、基础设施提供商或其他来源。

在排查玩家报告或事故时，请考虑以下因素：

* **匹配质量** ——玩家应该彼此靠近（同一区域）以便 [#server-placement](#server-placement "mention") 获得最佳结果：
  * 参见 [匹配](/zh/learn/pi-pei.md) 和 [Ping 信标](/zh/learn/bian-pai/ping-beacons.md) 我们的建议，
  * 参见 [深入了解](/zh/learn/pi-pei/matchmaker-in-depth.md#player-tracing) 了解如何查找与玩家报告相关的服务器日志，
* **区域性问题：**
  * 本地互联网服务提供商（ISP）可能正在暂时处理事故，
  * 某些区域（例如中国、俄罗斯）可能因当地制裁而受到限制，
* **缓存级别** ——Edgegap 将优先在已缓存的位置快速部署：
  * [启用缓存，可在几秒内部署你的服务器](/zh/learn/bian-pai/application-and-versions.md#other-parameters-optional),
* **最大部署时间** ——由于初始化过程缓慢且繁重，部署可能失败：
  * 参见 [应用与版本](/zh/learn/bian-pai/application-and-versions.md#safety-guardrails) 增加超时时间，
  * 将初始化步骤推迟到绝对必要时，
* **服务器镜像或集成问题**.

{% hint style="success" %}
**在客户端匹配历史 UI 中显示部署 ID** 以便在排障时追踪玩家报告。
{% endhint %}

{% hint style="info" %}
向用户通知广泛的 bug、临时问题和中断，以减轻负面情绪。
{% endhint %}

## 🔄 部署生命周期

Edgegap 部署会经历若干生命周期阶段，这些阶段由部署状态表示。

#### 1. 开始部署

用于 **测试目的** 的部署可以通过以下方式启动：

* [Unreal Engine](/zh/unreal-engine.md) - 适用于 Unreal Engine 项目的 Docker 扩展或插件，
* [Unity](/zh/unity.md) - 适用于 Unity 项目的插件，
* [仪表板 Web UI](https://app.edgegap.com/deployment-management/deployments/list) - 易于使用的网页界面，用于测试服务器集成。

用于 **生产环境** 应通过以下方式启动：

* [匹配](/zh/learn/pi-pei.md) - 寻找其他玩家并按需启动服务器（[#match-bound](#match-bound "mention")).
* [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md) - 对初始化时间较长的服务器进行预热（[#regional-standby](#regional-standby "mention")).
* [部署 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy) - 服务器到服务器的自定义集成（自定义扩缩容）。

{% hint style="success" %}
**保存** `request_id`  **（部署 ID）并为部署添加标签** 以便日后识别和排查问题。
{% endhint %}

{% hint style="info" %}
在使用 [部署 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deploy)进行测试时，你可以覆盖默认 Dockerfile `CMD` 并使用自定义命令。
{% endhint %}

#### 2. 部署中

一旦部署启动，我们的系统将快速连续执行若干步骤：

* 遥测——我们正在测量从可用数据中心到每位玩家的网络响应性，
* 部署——我们正在预留容量并准备启动你的服务器容器，
* 容器启动——我们正在启动容器、安装依赖并进行初始化，
* 后处理——我们正在添加日志存储、监控并完成部署。

{% hint style="success" %}
**启用** [**在您的应用版本中启用缓存**](/zh/learn/bian-pai/application-and-versions.md#active-caching) **以便在几秒钟内部署服务器。**
{% endhint %}

{% hint style="warning" %}
**请求过多 429** ——为了确保稳定性并避免意外账单，我们对你的组织实施速率限制，达到 **40 次请求/秒**. [联系我们](mailto:info@edgegap.com) 以规划发布、估算上线流量并为成功做好准备。
{% endhint %}

#### 3. 部署就绪

你的容器已完全初始化，服务器正在启动。在几秒到一分钟内，服务器可能仍在初始化，在游戏引擎（或自定义运行时）完全准备好接受玩家连接之前，可能不会响应玩家请求。

{% hint style="success" %}
一旦部署就绪， **重试玩家连接，直到成功**，或直到达到预定义的客户端超时。
{% endhint %}

{% hint style="danger" %}
**服务器崩溃将根据您的** [**进程重启策略进行处理**](/zh/learn/bian-pai/application-and-versions.md#safety-guardrails)**.** [服务器状态可能会丢失](/zh/learn/bian-pai/chi-jiu-hua.md#state-management).
{% endhint %}

根据版本的 [应用与版本](/zh/learn/bian-pai/application-and-versions.md#active-caching) 配置，你可能会收到：

🟢 **缓存命中**

已启用缓存。由于复用了此机器上预加载的镜像，部署更快。

🟡 **热启动**

已禁用缓存。由于复用了同一台机器上先前部署下载的镜像，部署更快。启用缓存可在全球范围内持续实现快速部署。

🔴 **缓存未命中**

已启用缓存。由于缓存传播完成前流量突然激增，部署更慢。在部署请求中启用“要求缓存位置”将可避免这种情况，但在意外流量激增时，可能导致更多无法处理的部署。

🔴 **冷启动**

已禁用缓存。部署更慢，镜像在部署时被下载。启用缓存可加快部署。

#### 4. 部署错误

由于意外原因，你的部署可能在任何时刻最终进入无法处理状态。更可能发生在测试集成或测试新的服务器构建期间。

**错误部署不会向你收费，并会在 24 小时后自动停止。**

故障排查步骤：

* 通过以下方式验证 Edgegap 服务状态： [我们的正常运行监控页面](https://status.edgegap.com/).
* 尝试使用 Docker Desktop 在本地测试你的服务器容器，以排除 Edgegap 问题。

{% hint style="info" %}
如果你需要帮助， [请通过 Discord 联系我们](https://discord.gg/MmJf8fWjnt)。关于实时游戏支持，请查看我们的 [工单系统](https://edgegap.atlassian.net/servicedesk/customer/portal/3).
{% endhint %}

{% hint style="success" %}
**寻求帮助时，** **请包含你的部署 ID 以及任何有用的详细信息** 以便我们能尽快调查！
{% endhint %}

#### 5. 部署已停止

**未经你的指示，我们绝不会停止你的服务器**，以防止对你的玩家体验造成负面影响。你的部署可能因以下原因停止：

* **通过以下方式自我停止：** [**DELETE\_URL**](/zh/learn/bian-pai/deployments.md#injected-environment-variables) ——在玩家离开且比赛结束后，部署自行停止，
  * 参见 [Unreal Engine](/zh/unreal-engine.md#stop-deployments) 和 [Unity](/zh/unity.md#stop-deployments) 正确停止部署的指南，
* **从你的后端停止** ——你的后端使用以下方式停止了此部署： [部署 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-delete),
* **游戏最大时长** ——你的 [应用与版本](/zh/learn/bian-pai/application-and-versions.md#safety-guardrails) 中分配的时间已到期，
* [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md) 运行你部署的主机已通过计划任务被删除。

{% hint style="info" %}
一旦部署停止， **我们会触发优雅终止** 通过发送 `SIGTERM` 信号到你的主进程，允许一个短暂的终止期。期满后，会发送 `SIGKILL` 信号以停止部署。
{% endhint %}

## 👀 可观测性

允许游戏服务器与第三方互操作并获得运营洞察。

### 可发现性

就绪后，部署会被分配一个 URL（[fqdn](https://en.wikipedia.org/wiki/Fully_qualified_domain_name)）以及每个内部端口对应的外部端口。

{% hint style="success" %}
使用 **部署标签（最多 40 个字符）轻松标记你的部署** 和 [#filter-deployments](#filter-deployments "mention").
{% endhint %}

{% hint style="info" %}
**来自你的游戏服务器的出站流量（到客户端或后端）绝不会被阻止** 或过滤。
{% endhint %}

#### **WebSocket（WS）和安全 WebSocket（WSS）**

若要在 Edgegap 上使用基于 WebSocket 的网络代码，你有两个选项：

* **托管证书**，1 分钟内即可设置，无需编写任何代码：
  * 配置你的 [应用与版本](/zh/learn/bian-pai/application-and-versions.md) 转向 **使用 WebSocket（WS）并启用 TLS 升级，**
  * 使用 Edgegap URL 连接客户端（例如 `https://5fa53fa00a57.pr.edgegap.net/`)
* **自托管证书**，如果你想使用自己的自定义域名：
  * 配置你的 [应用与版本](/zh/learn/bian-pai/application-and-versions.md) 转向 **使用安全 WebSocket（WSS）**,
  * 使用自定义 DNS 记录配置你自己的 TLS 证书流程（例如在 [Cloudflare](https://www.cloudflare.com/application-services/products/ssl/)).

{% hint style="danger" %}
未捕获的服务器异常会导致部署的容器重启并使 TLS 安全性失效。在这种情况下， [停止您的服务器](#id-5.-deployment-stopped) 和 [将玩家重新匹配到新的部署](/zh/learn/pi-pei.md#custom-lobby). [服务器状态可能会丢失](/zh/learn/bian-pai/chi-jiu-hua.md#state-management).
{% endhint %}

### 注入变量 <a href="#injected-environment-variables" id="injected-environment-variables"></a>

游戏服务器通常需要额外信息，例如服务器 IP、内部端口值或其他信息。注入只读环境变量是一种可靠、与云无关的参数传递方式。

{% hint style="success" %}
使用以下方式获取变量值 [C# 中的 GetEnvironmentVariable](https://learn.microsoft.com/en-us/dotnet/api/system.environment.getenvironmentvariable?view=net-8.0) 或 [C++ 中的 GetEnvironmentVariable](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/GenericPlatform/FGenericPlatformMisc/GetEnvironmentVariable).
{% endhint %}

{% hint style="info" %}
查看 [应用版本变量](/zh/learn/bian-pai/application-and-versions.md#injected-variables) 和 [匹配器变量](/zh/learn/pi-pei/matchmaker-in-depth.md#injected-variables) 以及下面的部署变量。
{% endhint %}

#### **自定义变量**

为每个部署定义最多 20 个自定义变量，每个变量最多可包含 4KB 的字符串数据。

{% hint style="warning" %}
**请避免使用保留名称（见下方），否则您的自定义变量将被覆盖！**
{% endhint %}

通过读取 Edgegap 注入到您的服务器中的变量来访问重要信息：

#### **标识符**

* **`ARBITRIUM_REQUEST_ID`**  - 例如 `f68e011bfb01` .
  * 唯一部署 ID，也称为请求 ID。用于检索更多信息。
  * 部署 URL 始终具有如下格式 `{ARBITRIUM_REQUEST_ID}.pr.edgegap.net`.
* **`ARBITRIUM_PUBLIC_IP`**  - 例如 `162.254.141.66` .
  * 此主机的公网 IP 地址，可用于替代 URL 进行连接。
* **`ARBITRIUM_HOST_ID`**  - 例如 `alpha-north-america-70364ef8` .
  * 托管您部署的机器的唯一标识符，会与其他部署共享。
* **`ARBITRIUM_DEPLOYMENT_TAGS`**  - 例如 `tag1,tag2` .
  * 以逗号分隔的用户定义部署标签， [便于轻松搜索和筛选](#filter-deployments).
* **`ARBITRIUM_PRIVATE_FLEET_ID`** - 例如 `PUBLIC_CLOUD` ，或在以下环境中托管时的舰队 ID： [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md).

#### 资源规格

* **`ARBITRIUM_HOST_IN_PRIVATE_FLEET`** - 例如 `false` ，表示是否托管在 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md).
* **`ARBITRIUM_HOST_BASE_CLOCK_FREQUENCY`**  - 例如 `2000` ，处理器频率（MHz）。
* **`ARBITRIUM_DEPLOYMENT_VCPU_UNITS`**  - 例如 `256`，分配的 vCPU 单位（1024 = 1 vCPU）。
* **`ARBITRIUM_DEPLOYMENT_MEMORY_MB`**  - 例如 `512`，分配的内存大小（MB，1024 = 1 GB）。

#### **生命周期管理**

* **`ARBITRIUM_DELETE_URL`**  - 例如 `https://api.edgegap.com/v1/self/stop/9f511e17/660`.
  * 可从部署内调用， [部署将被优雅停止](#id-5.-deployment-stopped).
  * 需要唯一的一次性 `ARBITRIUM_DELETE_TOKEN` 在 `Authorization` 请求头中。
* **`ARBITRIUM_DELETE_TOKEN`**  - 例如 `7df4cd933df87084b34ae80d8abde293`.
* **`ARBITRIUM_CONTEXT_URL`**  - 例如 `https://api.edgegap.com/v1/context/9170f5211e17/17`.
  * 只能从部署内调用，返回更多部署详情。
  * 需要唯一的 `ARBITRIUM_CONTEXT_TOKEN` 在 `Authorization` 请求头中。
* **`ARBITRIUM_CONTEXT_TOKEN`**  - 例如 `dfaf50b9333b9ee07b22ed247e4a17e6`.

#### **可发现性**

* **`ARBITRIUM_PORT_GAMEPORT_INTERNAL`**  - 例如 `7777` ，用于服务器监听的内部端口。
* **`ARBITRIUM_PORT_GAMEPORT_EXTERNAL`**  - 例如 `31504` ，用于客户端连接的外部端口。
  * 出于安全考虑，每个部署的外部端口值都会随机化。
* **`ARBITRIUM_PORT_GAMEPORT_PROTOCOL`**  - 例如 `UDP` ，您的 netcode 传输协议。

{% hint style="success" %}
示例假设您已将端口命名为 `gameport` （默认）。 **每个端口都会额外添加一组已清理的** [应用与版本](/zh/learn/bian-pai/application-and-versions.md#port-mapping) **变量：** `@Super Port!` ⇒ `ARBITRIUM_PORT_SUPER_PORT_INTERNAL` .
{% endhint %}

* **`ARBITRIUM_BEACON_ENABLED`**  - 例如 `true`，如果部署在 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md) 结合 [Ping 信标](/zh/learn/bian-pai/ping-beacons.md).
* **`ARBITRIUM_HOST_BEACON_PUBLIC_IP`**  - 例如 `139.177.198.69` ，最近信标的公网 IP。
* **`ARBITRIUM_HOST_BEACON_PORT_UDP_EXTERNAL`**  - 例如 `30199`，用于通过 UDP 进行 ping 测量。
* **`ARBITRIUM_HOST_BEACON_PORT_TCP_EXTERNAL`**  - 例如 `30456`，用于通过 TCP 进行 ping 测量。

#### **结构化信息（以字符串形式表示的 JSON）**

{% hint style="info" %}
环境变量 **以字符串化 JSON 的形式存储**，请使用 SDK 或自定义方法进行解析。
{% endhint %}

<details>

<summary><strong>ARBITRIUM_DEPLOYMENT_LOCATION</strong>：<br>- 有关部署位置的详细信息。</summary>

```json
ARBITRIUM_DEPLOYMENT_LOCATION="{
  "city": "蒙特利尔",
  "country": "加拿大",
  "continent": "北美",
  "administrative_division": "魁北克",
  "timezone": "东部时间",
  "latitude": 45.513707,
  "longitude": -73.619073
}"
```

</details>

<details>

<summary><strong>ARBITRIUM_PORTS_MAPPING</strong>：<br>- 有关您的内部和外部端口的详细信息。</summary>

```json
ARBITRIUM_PORTS_MAPPING="{
  "ports": {
    "gameport": {
      "name": "游戏端口",
      "internal": 7777,
      "external": 31504,
      "protocol": "UDP"
    },
    "webport": {
      "name": "Web 端口",
      "internal": 8888,
      "external": 31553,
      "protocol": "TCP"
    }
  }
}"
```

</details>

### 仪表板监控

我们的 [仪表板](https://app.edgegap.com/) 提供用于监控服务器可扩展性并辅助运维的实用工具。

#### 分析

{% hint style="success" %}
查找 [侧边栏菜单中的分析仪表板](https://app.edgegap.com/analytics/dashboards/list) ，位于“服务器托管与编排”分类下。
{% endhint %}

:star2: [**升级到按量付费套餐**](https://app.edgegap.com/user-settings?tab=memberships) **以解锁详细的服务器性能指标和洞察：**

* **总体洞察：** 通过每个版本的实时服务器数量 + 资源使用概览来监控发布，
* **CPU 洞察**：排查因处理器密集型操作导致的服务器卡顿，
* **内存洞察**：减少因超出分配内存而导致的服务器重启，
* **网络洞察：** 检测低效的网络模式并优化 netcode。

<figure><img src="/files/1fe080df503d808db717217af72e8d06f2a68d76" alt=""><figcaption></figcaption></figure>

#### 部署地图

{% hint style="success" %}
在以下位置查找部署地图 [您的 Dashboard 部署详情页面中](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

在地图上预览部署位置、可用位置和预估玩家位置：

<figure><img src="/files/bea6652c29878a253706070954af3021e223b0f7" alt=""><figcaption></figcaption></figure>

#### 部署平衡点

{% hint style="success" %}
在以下位置查找部署平衡点热力图 [您的 Dashboard 应用详情页面中](https://app.edgegap.com/application-management/applications/list).
{% endhint %}

预览部署平衡点热力图，并按 [应用与版本](/zh/learn/bian-pai/application-and-versions.md)进行筛选。平衡点是指在给定部署中与每位玩家具有相同网络邻近性的近似位置：

<figure><img src="/files/cc02eb59be705e677321271edac218365bb4a44c" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
位于奇怪位置（例如格陵兰）的平衡点热点表明，玩家彼此之间相距很远。了解 [#connection-quality](#connection-quality "mention") 和 [Ping 信标](/zh/learn/bian-pai/ping-beacons.md) 以优化您的匹配。
{% endhint %}

#### 部署日志

{% hint style="success" %}
在以下位置查找部署日志 [您的 Dashboard 部署详情页面中](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

部署日志显示有关 [#deployment-lifecycle](#deployment-lifecycle "mention"):

<figure><img src="/files/ab66fcf5c1f0f83117417347efb7d6a921c930b8" alt=""><figcaption></figcaption></figure>

#### 容器日志

{% hint style="success" %}
在以下位置查找容器日志 [您的 Dashboard 部署详情页面中](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

如有问题，或在调试时，请检查您的游戏服务器日志：

<figure><img src="/files/b20b6aa31815b0c56cb645ded63c79d8ccded124" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
**一旦部署停止，容器日志将被删除。** 设置 [第三方 S3 日志存储](/zh/docs/endpoint-storage.md) 以保存日志。
{% endhint %}

#### 容器指标

{% hint style="success" %}
在以下位置查找容器指标 [您的 Dashboard 部署详情页面中](https://app.edgegap.com/deployment-management/deployments/list).
{% endhint %}

查看容器指标（处理器、内存、网络）以：

* 识别常见连接问题，当 [#troubleshooting](#troubleshooting "mention"),
* 检测导致资源使用峰值的低效实现模式，
* 在特定场景下精准定位低效的资源使用，
* 验证优化期间服务器资源使用情况的变化，
* 基准测试您的服务器初始化资源消耗和时长。

历史指标以 1 分钟时间周期显示平均值，可在免费套餐中使用。

:star2: [**升级到按量付费套餐**](https://app.edgegap.com/user-settings?tab=memberships) **以解锁 1 秒时间间隔的精确指标。**

<figure><img src="/files/638b41286595e41c20f86c46d74eaa2fc6f6caca" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
[联系我们](mailto:info@edgegap.com) 在发布前请求大规模发布的实时托管支持。
{% endhint %}

### 上下文与状态

可通过 JSON 格式检索额外的部署信息：

* 从部署内部（游戏服务器）使用 [部署上下文 API](https://docs.edgegap.com/api/#tag/Context/operation/context-get),
* 从部署外部（后端 / 第三方）使用 [部署状态 API](https://docs.edgegap.com/api/#tag/Deployments/operation/deployment-status-get).

{% hint style="info" %}
部署内的上下文 API 需要 Context API 令牌，而 Status API 使用您的 Edgegap 令牌。
{% endhint %}

{% hint style="danger" %}
**请求过多 429 - Context 和 Status API 的速率限制为每个组织 20 次请求/秒。**
{% endhint %}

{% hint style="success" %}
**使用** [#webhooks](#webhooks "mention") **用于自动化（自定义匹配）以避免速率限制并确保可扩展性。** Context 和 Status API 仅用于开发、QA 和故障排查目的。
{% endhint %}

### 筛选部署

要快速搜索所有部署，您可以 [使用我们的仪表板](https://app.edgegap.com/deployment-management/deployments/list):

<figure><img src="/files/2350252eb260d5f30aa5783c31b4900768778737" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
或者，让玩家 **从列表中选择一个持久的（始终在线）服务器** 带有 [服务器浏览器](/zh/learn/fu-wu-qi-liu-lan-qi.md).
{% endhint %}

[使用 API 列出部署](https://docs.edgegap.com/api/#tag/Deployments/operation/deployments-get) 并通过后端集成应用筛选条件：

<table><thead><tr><th width="237">部署属性</th><th width="193">运算符</th><th>示例值</th></tr></thead><tbody><tr><td><a href="/pages/5e7e2169ca3822647d4607dfc1d3487ebcc0836c#deployment-lifecycle"><code>status</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"ready"</code> 或 <code>"error"</code></td></tr><tr><td><a href="#observability"><code>request_id</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a> </td><td><a data-footnote-ref href="#user-content-fn-4"><code>"7e709a0d8efd"</code></a></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>在</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><a data-footnote-ref href="#user-content-fn-4"><code>[ "7e709a0d8efd", "4ba353100b4b" ]</code></a></td></tr><tr><td><a href="#discoverability"><code>tags</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"tagA"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>在</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "tagA", "tagB" ]</code></td></tr><tr><td><a href="#id-1.-start-a-deployment"><code>created_at</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-7"><code>lte</code></a>  或 <a data-footnote-ref href="#user-content-fn-8"><code>gte</code></a></td><td><a href="https://en.wikipedia.org/wiki/ISO_8601"><code>2025-05-12T20:03:20Z</code></a></td></tr><tr><td><a href="/pages/26d6dbbfe78b518cb1a2c18e767a1a5de69c506c"><code>application</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>在</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "my-app", "my-other-app" ]</code></td></tr><tr><td><a href="/pages/26d6dbbfe78b518cb1a2c18e767a1a5de69c506c"><code>version</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"1.0.0"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-9"><code>在</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "1.0.0", "prod" ]</code></td></tr><tr><td><a href="/pages/3c7cd8f1b8dc649268f6411b6023acc174fe28ee"><code>fleet_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"my-app-fleet-europe"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>在</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "fleet-eu", "fleet-us" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%-eu%"</code></td></tr><tr><td><a href="/pages/3c7cd8f1b8dc649268f6411b6023acc174fe28ee"><code>host_name</code></a></td><td><a data-footnote-ref href="#user-content-fn-2"><code>eq</code></a>  或 <a data-footnote-ref href="#user-content-fn-3"><code>neq</code></a></td><td><code>"alpha-north-america-95fab093"</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-5"><code>在</code></a>  或 <a data-footnote-ref href="#user-content-fn-6"><code>nin</code></a></td><td><code>[ "alpha-north-america-95fab093" ]</code></td></tr><tr><td></td><td><a data-footnote-ref href="#user-content-fn-10"><code>ilike</code></a></td><td><code>"%north-america%"</code></td></tr></tbody></table>

{% hint style="info" %}
每个属性在单个请求中最多只能使用 1 个过滤运算符。请参见 [API 参考](/zh/docs/api.md) 了解更多。
{% endhint %}

按结果中请求中出现的顺序对多个字段进行排序：

| 部署属性                                                                                   | 顺序                                                                     |
| -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| [`created_at`](#id-1.-start-a-deployment)                                              | [`asc`](#user-content-fn-11)[^11] 或 [`desc`](#user-content-fn-12)[^12] |
| [`available_session_sockets`](broken://pages/11ccd578e752c64b01112507ccb14f0f02f0bedf) | [`asc`](#user-content-fn-13)[^13] 或 [`desc`](#user-content-fn-14)[^14] |

示例筛选查询：

<details>

<summary>列出 <a href="#id-4.-deployment-error">错误状态的部署</a> 以便排查并移除。</summary>

编码后的 URL：

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"error"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"green"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

格式化后的 JSON 查询：

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "error"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "green"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

<details>

<summary>列出 <a href="/pages/6f9da0e6c31c7a483b63af1c186100316ca2f793#rolling-updates-and-ab-tests">使用过期 App 版本的部署</a> 以确认发布已完成。</summary>

编码后的 URL：

```
https://api.edgegap.com/v1/deployments?query={"filters":[{"field":"status","operator":"eq","value":"ready"},{"field":"application","operator":"eq","value":"my-app"},{"field":"version","operator":"eq","value":"blue"}],"order_by":[{"field":"created_at","order":"desc"}]}
```

格式化后的 JSON 查询：

```json
{
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "ready"
    },
    {
      "field": "application",
      "operator": "eq",
      "value": "my-app"
    },
    {
      "field": "version",
      "operator": "eq",
      "value": "blue"
    }
  ],
  "order_by": [
    {
      "field": "created_at",
      "order": "desc"
    }
  ]
}
```

</details>

{% hint style="success" %}
别忘了添加 `Authorization` 请求中的 Edgegap API 令牌请求头。
{% endhint %}

### Webhook

在您的游戏后端中接收关于以下变化的简单 HTTP 通知 [#deployment-lifecycle](#deployment-lifecycle "mention") 通过在您的 [部署 API 请求中](/zh/docs/api/zhuan-yong-fu-wu-qi.md#post-deployments)指定 webhook URL。可用于：

* 就绪时：部署容器 [已成功启动](#id-1.-start-a-deployment) （服务器随后开始初始化），
* 出错时：部署无法启动，并且 [#id-4.-deployment-error](#id-4.-deployment-error "mention") 发生了错误，
* 终止时： [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") 且游戏服务器不再可访问。

就绪和错误 Webhook 永远不会针对同一个部署被触发。

<details>

<summary>Webhook 示例载荷</summary>

```json
{
  "request_id": "f68e011bfb01",
  "application": "my-game-server",
  "version": "2024.01.30-16.23.00-UTC",
  "fqdn": "f68e011bfb01.pr.edgegap.net",
  "public_ip": "162.254.141.66",
  "deployed_at": "2026-02-10T20:35:48Z",
  "termination_scheduled_at": "2026-02-10T21:35:48Z",
  "ports": {
    "gameport": {
      "external": 31504,
      "internal": 7777,
      "protocol": "UDP",
      "name": "gameport",
      "tls_upgrade": false,
      "link": "f68e011bfb01.pr.edgegap.net:31504",
      "proxy": null
    }
  },
  "location": {
    "city": "蒙特利尔",
    "country": "加拿大",
    "continent": "北美",
    "administrative_division": "魁北克",
    "timezone": "东部时间",
    "latitude": 45.513707,
    "longitude": -73.619073
  },
  "tags": [
    "tag1",
    "tag2"
  ],
  "host_id": "alpha-north-america-70364ef8",
  "host_in_private_fleet": false,
  "private_fleet_id": "PUBLIC_CLOUD",
  "vcpu_units": 256,
  "memory_mib": 512
}
```

</details>

{% hint style="success" %}
**Webhook 是自定义后端部署集成的主要推荐方法。**
{% endhint %}

{% hint style="warning" %}
**Webhook 不会重试**，如果由于速率限制或错误导致您的后端未处理该请求，则可能会丢失。如果在预期时间内没有收到 webhook，请回退到 Status API。
{% endhint %}

{% hint style="info" %}
Webhook 会观察部署生命周期，但不了解您的场景/关卡初始化状态。要观察场景/关卡的加载进度，请在游戏服务器中实现自定义 webhook。
{% endhint %}

## 🚨 故障排查

在排查部署问题时：

1. 验证您的 [#deployment-logs](#deployment-logs "mention") 和 [#container-logs](#container-logs "mention"),
2. 请在本地运行你的服务器，以排除集成问题，
3. 请查看此页面上的故障排除步骤，
4. 通过以下方式联系我们： [社区 Discord](https://discord.gg/MmJf8fWjnt) 并附上你的部署 ID。

{% hint style="info" %}
查看 [#player-issue-resolution](#player-issue-resolution "mention") 了解我们关于应对玩家社区反馈的建议。
{% endhint %}

<details>

<summary>无法将客户端连接到服务器 - <code>请求超时。</code>, <code>请求超时</code> , <code>连接失败</code> ，或 <code>端口验证失败</code>.</summary>

* 首先，确保部署已就绪，并且你的部署日志中没有运行时异常或错误。如果你的部署已停止，请查看我们的 [仪表板](https://app.edgegap.com/deployment-management/deployments/list).
* 如果你使用的是 Mirror netcode，则需要启用 [“Auto Start Server”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) 在你的 `NetworkManager` ，然后重新构建、推送并重新部署你的服务器。
* 如果你使用的是 FishNet netcode，则需要启用 [“Start on Headless”](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) 在你的 `ServerManager`，然后重新构建、推送并重新部署你的服务器。
* 如果你使用的是 Photon Fusion 2 netcode，请确保你的服务器传递了部署的公网 IP、外部端口以及 `房间代码` 在服务器端的 roomCode，以及客户端中的相同房间代码，在 [“NeworkRunner.StartGame”](https://doc.photonengine.com/fusion/current/manual/network-runner#creating-or-joining-a-room) 参数 `StartGameArgs`。部署 ID（例如 `b63e6003b19f`）是一个很好的选择，因为它在全球范围内是唯一的，客户端可通过 [匹配器](/zh/learn/pi-pei/matchmaker-in-depth.md) 分配以及 [深入了解](/zh/learn/pi-pei/matchmaker-in-depth.md#injected-environment-variables).
* 接下来，请验证你服务器构建中的 netcode 设置里的端口配置是否与你的内部端口匹配 [应用版本](https://app.edgegap.com/application-management/applications/list)。你可以通过编辑 [应用版本](https://app.edgegap.com/application-management/applications/list) 而无需重新构建来更改端口映射。请在你的 netcode 集成中找到对应的协议。
* 请确保你的游戏客户端连接到 **外部端口** 在你的部署详情页面上显示的端口；由于安全原因，此值始终会随机生成。
* 如果你在 netcode 集成中使用 Secure Websocket（WSS）协议，请确保你的 [应用版本](https://app.edgegap.com/application-management/applications/list) WSS 端口的端口配置已启用 TLS 升级。
* 你是否位于中国并正在 [Smart Fleets](https://docs.edgegap.com/docs/deployment/session/fleet-manager/fleet)？你的连接可能被防火长城阻止。可以考虑在你的舰队中添加位于中国的服务器，或者使用 VPN 连接。

</details>

<details>

<summary>我的部署已停止/重启，我再也无法访问它的日志了。</summary>

* 如果服务器进程因异常崩溃，我们的系统会尝试自动重启服务器。建议在本地测试你的服务器以找出根本原因。
* 我们只会在部署期间保留日志，如果你希望在部署停止后查看日志，请 [集成第三方日志存储](https://docs.edgegap.com/docs/deployment/endpoint-storage).
* 查看 [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") 以找出导致部署停止的所有原因。

</details>

<details>

<summary>我的部署在 X 分钟后自动停止。</summary>

* 免费套餐部署有 60 分钟的时限，请考虑升级你的账户。
* 根据我们的服务器清理策略，所有部署在运行 24 小时后都会被终止，以便进行基础设施维护，并防止在部署未正确关闭时产生意外费用。对于长期运行的服务器，建议使用 [私有舰队](/zh/learn/bian-pai/si-you-jian-dui.md) 结合 [持久化](/zh/learn/bian-pai/chi-jiu-hua.md).
* 查看 [#id-5.-deployment-stopped](#id-5.-deployment-stopped "mention") 以找出导致部署停止的所有原因。

</details>

<details>

<summary>我的部署已就绪，但之后几分钟内我仍无法连接。</summary>

* 一旦部署处于 Ready 状态，你的游戏引擎初始化就会开始。这个过程可能需要几秒到几分钟，在此期间服务器不会接受玩家连接。
* 请考虑优化服务器初始化以缩短这段时间。
* 游戏客户端应以 1 秒间隔重试连接，持续一段有限的时间（取决于你的初始化时长），之后再返回匹配。
* 可以考虑添加一个加载场景，使服务器能够与客户端同时执行初始化（在 Unreal Engine 中还可进行关卡切换），同时同步双方状态。

</details>

<details>

<summary>我的 Meta Quest 设备提示 <code>HTTP 0：无法解析目标主机</code> .</summary>

* 在为 Android 目标构建 Unity 应用时，你的 Internet Access 权限可能会从输出的 APK 客户端构建产物中自动移除。
* 请在以下位置重新添加权限（之后需要重新构建客户端）：
  * 项目设置 / OpenXR / :gear: Meta Quest Support / 强制移除 Internet 权限（取消勾选）。
  * Player Settings / Internet Access（设为 require）。

</details>

<details>

<summary>如果玩家离开我的部署，会发生什么？</summary>

* 默认情况下，服务器不会拒绝玩家连接。玩家认证由你的开发者自行决定，因为可以使用多种不同的方法和玩家认证提供商。
* 游戏客户端可能会在本地存储连接信息，以便在客户端意外崩溃时尝试重新连接。
* 若要允许玩家加入进行中的游戏，可以考虑使用 [深入了解](/zh/learn/pi-pei/matchmaker-in-depth.md#backfill) 或 [会话](https://docs.edgegap.com/docs/deployment/session).

</details>

<details>

<summary>我的服务器在进入就绪状态后显示 100% CPU 使用率。</summary>

* 这可能不是问题，因为游戏引擎在服务器初始化期间通常会执行大量 CPU 密集型操作。如果在部署开始后 2-3 分钟 CPU 使用率仍未下降，你可能需要优化服务器或增加应用版本资源。
* 降低 tick rate 会影响 CPU 使用率，因为服务器执行的消息操作会更少。
* 如果你使用的是 Mirror netcode，则需要启用 [“Auto Start Server”](https://mirror-networking.gitbook.io/docs/hosting/edgegap-hosting-plugin-guide#build-and-push) 在你的 `NetworkManager` ，然后重新构建、推送并重新部署你的服务器。
* 如果你使用的是 FishNet netcode，则需要启用 [“Start on Headless”](https://fish-networking.gitbook.io/docs/manual/components/managers/server-manager#settings-are-general-settings-related-to-the-servermanager) 在你的 `ServerManager`，然后重新构建、推送并重新部署你的服务器。
* 在免费套餐中，你的资源限制为 1.5 vCPU 和 3GB 内存（RAM）。
* 在创建新的应用版本时，你可以增加分配的资源。你可以在我们的仪表板中复制你的应用版本，并根据需要调整这些值，而无需重新构建服务器或镜像。

</details>

<details>

<summary>我的部署正在反复重启，并显示错误 `OOM kill`。</summary>

* 这种行为是由于超出了分配的内存量。请考虑通过对象池、压缩，或移除场景中不需要的对象来优化内存使用。
* 确保你的项目正在加载包含你的 `NetworkManager` 以及该场景已包含在 Unity 的 Build Settings 中。
* 在免费套餐中，你的资源限制为 1.5 vCPU 和 3GB 内存（RAM）。
* 在创建新的应用版本时，你可以增加分配的资源。你可以在我们的仪表板中复制你的应用版本，并根据需要调整这些值，而无需重新构建服务器或镜像。

</details>

<details>

<summary>有时，我的服务器内存（RAM）使用会飙升到很高，这有问题吗？</summary>

* 只要你保持在分配的应用版本内存量内，这就不是问题。&#x20;
* 超过分配的应用版本内存量会导致 \`OOM kill\`（见上文）。

</details>

<details>

<summary>与我服务器运行在同一台机器上的其他服务器会影响我的服务器性能吗？</summary>

* 不会，我们的平台确保分配的资源不会被其他工作室或共享基础设施上的其他服务器使用。使用 Edgegap，不会有“吵闹的邻居”。

</details>

[^1]: 会话可持续长达 24 小时

[^2]: 等于

[^3]: 不等于

[^4]: request\_id（部署 ID）

[^5]: 在数组中

[^6]: 不在数组中

[^7]: 小于或等于

[^8]: 大于或等于

[^9]: &#x20;在数组中

[^10]: 不区分大小写的模式匹配：

    * 使用 `%`  表示任意序列
    * 使用 `_`  表示任意单个字符

[^11]: 升序，最旧的在前

[^12]: 降序，最新的在前

[^13]: 升序，满的在前

[^14]: 降序，空的在前
