我想知道是否有一种方法可以通过Spring Boot致动器获得CPU使用指标?我可以使用/metrics和/healthendpoint查看其他指标,但无法获得CPU使用情况。我想避免编写一个额外的类来查看CPU使用情况。知道吗?谢谢
不幸的是,Spring Boot Actuator没有可用的CPU指标。
幸运的是,您可以编写自己的。
只需创建一个满足以下要求的测量bean:
>
它有权访问仪表服务,
因为它将跟踪一个值。
@Autowired
private GaugeService gaugeService;
创建一个线程,该线程调用例程来测量进程的 CPU 负载:
@PostConstruct
public void startMeasuring() {
new Thread() {
@Override
public void run() {
gaugeService.submit("process.cpu.load", getProcessCpuLoad());
Thread.sleep(2000); //measure every 2sec.
}
}.start();
}
有一个使用MxBeans获取进程CPU负载的例程:
public static double getProcessCpuLoad() throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem");
AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" });
if (list.isEmpty()) return Double.NaN;
Attribute att = (Attribute)list.get(0);
Double value = (Double)att.getValue();
// usually takes a couple of seconds before we get real values
if (value == -1.0) return Double.NaN;
// returns a percentage value with 1 decimal point precision
return ((int)(value * 1000) / 10.0);
}
您还可以使用这种方法提取系统范围的CPU负载。
希望这能有所帮助。
Spring Boot 2致动器解决方案(基于@diginoise的代码来测量CPU负载),注册一个具有测量请求值的功能的计量器(无需启动线程或调度计时器):
@Component
public class CpuMetrics {
private final static String METRICS_NAME = "process.cpu.load";
@Autowired
private MeterRegistry meterRegistry;
@PostConstruct
public void init() {
Gauge.builder(METRICS_NAME, this, CpuMetrics::getProcessCpuLoad)
.baseUnit("%")
.description("CPU Load")
.register(meterRegistry);
}
public Double getProcessCpuLoad() {
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem");
AttributeList list = mbs.getAttributes(name, new String[]{"ProcessCpuLoad"});
return Optional.ofNullable(list)
.map(l -> l.isEmpty() ? null : l)
.map(List::iterator)
.map(Iterator::next)
.map(Attribute.class::cast)
.map(Attribute::getValue)
.map(Double.class::cast)
.orElse(null);
} catch (Exception ex) {
return null;
}
}
}
CPU指标将在/actuator/metrics/process.CPU.load
:
{
"name": "process.cpu.load",
"description": "CPU Load",
"baseUnit": "%",
"measurements": [
{
"statistic": "VALUE",
"value": 0.09767676212004521
}
],
"availableTags": []
}
刚刚检查了一下,我找到了这个执行器…/执行器/度量/process.cpu.usage
它输出以下内容:
{
name: "process.cpu.usage",
description: "The "recent cpu usage" for the Java Virtual Machine process",
baseUnit: null,
measurements: [
{
statistic: "VALUE",
value: 0.0001742149747252696
}
],
availableTags: [ ]
}
当前使用的是Spring启动版本 2.2.2.发布
。
问题内容: 我一直在研究Spring / Spring MVC应用程序,并且希望添加性能指标。我遇到过Spring Boot Actuator,它看起来是一个不错的解决方案。但是我的应用程序不是Spring Boot应用程序。我的应用程序在传统容器Tomcat 8中运行。 我添加了以下依赖 我创建了以下配置类。 我什至可以按照StackOverflow另一篇文章的建议在每个配置类上添加 问题答案:
如何为执行器endpoint启用安全性,当在Spring启动1.5.4.RELEASE项目中没有Spring Security模块依赖项时 我在应用程序中添加了以下值。属性,但当我单击任何endpoint时,我会得到错误 我应该如何启用安全性?
我有: a)1台服务器(4vcpu,8GB)运行hazelcast节点, b)1台(4vcpu,8MB)运行tomcat 7上的hazelcash性能中心。 两台服务器都在同一个本地网络中。 我已经测试了2个场景:< br >场景1)我已经开始了a)和b)。没有传输数据。a)上的cpu使用率为0-10%。< br >情景2)我已经开始了a)和b)。我已经将大量数据转移到a)上进行处理,并一直等到它
我们有一个核心库和几个集成项目。每个集成项目都使用核心库,并继承核心DB flyway迁移。在核心中,有创建模式和一些初始数据的flyway迁移脚本。集成项目还包含迁移脚本。到目前为止,迁移脚本的执行顺序是这样的,核心迁移总是在集成项目之前运行,如下所示: 但是,我想要的是版本优先,而不是项目,例如: 我在核心中使用以下类: 以及集成项目中的以下内容: 如何通过Flyway实现这一点?
我有一个python程序成功地使用云服务帐户执行bigquery。当我尝试使用Jenkins调度python程序时,我看到了以下错误:gcloud用户对表和数据集具有bigquery编辑器、dataowner和admin权限。 log: gCloud auth激活服务帐户abc--key-file=****激活的服务号凭据:abc273721.iam.gserviceaccount.com]gCl
问题内容: 我的目标是使我们的Redis服务器在生产中达到约80%的CPU利用率。通过确保我们不会利用CPU不足,同时为增长和高峰留出一些空间,这将有益于后端服务器设计。 使用Redis自己的基准测试工具时,很容易达到100%的CPU使用率: 在此基准上,我们分配了50个客户端以将1,000,000个请求推送到我们的Redis服务器。 但是在使用其他客户端工具(例如redis-lua或webdis