可以在 ASP.NET 应用程序中启动的进程数是否有限制?
Is there a limit on the number of processes, which can be started in an ASP.NET application?
我有一个在 IIS 中托管的信号服务器。
集线器中有一个函数可以在 windows 中启动 600 个进程,然后杀死它们。
//start 600 processes
for (int i = 0; i < 600; i++)
{
try
{
Process myProcess = Process.Start(startInfo);
proclist.Add(myProcess);
Task.Delay(10).Wait();
}
catch(Exception e)
{
feedback = "Process " + i + " cannot be started: " + e.Message;
break;
}
feedback = "All processes are running.";
}
//kill them
foreach (var proc in proclist)
{
try
{
proc.Kill();
Task.Delay(10).Wait();
}
catch (Exception e)
{
feedback = "Process " + proclist.IndexOf(proc) + " cannot be killed: " + e.Message;
break;
}
feedback = "All Processes are killed.";
}
但是,当我在客户端中调用此函数时,在终止进程时出现异常:
Process 104 cannot be killed: Die Anforderung kann nicht verarbeitet werden, da der Prozess beendet wurde(请求无法继续,因为进程已经终止。)
看来我只能保持104个进程在运行。其余的在开始后立即终止。
- 我在控制台应用程序中尝试了同样的事情,所有进程都可以启动和终止。
- 我尝试使用另一个应用程序消耗大量内存,但我还可以保留 104 个进程 运行。
- 我尝试使用另一个应用程序消耗大量内存,但我还可以保留 104 个进程 运行。
- 我还检查了所有可能的 IIS 配置,但找不到与此问题相关的任何设置。
所以我想问一下有没有人知道如何在一个ASP.NET应用程序中启动更多的进程。
如果有人能帮助我,我将不胜感激。谢谢!
我强烈建议您不要在 ASP.NET 下执行 600(或一百的任何倍数)进程。您确实会使 Aspnet_wp.exe 进程的资源紧张,这可能会损害 IIS 框的性能。
你需要重新考虑设计。
如果是我,我会考虑在 ASP.NET 之外创建一个外部进程,它可以为您完成繁重的工作。例如,也许您可以创建一个 Windows 服务(或者甚至只是服务器上的 .NET 控制台应用程序 运行ning)在文件系统文件夹上等待(即侦听)文件(您可以将文件命名为您喜欢的任何名称,例如 start.txt
),您可以在向您的网站发出请求时创建该文件。然后该服务将为您执行 600 个 exe 文件。
我不熟悉 lasttest
,所以我的建议可能不够充分。但是,我不相信您会使用当前的设计实现您正在寻找的东西。这会影响性能,事实上,我对达到 运行ning 进程的限制并不感到惊讶。我不知道有任何文档指出在 Aspnet_wp.exe
中可以 运行 有多少个 exe 文件,但这可能是因为 ASP.NET 团队从没想过有人会尝试这样做。
我有一个在 IIS 中托管的信号服务器。 集线器中有一个函数可以在 windows 中启动 600 个进程,然后杀死它们。
//start 600 processes
for (int i = 0; i < 600; i++)
{
try
{
Process myProcess = Process.Start(startInfo);
proclist.Add(myProcess);
Task.Delay(10).Wait();
}
catch(Exception e)
{
feedback = "Process " + i + " cannot be started: " + e.Message;
break;
}
feedback = "All processes are running.";
}
//kill them
foreach (var proc in proclist)
{
try
{
proc.Kill();
Task.Delay(10).Wait();
}
catch (Exception e)
{
feedback = "Process " + proclist.IndexOf(proc) + " cannot be killed: " + e.Message;
break;
}
feedback = "All Processes are killed.";
}
但是,当我在客户端中调用此函数时,在终止进程时出现异常:
Process 104 cannot be killed: Die Anforderung kann nicht verarbeitet werden, da der Prozess beendet wurde(请求无法继续,因为进程已经终止。)
看来我只能保持104个进程在运行。其余的在开始后立即终止。
- 我在控制台应用程序中尝试了同样的事情,所有进程都可以启动和终止。
- 我尝试使用另一个应用程序消耗大量内存,但我还可以保留 104 个进程 运行。
- 我尝试使用另一个应用程序消耗大量内存,但我还可以保留 104 个进程 运行。
- 我还检查了所有可能的 IIS 配置,但找不到与此问题相关的任何设置。
所以我想问一下有没有人知道如何在一个ASP.NET应用程序中启动更多的进程。
如果有人能帮助我,我将不胜感激。谢谢!
我强烈建议您不要在 ASP.NET 下执行 600(或一百的任何倍数)进程。您确实会使 Aspnet_wp.exe 进程的资源紧张,这可能会损害 IIS 框的性能。
你需要重新考虑设计。
如果是我,我会考虑在 ASP.NET 之外创建一个外部进程,它可以为您完成繁重的工作。例如,也许您可以创建一个 Windows 服务(或者甚至只是服务器上的 .NET 控制台应用程序 运行ning)在文件系统文件夹上等待(即侦听)文件(您可以将文件命名为您喜欢的任何名称,例如 start.txt
),您可以在向您的网站发出请求时创建该文件。然后该服务将为您执行 600 个 exe 文件。
我不熟悉 lasttest
,所以我的建议可能不够充分。但是,我不相信您会使用当前的设计实现您正在寻找的东西。这会影响性能,事实上,我对达到 运行ning 进程的限制并不感到惊讶。我不知道有任何文档指出在 Aspnet_wp.exe
中可以 运行 有多少个 exe 文件,但这可能是因为 ASP.NET 团队从没想过有人会尝试这样做。