云脚本故障排除

环境上传失败

如果在网格上传程序过程中的网格云脚本阶段失败,并且显示的错误为“检查日志以了解详细信息”,请确保在 Unity 控制台中显示信息日志。 目前,某些错误显示为信息日志。 这将在未来版本中得到改进。

网格云脚本包安装失败

  1. 如果遇到与包安装或 .NET 工具安装相关的错误(The tool package could not be restoredVerify your unity package integrity),请验证全局 NuGet 配置中是否有无效的包源(在计算机上配置的 NuGet 配置目录下 C:\Users\<UserName>\AppData\Roaming\NuGet\NuGet.config 或默认的 NuGet 配置目录)。
  2. 如果在启动播放模式时遇到 package is already installed 错误,退出“播放模式”并再次启动它应缓解此问题。
  3. 验证目录 Assets\.MeshCloudScripting\.Packages的访问权限。

按 Unity 编辑器播放按钮后,不会发生任何操作

  1. 检查 Unity 日志中是否存在任何错误。 具体而言,如果网格云脚本代码出现编译错误,则错误日志中会显示“云脚本生成失败”。 在这种情况下,请打开 网格云脚本的 csproj 文件并修复错误。 如果从 Visual Studio 生成,则会在生成输出中更方便地显示错误。
  2. 如果存在其他错误,请查看此页面以了解有关特定错误的其他故障排除信息。
  3. 如果没有错误,则网格云脚本代码中可能存在运行时错误。 使用调试器附加到应用程序,并检查输出中是否存在任何错误。
  4. 如果没有帮助, 请报告 bug

在Microsoft网格应用程序中加入事件时,网格云脚本不起作用

  1. 确保场景在 Unity 本地预览时按预期播放。
  2. 确保已部署的环境与网格云脚本服务使用的 scene.map 匹配
    1. 在 Unity 项目中,导航到 网格云脚本 组件,然后按强制 Serialize Scene 场景图序列化。
    2. 使用网格上传程序重新上传环境。
  3. 针对已部署的服务测试本地 Unity 版本
    • 在 Unity 中检查日志中是否有任何错误(如果不起作用)。
  4. 如果没有帮助, 请报告 bug

未收到单击

  1. 网格云脚本服务可能会以太高的频率发送消息,系统无法处理。 在这种情况下,实际上可能会收到单击,但由于消息积压很大,结果需要很长时间才能传播回客户端。 请尝试暂时禁用高频率更新代码,看看这是否修复了该问题。 如果这样做,请考虑移动以驱动 Unity 动画器,而不是从网格云脚本更新属性。
  2. 如果没有帮助, 请报告 bug

按 Play 后 Unity 冻结

如果在 Unity 播放时将焦点从 Unity 切换到另一个应用,则网格云脚本服务将继续运行,将消息提交到消息队列。 将焦点切换回 Unity 时,它会暂停,直到完全清空队列。 如果网格云脚本服务正在进行大量频繁的状态更改和/或已将焦点从 Unity 切换很长一段时间,Unity 可能会冻结一段时间,同时发生这种情况。

如何收集日志

收集 Unity 日志

在报告问题之前,请将详细程度设置为“诊断”。

诊断日志配置

重现问题,然后发送 Unity 日志。 可以使用 Unity 菜单找到日志文件,该菜单默认存储在此位置 %LOCALAPPDATA%\Unity\Editor\Editor.log

收集 Unity 日志

从Microsoft网格应用程序收集客户端日志

通过在名为“startup_settings.json”的桌面上创建包含以下内容的文件来配置电脑客户端日志:

{
  "use_startup_settings": true,
  "log_groups": [
    { "name": "CloudScriptingClientSDK", "level": "Debug" },
    { "name": "CloudScriptingUnityRuntime", "level": "Debug" }
  ]
}

重现问题,然后共享 Unity 日志。 可以在 中找到Microsoft网格应用程序日志 %USERPROFILE%\AppData\LocalLow\Microsoft\Microsoft Mesh\Player.log

收集服务器日志

A. 日志流

I. Azure 门户中的日志流

若要查看网格云脚本服务的日志,请在 AppService 资源的“监视”部分中,单击“日志流”菜单查看容器中的日志,如下图所示。

日志流选择

II. 通过 Azure CLI 进行日志流

如果在本地计算机上安装了 Azure CLI,也可以在终端中运行以下命令,从本地计算机尾随这些日志:

az webapp log tail --name <APP_SERVICE_NAME> --resource-group <RESOURCE_GROUP_NAME>

III. 将日志下载为 zip 文件

还可以通过转到高级工具(Kudu)从托管的应用服务下载日志文件。 在左窗格的“开发工具”部分中,找到“高级工具,然后单击“转到按钮。

AppService 高级工具

SCM 网站随即打开,然后可以将 Docker 日志下载为 Zip 文件,如下所示。

Kudu

B. Azure Monitor

或者,使用 Azure Monitor,可以编写 KQL (Kusto 查询语言) 查询,从事件、时间范围等中选取特别感兴趣的日志。 如果在部署期间选中了“启用应用监视”框,则会自动设置此设置。 如果没有,请参阅 Azure Monitor 部分的手动设置,为部署配置 Azure Monitor。

若要使用此功能, 请在导航窗格的“监视 ”部分中,选择“ 日志”。

