Quartz.netプロジェクトを使用して、Windowsサービスのスケジュールされたタスクを制御しています。 これまでのところ問題なく使用していましたが、最近、.NET CLR LocksAndThreadsに問題があることがわかりました。Quartz.netは.NET CLR LocksAndThreadsを発生させます
C#で書かれたこの例のコマンドラインアプリをご覧ください。
using System;
using Quartz;
using Quartz.Impl;
namespace QuartzMemTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Quartz Test");
Console.WriteLine("-----------");
Console.WriteLine(Environment.NewLine);
ScheduleHelper.ScheduleJob(typeof(MyTask), "MyJobName", "MyTriggerName", "0 0/01 * 1/1 * ? *");
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
public class ScheduleHelper
{
/// <summary>
/// Adds a job to the Quartz schedule
/// </summary>
/// <param name="job">The Job class which inherits from the Quartz.IJob interface</param>
/// <param name="jobName">A name to give to the job</param>
/// <param name="triggerName">A name to give to the trigger</param>
/// <param name="triggerCronExpression">CRON expression to determine the job run interval</param>
public static DateTime ScheduleJob(Type job, string jobName, string triggerName, string triggerCronExpression)
{
// Start the scheduler to run our ImportOpportunitiesJob
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
sched.Start();
// Create an instance of our job
JobDetail jobDetail = new JobDetail(jobName, null, job);
// Create a CRON trigger which determines the firing interval
CronTrigger trigger = new CronTrigger();
trigger.Name = triggerName;
trigger.StartTimeUtc = DateTime.UtcNow;
trigger.CronExpressionString = triggerCronExpression;
// Add job and trigger to the schedule
return sched.ScheduleJob(jobDetail, trigger);
}
}
public class MyTask : IStatefulJob
{
public void Execute(JobExecutionContext job)
{
Console.WriteLine("MyTask: Doing something....");
}
}
}
我々は最初のパフォーマンスモニタを起動して、上記のサンプルコードを実行した場合、我々は、.NET CLRのLocksAndThreadsが急に増加し、アプリが停止されるまでそうし続けるために始める見ることができることに気づきました。 私の同僚は、私たちのライブサーバーの1つがリソース不足の後にクラッシュした後、これを最初に気付きました。
これは何かを引き起こしているクォートですか、私がやっていることは何ですか? Quartzの場合、問題を解決するために何か別の方法がありますか?
[LocksAndThreadsカテゴリのどのカウンター](http://msdn.microsoft.com/en-us/library/zf749bat.aspx)は大騒ぎになっていますか? –
現在のキューの長さ –
環境がどのようなものかはっきりしていませんが、そのカウンタで説明されている問題があります。https://connect.microsoft.com/VisualStudio/feedback/details/291514/bug-in-current-queue-length- net-clr-locksおよびthread-performance-attribute-groupのパフォーマンスカウンタ。 FWIW私はQuartz.Netを長時間実行していないのでこのリンクを提供しています(資源が足りなくなります)。しかし、私はこのカウンタを見たことはありません。 – jvilalta