我们正在使用 ASP.NET,但有时我们的应用程序会使用大量 CPU 或 RAM 资源。我想限制每个虚拟目录/网站的资源,并在达到警报级别时获得警报。
我不知道我可以为 IIS 做到这一点,但我想知道这对 apache 等其他 Web 服务器是否可行?
在 Java 中,您不能让 Java 虚拟机对某些线程强制执行 CPU 时间限制:您能做的最好的事情就是为您创建的任何线程设置线程优先级。如果没有其他工作要做,那么一个线程将尽可能多地消耗 CPU 周期,除非它阻塞了某些东西(I/O、同步监视器等)。
使用 JMX,您可以获得有关线程的一些信息,以检测一些线程失控的情况,但您不能直接控制线程允许的 CPU 时间量。
如果您愿意重新设计您的动态内容和其他服务,您可以编写它们以使它们可以支持一个“工作单元”,该“工作单元”在某种程度上低于完整请求的工作价值,然后您可以让您的请求处理线程执行一个工作单元,然后休眠适当的时间。这样做可以减少 CPU 使用率,但也肯定会显着减慢响应时间。
如果您的用户满意,那么充分利用 CPU 有什么问题吗?也许真正解决您的问题的方法是更多或更大的硬件。