AppService 监视

在“查询监视”窗格中,可以选择感兴趣的日志。 在撰写本文时,我们有“AppServiceConsoleLogs”、“AppServiceHTTPLogs”、“AppServiceAppLogs”和“AppServicePlatformLogs”。 若要查看 Docker 容器中的日志,可以在“AppServiceAppLogs”和/或“AppServiceConsoleLogs”中找到更有用的日志。

Azure 监视窗格

在“表”菜单右侧提供的文本框中,键入以下 KQL 查询:

AppServiceConsoleLogs
| extend newLog = iif(
ResultDescription has ": Orleans.LifecycleSubject"
or ResultDescription has ": Orleans.Runtime.Catalog"
or ResultDescription has ": Microsoft.Hosting.Lifetime"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.CloudApplication"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Hosting.Launcher.CloudAppInstance"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Hosting.Core.NamedPipesCloudScriptingSessionGrain"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Cloud.Middleware.CloudScriptingBridge"
or ResultDescription has "UNOBSERVED EXCEPTION:"
or ResultDescription has ": Microsoft.SceneAppService.SceneAppHub"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Hosting.Core.NamedPipesCloudScriptingSessionGrain"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Hosting.Launcher.CloudAppInstanceFactory"
or ResultDescription has ": Microsoft.ClientChannel.Hosting.ProcessLifecycleLoggers"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Services.ApplicationWorkDispatcher"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Services.CloudScriptingHostedService"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Hosting.Launcher.CloudScriptingPreparationService"
or ResultDescription has ": Microsoft.Mesh.CloudScripting.Cloud.Middleware.CloudAppProcessFactory"
or ResultDescription has ": Microsoft.ClientChannel.Resources.ClientLinkGrain"
, 1, 0)
| sort by TimeGenerated asc
| extend logId = row_cumsum(newLog) 
| summarize ResultDescription=make_list(ResultDescription), TimeGenerated=min(TimeGenerated) by logId
| extend ResultDescription = strcat_array(ResultDescription, "")
| sort by TimeGenerated desc
| project TimeGenerated, ResultDescription
| where not (ResultDescription has "Broadcasting data of size")

Azure 监视输入字段

将数据导出到 csv。

Azure 监视导出

Azure Monitor 手动设置(可选)

如果在部署期间选中了“启用应用监视”,请跳过。

此设置需要 Log Analytics 工作区。 如果没有现有工作区,请按照官方 指南进行操作

  1. 打开 Azure 门户并导航到运行网格云脚本服务的 AppService 资源。

  2. 单击“监视”选项卡并滚动到页面底部。 单击“配置 Azure Monitor”按钮

    AppService 监视选项卡

  3. 单击链接“+ 添加诊断设置”以设置将发送到所选工作区的日志类别。

    诊断设置

  4. 在提示符中,填写“诊断设置名称”字段,然后选择感兴趣的日志类别(示例:App 服务控制台日志,App 服务应用程序日志),然后选中“发送到 Log Analytics 工作区”的框,然后选择首选的现有 Log Analytics 工作区。

    创建诊断设置

  5. 从App 服务页启用 Application Insights。 这将确保将日志传播到 Log Analytics 工作区。 启用 App Insights

  6. 填写表单,并确保将其指向在其中创建诊断设置的同一工作区。

    App Insights 窗体

  7. 重启 AppService 并等待几分钟。 现在,应能够查询 Azure Monitor 中的日志,如 Azure Monitor 部分所述。

调查 Azure 中的云脚本部署

  1. 在“网格上传程序 创建环境 ”选项卡中,记下所选的 订阅 ID资源组 值。

    _______________

  2. 在 Azure 门户和所选订阅中,导航到资源组。 可以从搜索栏中搜索资源组名称,也可以导航到“资源组”服务,并在其中查找资源组。 确保你位于正确的租户和订阅中。

  3. 在资源组的“设置”窗格中,导航到“部署”。 这应包含已对资源组进行的所有部署的列表。

  4. 你感兴趣的云脚本部署如下:

  • 应用预配:这是第一个部署运行,用于预配所需的所有云脚本资源。 可以使用 provisionApp 作为部署窗口中的筛选器来标识它。

  • 应用设置:这将创建和更新 Web 应用的设置。 可以使用 svc-appsettings 作为部署窗口中的筛选器来标识它。

  • 暂存应用设置:这将创建和更新 Web 应用的过渡槽。 可以使用 svc-staging-appsettings 作为部署窗口中的筛选器来标识它。

  • 应用部署:这用于后续基础结构更改。 它将最新版本的 cloudhost docker 映像部署到 Web 应用的过渡槽。 这可以通过使用 deployApp 作为部署窗口中的筛选器进行标识。

  • 应用槽交换:这会交换 Web 应用和过渡槽 Web 应用中存在的 cloudhost docker 映像版本。 这可以通过使用 deployApp 交换 作为部署窗口中的筛选器进行标识。

    _______________

若要查看与部署相关的其他详细信息,请单击部署名称。 每个资源类型的操作详细信息包括与部署相关的错误消息。

_______________

下面是部署失败的示例,包括失败的原因:

_______________

_______________

后续可操作步骤取决于特定的错误消息。

如何报告问题

  1. 收集 所有可用的日志。
  2. 遵循 反馈 指南。