重新启动后出现“等待服务连接时超时”错误

Posted

技术标签:

【中文标题】重新启动后出现“等待服务连接时超时”错误【英文标题】:"A timeout was reached while waiting for the service to connect" error after rebooting 【发布时间】:2010-12-31 11:21:37 【问题描述】:

我有一个在多个 Hyper-V 虚拟机上运行的自定义编写的 Windows 服务。作为一些正在运行的自动化测试的一部分,虚拟机每小时会重新启动几次。该服务设置为自动启动,几乎所有时间都可以正常启动。

但是,可能有 5% 的情况下,在我无法辨别模式的情况下,服务无法启动。当它失败时,我在事件查看器中收到一条错误消息

等待“我的服务名称”服务连接时超时(30000 毫秒)。

出现这种情况,我可以手动启动服务,或者重新启动,服务就可以正常启动了。

我想不通的是,我的代码中似乎没有出现 30 秒超时。我的服务类的 OnStart() 方法的第一行将“正在启动...”记录到它的 log4net 日志中。当服务无法启动时,我什至什么都没有记录,这表明 log4net 出于某种原因无法记录,或者在调用我的 OnStart() 之前发生超时。

该服务可在各种操作系统上运行,从 XP 一直到 Win7 和 2008R2,我知道将服务设置为延迟启动可能会在 Vista 及更高版本中解决此问题,但这似乎是一种 hack。

我无法远程调试它,因为它在系统启动期间间歇性地发生,而且我不知道进一步的方法来试图弄清楚发生了什么。有什么想法吗?

【问题讨论】:

您的服务是否依赖于任何其他服务,或者是否有任何服务依赖于您的服务才能启动? 不,它是完全独立的。 你在 log4net 中使用什么类型的 appender? 一个 RollingFileAppender,就像我想的一样简单。 【参考方案1】:

我的猜测(仅此而已)是磁盘在启动期间剧烈抖动,以至于 .NET Framework 本身在 Windows 为启动服务分配的 30 秒内没有启动。

一个笨拙的解决方法可能是将服务设置为手动启动,然后在非托管代码(例如 C++、Delphi)中编写一个非常小的存根服务来启动该服务。

另一种方法可能是从另一台机器远程启动服务。 sc 命令应该可以很好地完成这项工作。

【讨论】:

在我的情况下,OnStart 中的第一行是使用 log4net 登录,但我从未见过此日志消息(我没有看到来自服务的日志消息)。电脑很旧,磁盘不是很快。将 ServicesPipeTimeout 更改为 60 秒后,服务正在启动。 (answers.microsoft.com/en-us/windows/forum/windows_7-performance/…)【参考方案2】:

我想我可能还发现了导致这种在重新启动时无法启动错误的另一个因素。

看来,如果 Windows 事件日志设置为覆盖事件 > 7days.. 大小 512kb.. 但在此窗口内发生了很多活动,则事件日志实际上已满,因为它无法覆盖在该时间范围内生成的事件。如果您将事件日志设置为更大的大小或根据需要覆盖,那么您将不会遇到此问题

【讨论】:

【参考方案3】:

不管怎样,我发现我收到了这条消息(几乎是在服务启动时立即收到的),因为我没有在目标机器上安装 .NET 框架的 4.5 版。我将正在使用的版本回滚到 4.0 版本(已安装在目标机器上)并且服务按预期运行。

【讨论】:

谢谢!不幸的是,它不仅告诉您缺少框架:/【参考方案4】:

我遇到相同错误的问题是服务器上的 .Net 安装无法正常工作。

要解决这个问题:

我制作了一个与执行服务具有相同逻辑的小型控制台应用程序,并围绕整个代码片段进行了尝试捕获,将其全部转储到控制台。

不知道为什么信息没有冒泡,但我们看到了有关框架错误的有价值的信息,否则我们永远不会看到这些信息。

【讨论】:

【参考方案5】:

我在尝试使用 powershell 安装服务时在事件查看器中看到此错误。

我遇到的问题是我的 powershell 脚本中的“服务名称”和“服务显示名称”的值与我在控制台应用程序的 program.cs 文件中指定的值不同。

【讨论】:

感谢分享这个建议。我在 app.config 中更新了这些值,它开始工作。我一直在用头撞墙。当我尝试启动我的服务时,它基本上会立即失败 - 30 秒肯定不会过去,这让我质疑事件查看器中的 30,000 毫秒超时消息。这个错误报告很糟糕 - 与超时无关!【参考方案6】:

我们在 Windows 2016 Server 上遇到了同样的问题。

似乎有效的修复程序是将运行服务的用户从本地服务帐户更改为本地管理员(不确定是什么原因)。

【讨论】:

原因可能是“本地服务”服务启动较早,操作系统启动时出现I/O瓶颈,而用户帐户服务启动较晚,更有可能是它会成功的。

以上是关于重新启动后出现“等待服务连接时超时”错误的主要内容,如果未能解决你的问题,请参考以下文章

mysqli_real_connect():(HY000/1698):用户'root'@'localhost'的访问被拒绝-我的mac重新启动后出现此错误[重复]

iOS MagicalRecord 之谜。为啥在 truncateAll 后重新启动时我的数据会重新出现?

电脑出现0xc0000096错误怎么办?

装完系统重新启动后出现BOOTING from c:/windows/”。

keycloak 容器正在重新启动,但出现错误 docker-compose

vcenter上的虚拟机开启后提示密码错误