我偶然发现了这样一种情况,即我无法启动超过一定数量的.Net windows服务。我们的软件系统是8-9个windows服务的集合,我想在一台机器上创建5个逻辑环境(即大约40个服务)。为了重现这个问题并证明它不是一个应用程序问题,我创建了一个简单的windows服务。
我正在将它编译成TestService.exe,然后创建30个副本。从TestService01.exe到TestService30.exe。我正在使用SC安装服务,如下所示
SC create "Test Service Copy 01" start= demand binpath= "C:\Temp\TestService\TestService01.exe" obj= "mydomain\myservices" password= "myservicepwd" displayname= "Test Service Copy 01"现在,我可以在windows server2003机器上启动15到25个这样的服务。在那之后,我就不能再启动其他服务了。它将失败,并显示错误消息框
TestService18.exe - Application Error
---------------------------
The exception unknown software exception (0xc06d007e) occurred in the application at location 0x7c812afb.
---------------------------
OK Cancel
--------------------------- 可能导致此错误的原因。您可以在windows服务器上运行的.Net服务的数量有上限吗?
我已经在ServerFault上问过这个问题了。链接为here
代码:
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.ServiceProcess;
using System.Threading;
namespace TestService
{
public class MyService : ServiceBase
{
private Timer stateTimer;
private readonly TimerCallback timerDelegate = WriteToLog;
static readonly string fileName = @"C:\temp\Testservice\Log\" + new Random().Next() + ".txt";
public MyService()
{
ServiceName = "Test Service";
CanStop = true;
CanPauseAndContinue = false;
AutoLog = true;
}
protected override void OnStart(string[] args)
{
using (StreamWriter writer = new StreamWriter(fileName, true))
{
writer.WriteLine("Starting ...");
writer.WriteLine(Assembly.GetExecutingAssembly().Location);
}
stateTimer = new Timer(timerDelegate, null, 1000, 1000);
}
protected override void OnStop()
{
stateTimer.Dispose();
}
static void WriteToLog(object stateObject)
{
using (StreamWriter writer = new StreamWriter(fileName, true))
{
writer.WriteLine(DateTime.Now.Ticks);
}
}
public static void Main()
{
Run(new MyService());
}
}
}发布于 2010-01-12 11:11:29
您可能遇到了众所周知的桌面堆限制,默认情况下,它将与用户界面和桌面相关的内存限制为48MB。一个典型的服务可能会消耗几百on的桌面堆,所以考虑到系统上正在运行的其他应用程序,您只能启动20个左右也就不足为奇了。
有关更多信息,请参阅。
https://stackoverflow.com/questions/2046443
复制相似问题