zoukankan      html  css  js  c++  java
  • 服务计数器

        /// <summary>
        /// CLR Version: 2.0.50727.5448
        /// NameSpace: Performence.Impl
        /// FileName: PerformenceCounter
        ///
        /// Created at 2014/03/18 10:23:38
        /// </summary>
        public class PerformenceCounter
        {
            #region fields
    
            private static readonly PerformenceCounter _current = new PerformenceCounter();
            private static readonly IDictionary<string, PerformanceCounter> PerfCounters = new Dictionary<string, PerformanceCounter>();
    
            private const string CategoryName = "PerformenceCounter.Service.Search";
    
            private const string SendPerSecond = "send/sec";
            private const string SendTotal = "send total";
            private const string SendFailedPerSecond = "failed/sec";
            private const string SendFailedTotal = "failed total";
            private const string ExceptionPerSecond = "error/sec";
            private const string ExcerptionTotal = "error total";
            private const string CacheHitPerSecond = "cache hit/sec";
            private const string CacheHitTotal = "cache hit total";
    
            private const string CacheFailedTotal = "cache failed total";
    
            #endregion
    
            #region .ctor
    
            #endregion
    
            #region properties
    
            public static PerformenceCounter Current
            {
                get { return _current; }
            }
    
            #endregion
    
            #region methods
    
            private void IncremnetPerCounter(string perfCounterName)
            {
                GetPerformanceCounter(perfCounterName).Increment();
            }
    
            private PerformanceCounter GetPerformanceCounter(string perfCounterName)
            {
                return PerfCounters[perfCounterName];
            }
    
            /// <summary>
            /// 创建计数器
            /// </summary>
            private void CreateCounters()
            {
                // 检查性能计数器是否存在
                Clear();
    
                CounterCreationDataCollection counterCollection = new CounterCreationDataCollection();
    
                CounterCreationData ccd1 = new CounterCreationData(SendPerSecond, "每秒发送数", PerformanceCounterType.RateOfCountsPerSecond64);
                counterCollection.Add(ccd1);
    
                CounterCreationData ccd2 = new CounterCreationData(SendTotal, "发送总数", PerformanceCounterType.NumberOfItems64);
                counterCollection.Add(ccd2);
    
                CounterCreationData ccd3 = new CounterCreationData(SendFailedPerSecond, "每秒发送失败数", PerformanceCounterType.RateOfCountsPerSecond64);
                counterCollection.Add(ccd3);
    
                CounterCreationData ccd4 = new CounterCreationData(SendFailedTotal, "发送失败总数", PerformanceCounterType.NumberOfItems64);
                counterCollection.Add(ccd4);
    
                CounterCreationData ccd5 = new CounterCreationData(ExceptionPerSecond, "每秒错误数(发送后超时或者异常数)", PerformanceCounterType.RateOfCountsPerSecond64);
                counterCollection.Add(ccd5);
    
                CounterCreationData ccd6 = new CounterCreationData(ExcerptionTotal, "错误总数(发送后超时或者异常数)", PerformanceCounterType.NumberOfItems64);
                counterCollection.Add(ccd6);
    
                CounterCreationData ccd7 = new CounterCreationData(CacheHitPerSecond, "每秒缓存命中数", PerformanceCounterType.RateOfCountsPerSecond64);
                counterCollection.Add(ccd7);
    
                CounterCreationData ccd8 = new CounterCreationData(CacheHitTotal, "缓存命中总数", PerformanceCounterType.NumberOfItems64);
                counterCollection.Add(ccd8);
    
                CounterCreationData ccd9 = new CounterCreationData(CacheFailedTotal, "缓存失效总数", PerformanceCounterType.NumberOfItems64);
                counterCollection.Add(ccd9);
    
                PerformanceCounterCategory.Create(CategoryName, "PerformanceCounter.Service.Search 发送计数器", PerformanceCounterCategoryType.SingleInstance, counterCollection);
            }
    
            public void Initiailize()
            {
                //创建计数器
                CreateCounters();
    
                // 添加到缓存中
                PerfCounters.Add(SendPerSecond, new PerformanceCounter(CategoryName, SendPerSecond, false));
                PerfCounters.Add(SendTotal, new PerformanceCounter(CategoryName, SendTotal, false));
                PerfCounters.Add(SendFailedPerSecond, new PerformanceCounter(CategoryName, SendFailedPerSecond, false));
                PerfCounters.Add(SendFailedTotal, new PerformanceCounter(CategoryName, SendFailedTotal, false));
                PerfCounters.Add(ExceptionPerSecond, new PerformanceCounter(CategoryName, ExceptionPerSecond, false));
                PerfCounters.Add(ExcerptionTotal, new PerformanceCounter(CategoryName, ExcerptionTotal, false));
                PerfCounters.Add(CacheHitPerSecond, new PerformanceCounter(CategoryName, CacheHitPerSecond, false));
                PerfCounters.Add(CacheHitTotal, new PerformanceCounter(CategoryName, CacheHitTotal, false));
            }
    
            /// <summary>
            /// 清理性能计数器
            /// </summary>
            public void Clear()
            {
                if (PerformanceCounterCategory.Exists(CategoryName))
                {
                    PerformanceCounterCategory.Delete(CategoryName);
                }
            }
    
    
            /// <summary>
            /// 发送计数
            /// </summary>
            public void IncrementSendTotal()
            {
                IncremnetPerCounter(SendTotal);
                IncremnetPerCounter(SendPerSecond);
            }
    
            /// <summary>
            /// 失败计数
            /// </summary>
            public void IncrementSendFaildTotal()
            {
                IncremnetPerCounter(SendFailedTotal);
                IncremnetPerCounter(SendFailedPerSecond);
            }
    
            /// <summary>
            /// 异常计数
            /// </summary>
            public void IncrementExcetionTotal()
            {
                IncremnetPerCounter(ExcerptionTotal);
                IncremnetPerCounter(ExceptionPerSecond);
            }
    
            /// <summary>
            /// 缓存命中计数
            /// </summary>
            public void IncrementCacheHitTotal()
            {
                IncremnetPerCounter(CacheHitTotal);
                IncremnetPerCounter(CacheHitPerSecond);
            }
    
            /// <summary>
            /// 缓存失效计数
            /// </summary>
            public void IncrementCacheFaildTotal()
            {
                IncremnetPerCounter(CacheFailedTotal);
            }
    
            #endregion
        }
    

     计数器:

       PerformenceCounter.Current.Initiailize();

       PerformenceCounter.Current.IncrementSendTotal();

       PerformenceCounter.Current.IncrementCacheHitTotal();

       PerformenceCounter.Current.IncrementCacheFaildTotal();

       PerformenceCounter.Current.IncrementSendFaildTotal();   

       //当没有缓存命中 直接记异常
      PerformenceCounter.Current.IncrementExcetionTotal();

  • 相关阅读:
    微服务之初识微服务
    常见的认证机制及JSON WEB TOKEN
    深入理解缓存之缓存预热与淘汰策略
    深入理解缓存之缓存和数据库的一致性
    深入理解缓存之缓存存在的问题及应对措施
    深入理解缓存之常见的缓存算法
    计算机网络之HTTP、HTTPS、HTTP2
    计算机网络之TCP(三次握手、四次挥手等),UDP及DNS
    计算机网络之网络体系架构与IP
    深入理解MyBatis(四)--缓存
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3607260.html
Copyright © 2011-2022 走看看