由于拒绝访问错误,JMeter 无法为每个进程收集 CPU

JMeter cannot collect CPU per process due to Access Denied error

我在 JMeter 测试中设置了服务器监控。该设置与此 Whosebug answer 中的设置非常相似。当我在不指定进程的情况下收集 CPU 或内存时,一切都按预期进行。我看到了具有正确指标的图表。

但是,当我尝试为每个进程收集 CPU 时,例如使用度量参数 pid=8948:percent,图表为空,未收集任何样本,我在受监控的服务器上看到以下异常:

ERROR   2018-04-03 13:17:14.607 [kg.apc.p] (): Error getting metric
org.hyperic.sigar.SigarPermissionDeniedException: Access is denied.
: 8948
        at org.hyperic.sigar.SigarProxyCache.invoke(SigarProxyCache.java:218)
        at com.sun.proxy.$Proxy0.getProcCpu(Unknown Source)
        at kg.apc.perfmon.metrics.CPUProcMetric.getValue(CPUProcMetric.java:35)
        at kg.apc.perfmon.PerfMonMetricGetter.getMetricsLine(PerfMonMetricGetter
.java:114)
        at kg.apc.perfmon.PerfMonWorker.processSenders(PerfMonWorker.java:280)
        at kg.apc.perfmon.PerfMonWorker.run(PerfMonWorker.java:243)
        at java.lang.Thread.run(Unknown Source)

我尝试通过名称获取进程,但异常是一样的。 我 运行 startAgent.bat --sysinfo 实际上用户对我要监视的进程 w3wp.exe (8948) 没有权限(用户没有 "see" 这个进程)。

documentation 明确声明我不需要管理员权限 在应用程序服务器上(Windows Server 2012 R2)。该用户已经拥有 Performance Monitor UsersPerformance Log Users 角色。

那么,在 JMeter 测试中,如果用户不是应用程序服务器的管理员,我该如何监控每个进程 CPU?

您可以通过 运行 提升权限的服务器代理来解决这个问题,可以通过两种方式完成:

  1. 使用psexec tool you can run a process with SYSTEM account rights

  2. 使用Task Scheduler你也有可能以最高权限启动进程

鉴于您 运行 具有更高权限的服务器代理 - 您应该能够为 IIS 进程收集 CPU 指标。

有关使用 PerfMon 指标收集器和服务器代理的详细信息,请参阅 How to Monitor Your Server Health & Performance During a JMeter Load Test 文章。