0

我有一个托管在 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.";
        }

但是,当我在 Client 中调用此函数时,在终止进程时出现异常:

无法终止进程 104:Die Anforderung kann nicht verarbeitet werden, da der Prozess bedet wurde(请求无法继续,因为进程已终止。)

看来我只能保持 104 个进程运行。其余的在开始后立即终止。

  • 我在控制台应用程序中尝试了同样的事情,所有进程都可以启动和终止。
  • 我尝试使用另一个应用程序消耗大量内存,并且还可以保持 104 个进程运行。
  • 我尝试使用另一个应用程序消耗大量内存,并且还可以保持 104 个进程运行。
  • 我还检查了所有可能的 IIS 配置,但找不到与此问题相关的任何设置。

所以我想问一下是否有人知道如何在 ASP.NET 应用程序中启动更多进程。

如果有人可以帮助我,我将不胜感激。谢谢!

4

1 回答 1

0

我强烈建议您不要在 ASP.NET 下执行 600 个(或数百个)进程。您将真正消耗 Aspnet_wp.exe 进程上的资源,这可能会损害 IIS 框的性能。

您需要重新考虑设计。

如果这是我,我会考虑在 ASP.NET 之外创建一个可以为您完成繁重工作的外部进程。例如,也许您可​​以创建一个 Windows 服务(甚至只是在服务器上运行的 .NET 控制台应用程序),它在文件系统文件夹上等待(即侦听)文件(您可以将文件命名为任何您喜欢的名称,例如start.txt)创建您可以在向您的网站发出请求时执行的操作。然后该服务将为您执行 600 个 exe 文件。

我不熟悉lasttest,所以我的建议可能不够充分。但是,我不相信您会使用您当前的设计实现您正在寻找的东西。这会损害性能,事实上,我对达到运行进程的限制并不感到惊讶。我不知道有任何文档指出您可以在其中运行多少个 exe 文件Aspnet_wp.exe,但这可能是因为 ASP.NET 团队从未期望有人会尝试这样做。

于 2016-05-10T13:51:49.093 回答