【问题标题】:Azure Roles Recycle - Infinite Busy StateAzure 角色回收 - 无限忙碌状态
【发布时间】:2017-01-28 13:45:01
【问题描述】:

此问题于 2017 年 1 月 24 日星期二开始发生。在此之前,我从未遇到过工人角色回收问题。

美国东部标准时间晚上 9 点左右,我的工作角色进入忙碌状态。 CPU 达到 90%。它会保持这种状态超过 10 个小时。它从一个角色开始,然后传播到其他角色。我的软件白天运行良好。我的工人角色使用标准的 A0 超小尺寸。我尝试将尺寸增加到小标准 A1,但错误仍然存​​在。

我的代码是 StorageConnectionString。我运行了一个调试器,我只看到过一次这个错误:

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理

附加信息:已成功与服务器建立连接,但在登录前握手期间发生错误。 (提供者:TCP Provider,错误:0 - 现有连接被远程主机强行关闭。)

这导致异常并且角色停止。不过,我再也没有见过它。

我必须将我的站点部署到登台服务器,停止生产服务器,然后单击交换以使其工作。当天晚些时候,它在晚上 9 点再次中断。

当我的角色很忙时,我收到以下错误:

忙(稳定角色... [01/28T13:28Z]角色将回收。上次 OnRoleRun 正常返回。上次退出时间:

我在事件日志中做了远程桌面。这是我收到的错误:

WaWorkerHost 加载角色程序集失败:XX.TaskRole,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null

这是我的工人角色代码:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.Net;
using System.Threading;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Queue;
using Microsoft.Azure;

namespace XX.TaskRole
{
    public class WorkerRole : RoleEntryPoint
    {
        string conString = ConfigurationManager.ConnectionStrings["XX"].ConnectionString;
        CloudQueue queue;

        public WorkerRole()
        {
            ServicePointManager.DefaultConnectionLimit = 12;
            

        }

        public override void Run()
        {
            // This is a sample worker implementation. Replace with your logic.
            while (true)
            {
                GetTasks();
                Thread.Sleep(30000);
                Trace.TraceInformation("Working", "Information");
            }
        }

        public override bool OnStart()
        {
            try
            {
                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                CloudConfigurationManager.GetSetting("StorageConnectionString"));

                // Create the queue client.
                CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

                // Retrieve a reference to a queue.
                queue = queueClient.GetQueueReference("taskqueue");
                return base.OnStart();
            }
            catch (Exception e)
            {
                // Exception Handling & Logging
                // Return false for OnStart
                
                return false;
            }
        }

        public void GetTasks()
        {
            if (queue == null)
                return;

            try
            {
                //Pull 10 - 15 rows from database. Just numbers and letters. No XML.
            }
            catch (Exception ex)
            {
                
            }
        }
    }
}

【问题讨论】:

  • 可能异常只发生一次,因为获取的值被缓存并重用。
  • 由于缺少程序集而发生错误。在 Visual Studio 中打开您的辅助角色项目。右键单击程序集。如果程序集来自 NuGet,请在您的解决方案中引用这些程序集,而不是在您的 C 驱动器上。

标签: c# azure azure-worker-roles


【解决方案1】:

此问题于 2017 年 1 月 24 日星期二开始发生。在此之前,我从未遇到过工人角色回收问题。

美国东部标准时间晚上 9 点左右,我的工作角色进入忙碌状态。 CPU 达到 90%。它会保持这种状态超过 10 个小时。它从一个角色开始,然后传播到其他角色

操作系统升级后似乎没有达到就绪状态。更多信息我们可以参考document。

忙(稳定角色... [01/28T13:28Z]角色将回收。上次 OnRoleRun 正常返回。上次退出时间:

WaWorkerHost 加载角色程序集失败:XX.TaskRole,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null

根据您提到的错误信息,它表明缺少运行时依赖项。以下是Common issues that cause roles to recycle的截图。

• 如果使用 Visual Studio,请确保对于项目中不属于 Azure SDK 或 .NET Framework 的每个引用程序集,将 Copy Local 属性设置为 True。

• 确保 web.config 文件没有引用编译元素中任何未使用的程序集。

• 每个 .cshtml 文件的构建操作都设置为内容。这样可以确保文件在包中正确显示,并使其他引用的文件可以出现在包中。

我还找到另一个article,关于“云服务角色回收错误”System.IO.FileLoadException: Could not load file or assembly。更多详细信息请参考。

【讨论】:

  • 嗨,我没有看到日志条目显示 System.File.LoadException。我不认为我缺少程序集。如果文件丢失,为什么该软件可以运行将近一天?至于客户操作系统升级,我没有看到任何代码表明加载时间很长。还有什么我可以尝试的吗?我怎么知道哪些文件丢失了?
  • 如果可能,请尝试重新部署它。
【解决方案2】:

Microsoft.WindowsAzure.ServiceRuntime 存在程序集引用错误。正确的参考是 \packages\Microsoft.WindowsAzure.SDK.2.9.0\lib\Microsoft.WindowsAzure.ServiceRuntime.dll。相反,我引用了我的 C: 驱动器上的那个。我使用 NuGet 将程序集添加到我的项目中,并且成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2022-08-09
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多