-1

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

应用程序的一些见解:

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

任何帮助表示赞赏。

4

1 回答 1

0

发现我们的应用程序存在问题,并在此写下任何经过此问题的人。至少它可能会给出一些想法。

发现:

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

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

个人学习:

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

谢谢。

于 2021-03-26T14:51:05.213 回答