public PermformanceDataEventArgs(GlobalPerformanceData globalData, PerformanceDataInfo[] instancesData) { GlobalData = globalData; InstancesData = instancesData; }
private void OnPerformanceTimerCallback(object state) { int availableWorkingThreads, availableCompletionPortThreads; ThreadPool.GetAvailableThreads(out availableWorkingThreads, out availableCompletionPortThreads); int maxWorkingThreads; int maxCompletionPortThreads; ThreadPool.GetMaxThreads(out maxWorkingThreads, out maxCompletionPortThreads); var globalPerfData = new GlobalPerformanceData { AvailableWorkingThreads = availableWorkingThreads, AvailableCompletionPortThreads = availableCompletionPortThreads, MaxCompletionPortThreads = maxCompletionPortThreads, MaxWorkingThreads = maxWorkingThreads, CpuUsage = m_CpuUsagePC.NextValue() / m_CpuCores, TotalThreadCount = (int)m_ThreadCountPC.NextValue(), WorkingSet = (long)m_WorkingSetPC.NextValue() }; var perfBuilder = new StringBuilder(); perfBuilder.AppendLine("---------------------------------------------------"); perfBuilder.AppendLine(string.Format("CPU Usage: {0}%, Physical Memory Usage: {1:N}, Total Thread Count: {2}", globalPerfData.CpuUsage.ToString("0.00"), globalPerfData.WorkingSet, globalPerfData.TotalThreadCount)); perfBuilder.AppendLine(string.Format("AvailableWorkingThreads: {0}, AvailableCompletionPortThreads: {1}", globalPerfData.AvailableWorkingThreads, globalPerfData.AvailableCompletionPortThreads)); perfBuilder.AppendLine(string.Format("MaxWorkingThreads: {0}, MaxCompletionPortThreads: {1}", globalPerfData.MaxWorkingThreads, globalPerfData.MaxCompletionPortThreads)); var instancesData = new PerformanceDataInfo[m_AppServers.Length]; for (var i = 0; i < m_AppServers.Length; i++) { var s = m_AppServers[i]; var perfSource = s as IPerformanceDataSource; if (perfSource != null) { var perfData = perfSource.CollectPerformanceData(globalPerfData); instancesData[i] = new PerformanceDataInfo { ServerName = s.Name, Data = perfData }; perfBuilder.AppendLine(string.Format("{0} - Total Connections: {1}, Total Handled Requests: {2}, Request Handling Speed: {3:f0}/s", s.Name, perfData.CurrentRecord.TotalConnections, perfData.CurrentRecord.TotalHandledRequests, (perfData.CurrentRecord.TotalHandledRequests - perfData.PreviousRecord.TotalHandledRequests) / perfData.CurrentRecord.RecordSpan)); } } m_PerfLog.Info(perfBuilder.ToString()); var handler = m_Collected; if (handler == null) return; handler.BeginInvoke(this, new PermformanceDataEventArgs(globalPerfData, instancesData), null, null); }