【问题标题】:Get CPU usage of VM without using SSH (KVM)在不使用 SSH (KVM) 的情况下获取 VM 的 CPU 使用率
【发布时间】:2014-06-18 11:52:34
【问题描述】:

有没有什么方法可以在不通过 SSH 连接到 guest 的情况下获取 KVM 中 vm 的 cpu 使用率和 memory 使用率?我的意思是,虚拟机管理器如何获取 CPU 使用率(图表)?我还需要 CPU 使用率和内存的百分比。有谁知道如何通过 libvirt 与 kvm 通信?我真的只需要尽可能多地在没有 SSH 的情况下获得 CPU 使用率和内存。

场景: 我正在尝试构建一个包含负载平衡器(主机)+ 3 个服务器(VM)的设置,然后它会通知我 3 个服务器的 cpu 使用情况,这样如果我需要提供另一台服务器,我会知道什么时候。

感谢您的帮助。真的很感激。

【问题讨论】:

  • 您可能会在 serverfault.com 上得到更好的答案,它们可能与 SNMP 有关。祝你好运。
  • 会检查的。谢谢@AndersR.Bystrup!
  • 通过 KVM 虚拟化,每个虚拟机只是主机进程列表中的一个进程,因此top 或其他“标准”工具会告诉您该进程/VM 的 CPU/内存使用情况。如果您想要图表,nmon 可能是一个不错的起点。
  • 感谢@twalberg 提供的信息。但我只是对获取虚拟机的 CPU 使用率非常感兴趣。有没有办法从命令行(通过 top 命令)提取 cpu 使用情况?或者更容易理解我的问题的方法是,KVM 如何生成 cpu 使用图?再次感谢。欣赏!

标签: linux memory-management cpu-usage kvm libvirt


【解决方案1】:

您可以使用libvirt 中的virDomainGetInfo 函数来获取有关域消耗的内存和cpu 时间的信息。

这是一个非常简单的例子:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <libvirt/libvirt.h>

int main(int argc, char **argv) {
    virConnectPtr   c;
    virDomainPtr    d;
    virDomainInfo   di;
    int res;
    int domid;

    domid = atoi(argv[1]);

    c = virConnectOpen(NULL);
    d = virDomainLookupByID(c, domid);
    res = virDomainGetInfo(d, &di);

    printf("res = %d\n", res);
    printf("memory used = %ld\n", di.memory);
    printf("cpu time used = %ld\n", di.cpuTime);
}

更新

我敢肯定,如果您检查了例如 virt-manager 的来源,您会发现它正是使用这些函数来生成您在问题中引用的各种图表。您可以通过查看“cpu time”值随时间变化的程度来确定 cpu“使用情况”。

如果您只是在寻找类似于该域正在使用的主机 cpu 的百分比,您可以使用ps。即如果对应的qemu进程为19650,则可以运行:

$ ps -p 19650 -o pid,%cpu
  PID %CPU
19650 10.2

【讨论】:

  • 我可以通过命令“virsh cpu-stats”获取cpu时间。我需要CPU使用率。我可以使用任何 libvirt 函数来获取 cpu 使用情况和内存使用情况吗? :) 谢谢@larsks!
  • 这个答案确实为您提供了 libvirt 函数来确定 cpu 和内存使用情况。我已对其进行了更新,以包含另一种方法来获取来宾消耗的主机 CPU 百分比。如果你问的是virsh 命令,那不是编程问题,应该在superuserserverfault 上询问。
  • 好的。现在一切都清楚了。刚刚完成与我们顾问的咨询。你是对的,我认为 virsh 不是真正的编程,但如果我错了,请纠正我,virsh 正在使用 libvirt 来获取 cpu 时间、内存使用情况等?而我现在的主要问题是,如何使用 libvirt 获取来宾 VM 的 cpu 使用率?我是否使用 libvirt API 创建一个程序以获得与 KVM 显示的完全相同的内容(我指的是图表)?或者 virsh 中有一个命令来获取它?对不起,如果我的问题是一样的,我仍然无法理解整个事情。无论如何,非常感谢@larsks!
猜你喜欢
  • 2011-06-09
  • 2021-07-28
  • 2017-06-28
  • 2014-01-08
  • 2019-04-21
  • 2023-03-10
  • 2018-03-21
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多