由于拒绝访问错误,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 Users 和 Performance Log Users 角色。
那么,在 JMeter 测试中,如果用户不是应用程序服务器的管理员,我该如何监控每个进程 CPU?
您可以通过 运行 提升权限的服务器代理来解决这个问题,可以通过两种方式完成:
使用psexec
tool you can run a process with SYSTEM account rights
使用Task Scheduler你也有可能以最高权限启动进程
鉴于您 运行 具有更高权限的服务器代理 - 您应该能够为 IIS 进程收集 CPU 指标。
有关使用 PerfMon 指标收集器和服务器代理的详细信息,请参阅 How to Monitor Your Server Health & Performance During a JMeter Load Test 文章。
我在 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 Users 和 Performance Log Users 角色。
那么,在 JMeter 测试中,如果用户不是应用程序服务器的管理员,我该如何监控每个进程 CPU?
您可以通过 运行 提升权限的服务器代理来解决这个问题,可以通过两种方式完成:
使用
psexec
tool you can run a process with SYSTEM account rights使用Task Scheduler你也有可能以最高权限启动进程
鉴于您 运行 具有更高权限的服务器代理 - 您应该能够为 IIS 进程收集 CPU 指标。
有关使用 PerfMon 指标收集器和服务器代理的详细信息,请参阅 How to Monitor Your Server Health & Performance During a JMeter Load Test 文章。