我正在开发一个异步队列/工作系统,在这种情况下使用PHP和BeanstalkdD(虽然实际的语言和守护进程并不重要).任务本身并不太难 - 将带有命令和参数的数组编码到JSON中,以便通过Beanstalkd守护程序进行传输,在工作脚本中将它们拾取以根据需要对其进行操作.
还有许多其他类似的队列/工作人员设置,例如Starling,Gearman,亚马逊的SQS以及其他更像"企业"的系统,如IBM的MQ和RabbitMQ.如果你运行像Gearman或SQS这样的东西 - 你如何启动和控制工作池?问题出在最初的工人启动上,然后能够添加额外的额外工作人员,随意关闭它们(虽然我可以通过队列发送消息来关闭它们 - 只要一些'观察者'不会自动关闭它们重启它们).这不是一个PHP问题,它是关于设置一个或多个进程在启动时运行的直接Unix进程,或者向池中添加更多工作程序.
一个bash脚本循环的脚本已经到位-这将调用PHP脚本,然后收集并从队列中运行的任务,偶尔出来才能够清理自己(也可以暂停失败了几秒钟,或通过计划的事件).这样可以正常工作,并且在此基础上构建工作进程根本不会非常困难.
获得一个好的工作者控制器系统是关于灵活性,在机器启动时自动启动一个或两个,并且能够在队列繁忙时从命令行添加更多,在不再需要时关闭额外的东西.
我们使用Kentico CMS,我与他们交换了关于网络花园部署的电子邮件.
我们在具有8个CPU核心的服务器上运行单个站点.在与Kentico的咨询热线,我们没有改变应用程序池Web园从默认即它被设置为1的工作进程的最大数设定.
我们的经验是,该网站只使用其中一个cpu核心 - 其他人都闲置.当我通过电子邮件向他们发送电子邮件时,他们的回答是操作系统/ IIS会处理此问题并根据需要使用其他核心,即使应用程序池只有一个工作进程.
现在,我非常尊重Kentico的人,但这对我来说似乎不对?
当然,如果我们想要使用所有核心,我们需要允许八个工作进程(并在SQL服务器中实现会话状态存储)?
非常感谢
托尼
我有一个在具有多个工作进程的应用程序池中运行的应用程序.
我需要访问控制器中的进程ID来检查自从我更改应用程序池以使用多个工作进程后出现的一些问题.
我的应用程序池一直使用 OnDemand 启动模式,但最近我听说 AlwaysRunning 模式,它允许部署到 IIS 的 ASP.NET 应用程序在部署后立即可用。启用此功能似乎会导致 IIS 在部署应用程序后立即启动应用程序,从而消除 \xe2\x80\x9ccold 命中 \xe2\x80\x9d 到网站所需的预热时间。这篇精彩的文章对此进行了解释。
\n下面是我有一些疑问并且想了解一下:
\n使用 AlwaysRunning 功能,回收应用程序池时\n会发生什么情况?使用的内存被删除并释放?工作进程\n被终止并再次启动,或者它们在内存中继续可用,并且它们使用的内存没有被删除和释放?
\nOnDemand 和\nAlwaysRunning 的优点和缺点是什么?哪个更适合单个工作进程,哪个更适合网络花园(多个工作进程)?
\n另外,有人可以解释一下将\nAlwaysRunnig 与进程空闲超时和空闲\n超时操作和回收结合使用时网站的行为吗?点播也是如此。我想\n清楚地了解所有这些部分在这些场景下如何相互干预\n(AlwaysRunning 和 OnDemand)。
\n我们有一个简单的信号服务器和客户端,在启用背板的情况下运行。当我查看 IIS 工作进程时,我发现在当前请求选项卡中始终显示此信号器连接。
当我连接大约 100 个客户端时,woker 进程视图中会显示 100 个当前请求。连接后这些不应该被删除吗?或者这是信号器的预期行为?
我在asp.net应用程序中有很多Singleton实现,并且出于某些性能原因希望将我的应用程序移动到IIS Web Garden环境.
CMIIW,使用n个工作进程迁移到IIS Web Garden,每个工作进程中将创建一个单独的对象,这使得它不再是单个对象,因为n > 1.
我可以在IIS Web Garden中再次制作所有这些单例对象吗?
我想在Windows Azure上的Worker进程中使用TPL.我想在队列中添加一个IJob,这有一个Run方法,因此worker将包含:
loop get item off queue使用TPL调用IJob.Run,这是一个异步调用
但我有点担心我可以添加到TPL的最大项目?如果需要,我很乐意构建我自己的某种TPL池,只需检查它的功能.
干杯,灰.
multithreading worker-process azure plinq task-parallel-library
当我将项目附加到我的 w3wp.exe IIS 工作进程时,我的项目加载速度明显快于“开始调试”时的加载速度。
但是,无论我“开始调试”还是“附加到进程”,同一个工作进程似乎都在处理相同数量的模块/DLL (w3wp.exe)。
为什么附加到进程的速度如此之快?
我有一个 .Net 核心工作服务,它作为 Windows 服务运行。该服务使用 appsettings.json 文件作为配置信息。使用SC CREATE
命令安装服务后,服务失败。
在事件查看器中,我发现了错误,它找不到文件C:\Windows\System32\appsettings.json
。我的服务文件放置在不同的文件夹中c:\Services\
,而不是查看该位置,该服务正在查找 System32 文件夹中的文件。
配置注册如下。
var configBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = configBuilder.Build();
services.AddSingleton(configuration);
Run Code Online (Sandbox Code Playgroud)
如何让服务查看本地文件夹?
windows-services worker-process appsettings .net-core asp.net-core
worker-process ×10
iis ×3
asp.net-mvc ×2
web-garden ×2
.net-core ×1
amazon-sqs ×1
appsettings ×1
asp.net ×1
asp.net-core ×1
azure ×1
c# ×1
concurrency ×1
debugging ×1
gearman ×1
go ×1
goroutine ×1
iis-7 ×1
kentico ×1
plinq ×1
queue ×1
semaphore ×1
signalr ×1
singleton ×1