- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 v2.0 of Windows Performance Counters 公开性能数据.我相信我已正确按照说明进行操作,但 perfmon.exe 总是对我的计数器集说“无法加载计数器”。
这是我存储在名为 PerformanceCounters.xml 的文件中的 list
<?xml version="1.0" encoding="utf-8"?>
<instrumentationManifest xmlns="http://schemas.microsoft.com/win/2004/08/events" xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<instrumentation>
<counters xmlns="http://schemas.microsoft.com/win/2005/12/counters" schemaVersion="1.1">
<provider applicationIdentity="D:\temp\ConsoleApplication7\Debug\ConsoleApplication7.exe" providerGuid="{84C1D6C9-31BD-4B0F-BED2-F7AF3F24BEB9}" symbol="MyPerformanceCounterProvider" providerType="userMode" providerName="MyPerformanceCounterProvider">
<counterSet uri="MyPerformanceCounterSet" symbol="MyPerformanceCounterSet" guid="{50ADA4E1-AD6B-48F0-A1A4-D87D03B8A281}" name="MyPerformanceCounterSet" description="MyPerformanceCounterSet" instances="multiple">
<counter id="1" uri="MyPerformanceCounter1" description="MyPerformanceCounter1" type="perf_counter_large_rawcount" detailLevel="standard" />
</counterSet>
</provider>
</counters>
</instrumentation>
</instrumentationManifest>
我通过运行创建一个 .h 和 .rc 文件:
ctrpp PerformanceCounters.xml -o PerformanceCounters.h -rc PerformanceCounters.rc
这是我的测试代码:
#include "PerformanceCounters.h"
int _tmain(int argc, _TCHAR* argv[])
{
auto counterInitializeResult = CounterInitialize();
if (counterInitializeResult == ERROR_SUCCESS)
{
auto counterSet = PerfCreateInstance(MyPerformanceCounterProvider, &MyPerformanceCounterSetGuid, L"FOO", 1ul);
if (counterSet != nullptr)
{
auto setCounterResult = PerfSetULongLongCounterValue(MyPerformanceCounterProvider, counterSet, 1ul, 23);
if (setCounterResult == ERROR_SUCCESS)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) // message pump is unnecessary but it keeps the process alive
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
PerfDeleteInstance(MyPerformanceCounterProvider, counterSet);
counterSet = nullptr;
}
CounterCleanup();
}
return 0;
}
我从管理员命令提示符运行以下命令以将字符串加载到注册表中:
D:\temp\ConsoleApplication7>lodctr /m:PerformanceCounters.xml
Info: Successfully installed performance counters in D:\temp\ConsoleApplication7\PerformanceCounters.xml
这会将以下内容添加到注册表中:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{84c1d6c9-31bd-4b0f-bed2-f7af3f24beb9}]
"ProviderType"=dword:00000000
"ProviderName"="MyPerformanceCounterProvider"
"ApplicationIdentity"=hex(2):44,00,3a,00,5c,00,74,00,65,00,6d,00,70,00,5c,00,\
43,00,6f,00,6e,00,73,00,6f,00,6c,00,65,00,41,00,70,00,70,00,6c,00,69,00,63,\
00,61,00,74,00,69,00,6f,00,6e,00,37,00,5c,00,44,00,65,00,62,00,75,00,67,00,\
5c,00,43,00,6f,00,6e,00,73,00,6f,00,6c,00,65,00,41,00,70,00,70,00,6c,00,69,\
00,63,00,61,00,74,00,69,00,6f,00,6e,00,37,00,2e,00,65,00,78,00,65,00,00,00
^^^^^^^^ This is actually a REG_EXPAND_SZ value that equals "D:\temp\ConsoleApplication7\Debug\ConsoleApplication7.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{84c1d6c9-31bd-4b0f-bed2-f7af3f24beb9}\{50ada4e1-ad6b-48f0-a1a4-d87d03b8a281}]
"NameResource"=dword:00000001
"ExplainResource"=dword:00000003
"InstanceType"=dword:00000002
"First Counter"=dword:0000302e
"NeutralName"="MyPerformanceCounterSet"
"Last Counter"=dword:00003030
"CounterBlock"=hex:01,00,00,00,00,01,01,00,00,00,00,00,00,00,00,00,64,00,00,00,\
00,00,00,00,ff,ff,ff,ff,05,00,00,00,00,00,00,00,ff,ff,ff,ff,ff,ff,ff,ff,ff,\
ff,ff,ff,ff,ff,ff,ff,00,00,00,00
"CounterCount"=dword:00000001
我已经将上面的 C++ 和生成的 .rc 文件包含在我的 C++ 项目中。当我编译它时,我看到字符串资源确实嵌入在 .exe 中。程序运行良好——没有返回任何错误,我进入了我的(不必要的)消息循环。
当我运行 perfmon 时,我在列表中看到我的计数器集“MyPerformanceCounterSet”。当我的程序运行时,当我选择计数器集时,我会看到我的实例“FOO”。但是,如果我展开计数器集,我会看到“无法加载计数器”。
我是这台机器的管理员。我也是本地组 Performance Log Users
和 Performance Monitor Users
的成员。我已经对 list 中的路径进行了三重检查。如果我启用回调(通过 list 中的 callback="custom"
),我将在 perfmon 收集信息时收到对我的回调方法的回调。但它似乎仍然无法枚举计数器。
更新:我在 Windows 7 SDK (C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\winbase\PerfCounters\Basic\CPP) 中找到了一个示例。此示例产生相同的结果——“无法加载计数器”
最佳答案
我来晚了,但我想回答一下,以防其他人遇到这个问题。当我在为应用程序生成新的性能计数器时遇到同样的问题时,99.9% 的情况是因为我懒惰地从一个 list 复制到另一个导致冲突时忘记生成新的 guid。要更正此问题,请为您的提供者(providerGuid 属性)和 counterSet(guid 属性)生成新的 guid。这样当它加载计数器时它可以正确地加载。
关于c++ - 从 C++ 公开的 Windows 性能计数器总是在 perfmon.exe 中产生 "Can' t 负载计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32592072/
我在 Win 7 上为 Perfmon 创建了 xml 模板。我能够导入它并运行它 - 一切正常。现在,当我将此 xml 复制到 Win 2008 R2 计算机并尝试将其导入到 perfmon 中时,
当我运行测试时,我收到此错误: 2017-07-01 18:21:14,752 ERROR o.a.j.JMeter: Uncaught exception: java.lang.NoSuchMeth
在哪里可以找到有关Perfmon二进制.blg文件格式的详细低级规范?甚至更好的是,是否有人编写了用于解析.blg文件的低级开放源代码库(最好使用C语言,但是任何语言都可以)? 最佳答案 这对查看历史
在perfmon工具Pages/sec中,Avg Disk Queue Length和% Performance Time是默认的计数器在里面。我想监视 perfmon 工具中的 sqlservr 计
我想获得一些 NCache 信息,如 Perfmon 在(例如:Count)中看到的那样,但直接使用 C#。请问有人有这方面的代码吗? 最佳答案 您是否看过 System.Diagnostics.Pe
当我启动 perfmon 并尝试添加一个计数器时,显示的性能对象都是数字。如何重置这些性能对象? 最佳答案 我找到了解决问题的方法: 从 perfmon 正常工作的 PC 复制 C:\WINDOWS\
在 Windows 性能监控工具中。在为计数器选择实例时,_Total 和 之间有什么区别? 最佳答案 我相信 _Total 计数器只是一个聚合,适用于同一计数器有多个实例的情况。在某些情况下,例如
当您启动 perfmon* 时,它会加载运行 3 个计数器:内存“页数/秒”、物理磁盘“磁盘队列长度”和处理器“% 处理器时间”。 如何将其更改为我关心的计数器? *要启动 perfmon,请在命令提
我需要使用 PerfMon 从多台机器收集数据,并且我需要能够在特定时间打开/关闭收集。我已经在每台机器上配置了所有数据点;我只需要启动/停止 PerfMon,并启动/停止一组数据点的收集。 由于我不
您好,我正在尝试创建一个用于 perfmon 的自定义性能计数器。下面的代码工作得很好,但是我有一个问题.. 有了这个解决方案,我有一个计时器更新性能计数器的值,但是我不想运行这个可执行文件来获取我需
我正在 Ubuntu 中寻找 PerfMon.exe 之类的工具,我需要一份报告来报告 CPU 使用情况、每个 PID 的内存使用情况,并且输出将是一段时间之间的最小值、最大值和平均值,就像我点击开始
我在 Azure 门户中的网站监控中添加了一些新的自定义指标,现在我想使用 power shell 检索该性能数据并在本地计算机中创建一个新计数器,我该如何实现这一点 最佳答案 Azure 提供了服务
我们很多人都使用过Perfmon工具来进行性能分析。特别是对于 .Net 计数器,但 Perfmon 中存在太多变量,因此总是很难将 Perfmon 结果解释为有关我的应用程序的有值(value)的反
我有一个带有六个应用程序池的网络服务器。当我想在 PerfMon 中为特定的 ASP.NET 应用程序添加计数器时,可用实例的名称非常不同。 例如,我有一个名为“FrontEnd”的应用程序池,这些是
A couple articles谈论 ETW 和“PerfMonitor.exe”。这些文章讨论了从命令提示符启动分析的能力。例如: PerfMonitor.exe runAnalyze MySlo
我可以获取 C++ 代码来读取 Windows perfmon 计数器(类别、计数器名称和实例名称)吗? 在 C# 中很容易,但我需要 C++ 代码。 谢谢 最佳答案 正如 Doug T. 之前指出的
我完全被这个弄糊涂了:在 Win7SP1 64 位机器上,PerfMon 似乎完全否认已安装的自定义性能计数器的知识。我正在使用一个现有的代码库,它在生产机器上安装计数器非常好,但是当我在我的机器上运
您可以打开 perfmon.exe,清除任何当前计数并从 C# 添加您的自定义应用程序计数器吗? 在那里考虑 perfmon API,但我找不到它。 最佳答案 性能计数器不太适合跟踪应用程序级指标。
如何使用 PerfMon 计数器记录 C# 中方法的平均执行时间? 到目前为止,我只找到了增加或减少 PerfMon 计数器的示例代码。 最佳答案 这是我曾经编写的一些示例代码来执行此操作。 首先,您
在 Windows 中有 perfmon 来监视系统的各种性能方面(称为计数器)。 是否有适用于 Linux 的类似 perfmon 的工具? 特别是对...感兴趣 CPU 使用率(总计/每个进程/内
我是一名优秀的程序员,十分优秀!