Azure 云服务工作者角色崩溃和不健康
Posted
技术标签:
【中文标题】Azure 云服务工作者角色崩溃和不健康【英文标题】:Azure Cloud Service Worker Role Crashing and Unhealthy 【发布时间】:2012-12-12 01:43:40 【问题描述】:我有一个项目,具有一个 Web 角色和一个 Worker 角色。 每当我在本地测试时,我的 web 和 worker 角色都会按预期工作。 (注意,虽然本地版本使用 Azure Compute Emulator,但服务总线队列和消息队列使用实时云版本。) 但是,云服务工作者角色在某些操作期间有崩溃的趋势。它会导致实例“回收”并且消息卡在 Azure 服务总线队列中。直到我在本地运行云服务,它才成功处理了消息,然后将其从队列中删除。即使角色正常工作,Azure 也经常在仪表板上告诉我辅助角色运行“不健康”。
Azure 门户曾一度打印出以下错误:
未处理的异常:System.Reflection.ReflectionTypeLoadException
为此,我在我的项目中添加了异常处理,并在将更新部署到云后再次尝试,但同样的事情一直在发生。当我将异常处理添加到我的项目时,我不得不将 System.Reflection 库添加到我的工作角色中,但这让我更加困惑。我不明白为什么我在调用一个我什至最初没有在我的项目中使用的库时收到错误。
有人知道这个问题可能是什么吗?
更新:
我做了一些手动调试,并注意到异常在 Worker Role 的 Run() 中被调用。导致问题的代码行涉及使用实体框架调用数据库。具体线路是:
图像 imageEntity = db.Images.Find(ImgViewFromQueue.Id);
我想知道这个问题是否与未在 Azure 服务器上正确启用或配置实体框架有关。
【问题讨论】:
你能检查一下你是否遇到here列出的任何错误 我只是尝试通过将所有引用设置为 true 来执行他们在该页面上提到的事情,但它没有解决任何问题。 在您的工作角色中,您使用的是 Linq 还是 ADO.NET? 控制是否到达 OnStart()?如果是这样 - 将 OnStart() 和 Run() 实现包装到 try-catch 中,并使用调用堆栈和所有可能的详细信息捕获并记录异常。 @AshwinSingh 我正在使用实体框架(我认为是 ADO.NET)。 【参考方案1】:我在 OSFamily=3 (Server 2012) 上运行辅助角色时遇到了类似问题。如果您在 3 上运行并且可以回滚到 2,您可能会发现 worker 角色工作得很好。我在 Azure 支持工程师的帮助下回答了我的问题 - Azure Worker Role runs on osFamily="2" (Server 2008R2) but Fails on osFamily="3" (Server 2012)
区别:在OS Family 2中,WaWorkerHost运行在一个Role初始化过程生成的临时账户(带有GUID名称)下,该账户有特殊权限;在 OS Family 3 中,WaWorkerHost 由“NETWORK SERVICE”帐户运行,此帐户缺少工作角色的一些权限。
如果您必须拥有 OSfamily 3,您可以尝试使用提升的权限运行。在您的 cscfg 文件中的 <WorkerRole>
元素中,添加子元素:
<Runtime executionContext="elevated" />
【讨论】:
我项目中的配置文件使用 OSFamily=2 并且云服务在 Server 2008 R2 上运行,所以我相信我遇到了不同的问题。 您可以 RDP 进入实例并检查事件日志。包括来自那里的任何错误以及您在其他地方使用完整堆栈跟踪记录的任何错误。 它在定义文件中——不是配置文件;因此在您的 csdef 文件中。【参考方案2】:不确定您是否可以启用 InelliTrace 并重新部署您的包,那么希望您会在系统中找到实际的异常。只是我的 2 美分。
【讨论】:
以上是关于Azure 云服务工作者角色崩溃和不健康的主要内容,如果未能解决你的问题,请参考以下文章