使用dot net api如何找出cpu& vmware环境中的内存利用率?

时间:2014-01-23 14:21:41

标签: vmware vsphere

我们有我们的vmware环境,从中我们可以找到分配的内存和放大器。 CPU通过dot net API,我们也想了解它的CPU和内存利用率(Max,Min,Avg)。 但是,我们无法在dot net api中找到任何方法或属性(VCloudSDK_V5_5) 所以,我需要点网络代码示例来找出cpu& vmware环境中的内存利用率。 我看着每个地方,但我无法找到。

任何C#代码示例?

我们正在尝试使用此代码:

http://vmware-gadget.googlecode.com/svn-history/r19/trunk/Vmware-Gadget/VmwareReader/VMPerfCounter.cs

我们实现了一个引用VimService dll的示例,但我们无法通过它进行连接。

我们收到错误:请求失败并显示错误消息...

错误在以下方法中联机(_sic = _service.RetrieveServiceContent(_svcRef);)

System.Net.ServicePointManager.CertificatePolicy = new Program();
            //Gets service contents
            _svcRef.type = "ServiceInstance";
            _svcRef.Value = "ServiceInstance";

            // _service is VimService
            _service = new VimService();
            _service.Url = url;
            _service.CookieContainer = new CookieContainer();

            // _sic is ServiceContent
            _sic = _service.RetrieveServiceContent(_svcRef);  // Error at this line

            _service.LoginCompleted += new LoginCompletedEventHandler(_service_LoginCompleted);
            _session = _service.Login(_sic.sessionManager, usid, pwd, null); 

但是,没有错误消息。 任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您应该查看vSphere Guest API documentation,您可以在此处找到执行此类监控的功能。您可以使用DllImport方法为vmGuestLib.dll中记录的方法添加别名。要了解如何从C#中访问这些方法,请阅读Consuming Unmanaged DLL Functions并查看DllImport的文档。

以下是DllImportVMGuestLib_OpenHandleVMGuestLib_GetMemActiveMB函数的VMGuestLib_CloseHandle定义示例:

using System.Runtime.InteropServices;
public enum VMGuestLibError {
    VMGUESTLIB_ERROR_SUCCESS = 0,
    VMGUESTLIB_ERROR_OTHER,
    VMGUESTLIB_ERROR_NOT_RUNNING_IN_VM,
    VMGUESTLIB_ERROR_NOT_ENABLED,
    VMGUESTLIB_ERROR_NOT_AVAILABLE,
    VMGUESTLIB_ERROR_NO_INFO,
    VMGUESTLIB_ERROR_MEMORY,
    VMGUESTLIB_ERROR_BUFFER_TOO_SMALL,
    VMGUESTLIB_ERROR_INVALID_HANDLE,
    VMGUESTLIB_ERROR_INVALID_ARG,
    VMGUESTLIB_ERROR_UNSUPPORTED_VERSION
};
[DllImport("vmGuestLib.dll")] public static extern VMGuestLibError VMGuestLib_OpenHandle(ref IntPtr handle);
[DllImport("vmGuestLib.dll")] public static extern VMGuestLibError VMGuestLib_GetMemActiveMB(IntPtr handle, ref UInt32 memActiveMB);
[DllImport("vmGuestLib.dll")] public static extern VMGuestLibError VMGuestLib_CloseHandle(IntPtr handle);

答案 1 :(得分:1)

Here are some decent API docs

我实际上自己刚刚开始了一个类似的项目,我能够使用this code sample作为一个起点。用户Coffeetocode提供了一个非常简单的演练,可以启动和运行.net api。

从那里,使用上述API文档查找各种成员名称。

例如:

           string provisioned_disk_space = "" + ((vm.Summary.Storage.Uncommitted + vm.Summary.Storage.Committed) / 1073741824);
           string used_disk_space = "" + (vm.Summary.Storage.Committed / 1073741824);
           string number_of_cpus = "" + vm.Summary.Config.NumCpu;
           string total_ram = "" + (vm.Summary.Config.MemorySizeMB/1024);

我认为你正在寻找的成员是

            VirtualMachine.Summary.QuickStats.GuestMemoryUsage;
            VirtualMachine.Summary.QuickStats.OverallCpuUsage;