private static 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, MaxWorkingThreads = maxWorkingThreads, MaxCompletionPortThreads = maxCompletionPortThreads, 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 List<PerformanceDataInfo>(m_ServerList.Count); m_ServerList.ForEach(s => { var perfSource = s as IPerformanceDataSource; if (perfSource != null) { var perfData = perfSource.CollectPerformanceData(globalPerfData); instancesData.Add(new PerformanceDataInfo { ServerName = s.Name, Data = perfData }); perfBuilder.AppendLine(string.Format("{0} - Started Time: {1}, Total Connections: {2}, Total Handled Commands: {3}, Command Handling Speed: {4:f0}/s", s.Name, s.StartedTime, perfData.CurrentRecord.TotalConnections, perfData.CurrentRecord.TotalHandledCommands, (perfData.CurrentRecord.TotalHandledCommands - perfData.PreviousRecord.TotalHandledCommands) / perfData.CurrentRecord.RecordSpan)); } }); LogUtil.LogPerf(perfBuilder.ToString()); var handler = Messanger.GetHandler<PermformanceDataEventArgs>(); if (handler != null) { handler(new PermformanceDataEventArgs(globalPerfData, instancesData.ToArray())); } }
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); }
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)); for (var i = 0; i < m_AppServers.Length; i++) { var s = m_AppServers[i]; var serverStateSource = s as IServerStateSource; if (serverStateSource != null) { var serverState = serverStateSource.CollectServerState(globalPerfData); var stateTypeMetadata = GetStateTypeMetatdata(serverState.GetType()); perfBuilder.AppendLine(string.Format("{0} ----------------------------------", s.Name)); for (var j = 0; j < stateTypeMetadata.Count; j++) { var property = stateTypeMetadata[j]; if (!string.IsNullOrEmpty(property.Value.Format)) perfBuilder.AppendLine(string.Format("{0}: {1}", property.Value.Name, string.Format(property.Value.Format, property.Key.GetValue(serverState, m_ParaArray)))); else perfBuilder.AppendLine(string.Format("{0}: {1}", property.Value.Name, property.Key.GetValue(serverState, m_ParaArray))); } } } m_PerfLog.Info(perfBuilder.ToString()); }
/// <summary> /// Initializes a new instance of the <see cref="PermformanceDataEventArgs"/> class. /// </summary> /// <param name="globalData">The global data.</param> /// <param name="instancesData">The instances data.</param> public PermformanceDataEventArgs(GlobalPerformanceData globalData, PerformanceDataInfo[] instancesData) { GlobalData = globalData; InstancesData = instancesData; }