Quartz .Net 导致 services.exe 导致 services.exe 上的 CPU 峰值

问题描述

我们使用 Quartz 构建的后台应用程序导致 Services and Controller App (services.exe) 使用高 cpu。应用程序本身使用可接受范围的 cpu(空闲时 0-1%,触发作业时 3-4%)和内存(最大 200MB)。但是每当触发作业时,services.exe cpu 使用率就会增加并导致服务器出现问题,例如阻止其他服务重新启动。

来自应用程序的一些见解:

  • 大约 75 个作业,其中 5-10 个作业间隔 2 分钟,其余作业在午夜运行。 (问题一直在发生)
  • quartz.threadPool.threadCount = 10
  • quartz.scheduler.batchTriggerAcquisitionMaxCount = 100
  • 使用 RAMJobStore
  • 在 IoC 容器中使用单例模式。

感谢任何帮助。

解决方法

发现我们的应用程序的问题,并在这里写下通过此问题的人。至少它可以提供一些想法。

发现:

  • Quartz .Net 与该问题没有任何关系。
  • 我们的记录器扩充器试图查询每个日志的服务名称。
  • 此操作导致 service.exe 响应,从而导致 CPU 过高。

我尝试了几个 Windows 分析器,但不幸的是,它们都没有提供足够或易于理解的信息。最后,尝试了 dotTrace,它向我展示了应用程序中的热点,然后在我的应用程序和 services.exe 之间建立关联很容易。

个人学习:

  • 我试图在我的应用程序和 services.exe 之间建立关联,并且必须存在关联。但我的错误是专注于 Quartz .Net 以及如何管理操作系统上的线程。
  • 尽管问题不同,但对我来说,寻求相关性是关键。没有火,没有烟。

谢谢。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...