标签: cpu-usage

使用/ proc/stat准确计算Linux中的CPU利用率

有关如何使用/ proc/stat中的统计信息获取CPU利用率的帖子和参考.但是,他们中的大多数只使用7个以上CPU统计数据中的4个(用户,漂亮,系统和空闲),忽略了Linux 2.6(iowait,irq,softirq)中剩余的jiffie CPU数量.

例如,请参阅确定CPU利用率.

我的问题是:iowait/irq/softirq数字是否也计入前四个数字之一(用户/好/系统/空闲)?换句话说,总的jiffie数量是否等于前四个统计数据的总和?或者,总的jiffie数量是否等于所有7个统计数据的总和?如果后者为真,则CPU利用率公式应考虑所有数字,如下所示:

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

int main(void)
{
  long double a[7],b[7],loadavg;
  FILE *fp;

  for(;;)
  {
    fp = fopen("/proc/stat","r");
    fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]);
    fclose(fp);
    sleep(1);
    fp = fopen("/proc/stat","r");
    fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5],&b[6]);
    fclose(fp);

    loadavg = ((b[0]+b[1]+b[2]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[4]+a[5]+a[6]))
         / ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]));
    printf("The current CPU utilization is : %Lf\n",loadavg);

  }

  return(0);
}
Run Code Online (Sandbox Code Playgroud)

linux cpu-usage

15
推荐指数
1
解决办法
3万
查看次数

C#中的多线程CPU使用率

我的程序使用预定数量的线程,每个线程都执行独立工作.我使用i7-2600 CPU,但我关闭了超线程模块,因此它在4个内核上运行4个线程.当我使用1个线程运行程序时,CPU使用率为25%,这是完全使用1个线程的完美,但是当我运行4或3个线程时,我只获得60%的CPU,为什么?

就像我之前提到的那样,线程是完全独立的(没有锁和没有争论)当我用1个线程运行程序4次时,我获得了100%的CPU使用率(即,当每个进程的4个进程为1个线程时,我得到了正确的CPU使用率)

有任何想法吗?

更多信息:

  1. 在处理所有需要的数据时,我没有使用I/O加载到内存中,每个线程在处理之前加载自己的数据.
  2. 我从数据库加载数据(使用oleDb),但我正在描述的问题发生在加载后所有线程都在处理(没有加载完成).
  3. 数字是:
    • 2个线程大约40%而不是50个(每个线程85%).
    • 3个线程大约50%而不是75个(每个线程65%).
    • 4个线程大约60%而不是100个(每个线程60%).
  4. 我使用带有16GB内存的i7 2600,但该进程的内存使用率并未接近.
  5. 我运行Windows性能监视器来寻找没有的争用.

c# multithreading cpu-usage

15
推荐指数
1
解决办法
5240
查看次数

Java限制资源使用

有没有办法限制java使用的核心数量?

同样,是否可以限制使用该核心的数量?

java cpu cpu-usage

15
推荐指数
1
解决办法
1万
查看次数

.Net 4不断在StrongNameSignatureVerification上浪费一个CPU核心

我们有一个在.Net 4上运行的混合模式汇编应用程序(MFC + WinForms),Windows 2008 R2在一个线程上不断使用100%cpu.

使用ProcessExplorer,我们在忙线程上看到以下堆栈.我们还可以看到另外10个线程只使用0.01%的CPU运行clr.dll!StrongNameSignatureVerification.

旋转线程不会阻止应用程序的其余部分运行,但会浪费CPU时间.

繁忙线程的堆栈跟踪如下:

ntoskrnl.exe!IoAcquireRemoveLockEx+0xe7
ntoskrnl.exe!memset+0x22a
ntoskrnl.exe!KeWaitForSingleObject+0x2cb
ntoskrnl.exe!KeDetachProcess+0x120d
ntoskrnl.exe!PsReturnProcessNonPagedPoolQuota+0x3a3
ntoskrnl.exe!CcSetDirtyPinnedData+0x433
mscorlib.ni.dll+0x2b066a
mscorlib.ni.dll+0x2317ac
mscorlib.ni.dll+0x2b066a
mscorlib.ni.dll+0x2317ac
mscorlib.ni.dll+0x26ccf7
mscorlib.ni.dll+0x237fc4
mscorlib.ni.dll+0x26cc3c
clr.dll+0x21bb
clr.dll!CoUninitializeEE+0xee9b
clr.dll!CoUninitializeEE+0x11463
clr.dll!CoUninitializeEE+0x114dc
clr.dll!CoUninitializeEE+0x1154b
clr.dll!StrongNameErrorInfo+0xa638
clr.dll!StrongNameSignatureVerification+0x144fb
clr.dll!StrongNameSignatureVerification+0x1457d
clr.dll!StrongNameSignatureVerification+0x14638
clr.dll!StrongNameSignatureVerification+0x146d2
clr.dll!StrongNameErrorInfo+0x9977
clr.dll!StrongNameErrorInfo+0xa5bc
clr.dll!StrongNameErrorInfo+0xa553
clr.dll!StrongNameErrorInfo+0xa517
clr.dll!StrongNameErrorInfo+0xa151
clr.dll!StrongNameErrorInfo+0x9501
clr.dll!StrongNameErrorInfo+0xad67
clr.dll!StrongNameSignatureVerification+0x164d9
ntdll.dll!RtlCreateUserProcess+0x8c
ntdll.dll!RtlCreateProcessParameters+0x4e
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一类似帐户就是这个问题:clr.sll!StrongNameSignature验证CPU耗尽虽然线程似乎已经冷了.

我们不签署我们的程序集并且愿意信任它们,有没有办法完全禁用强名称验证?

.net strongname cpu-usage

15
推荐指数
1
解决办法
6023
查看次数

使用C++检索Windows中的CPU负载百分比

我一直在研究这个工具,以快速记录一些系统统计信息,如内存信息和CPU负载百分比(如任务管理器中显示的那样).我似乎有内存和日志记录部分,但计算CPU百分比非常困难:(我已经找到了很多关于检查CPU信息的方法的信息,但在摘要之外几乎没有任何代码示例我发现编译,或者评论很好,所以我很难找到一种方法来实现这一点.我已经阅读了很多关于获取CPU时序的stackoverflow问题,但我还没有能够把碎片放在一起.

也许我错过了这一点,但似乎一种流行的方式来解决这个问题是通过查询CPU两次,每次检查之间至少200ms,以帮助避免出现问题......解决问题?是的!我怎么做到这一点?:(我在语法上挑战D:

我将分享我的源代码,以便您可以看到到目前为止我到底做了什么.这只是一个.cpp,我正在使用VS2013 Express for C++,而且它仅适用于多核CPU的Windows.

提前警告:我很抱歉代码中的所有注释:x此外,如果您复制此代码并运行它,它将生成一个名为log.CSV的.CSV文件

//included libraries/functionality for input/output
#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;

//creates a static variable to convert Bytes to Megabytes
#define MB 1048576


//main program code loop
int main()
{
    //Code block intiialization for the memory referenced in the Kernell
    MEMORYSTATUSEX memStat;
    memStat.dwLength = sizeof (memStat);
    GlobalMemoryStatusEx(&memStat);


    //loads the SYSTEMTIME
    SYSTEMTIME sysTime;
    //Retrieves data so that we have a way to Get it to output …
Run Code Online (Sandbox Code Playgroud)

c++ windows cpu-usage visual-studio-2013

15
推荐指数
2
解决办法
2万
查看次数

Azure for Owin/IIS应用程序的性能不佳

我们测量了一些执行测试,我注意到CPU在内核模式下运行了很多时间.我想知道为什么会这样.

应用程序:它是经典的Azure云服务Web角色,其中Owin正在IIS下监听,而Owin本身只提供缓存在内存中的静态文件(因此应该只有一点性能损失,而且每个都应该非常快).内容将复制await stream.CopyToAsync(response.Body)到输出流.

测试本身在加特林看起来像这样:

val openLoginSet = exec(http("ROOT")
      .get("/")
      .headers(Headers105Test2.headers_0)
      .resources(
        http("MED: arrow-down-small.png").get(uriIconAssets + "/arrow-down-small.png").headers(Headers105Test2.headers_1),
        http("MED: arrow-up-small.png").get(uriIconAssets + "/arrow-up-small.png").headers(Headers105Test2.headers_1),
        http("MED: close-medium.png").get(uriIconAssets + "/close-medium.png").headers(Headers105Test2.headers_1),
        http("MED: decline-medium.png").get(uriIconAssets + "/decline-medium.png").headers(Headers105Test2.headers_1),
        http("MED: help-medium.png").get(uriIconAssets + "/help-medium.png").headers(Headers105Test2.headers_1),
        http("MED: submit-medium.png").get(uriIconAssets + "/submit-medium.png").headers(Headers105Test2.headers_1),
        http("MED: delete-medium.png").get(uriIconAssets + "/delete-medium.png").headers(Headers105Test2.headers_1),
        http("MED: en-us.js").get("/en-us.js").headers(Headers105Test2.headers_8),
        http("MED: cloud_logo_big.png").get("/assets/cloud_logo_big.png").headers(Headers105Test2.headers_1),
        http("MED: favicon.ico").get("/favicon.ico").headers(Headers105Test2.headers_0))

val httpProtocol = http
  .baseURL("https://myurl.com")
  .inferHtmlResources()

val openLoginSenario = scenario("OpenOnly").exec(repeat(400, "n") {
    exec(openLoginSet).pause(3,6)
})

setUp(openLoginSenario.inject(rampUsers(150) over (3 minutes)))
  .protocols(httpProtocol)
  .maxDuration(3 minutes)
Run Code Online (Sandbox Code Playgroud)

(我将测试缩短为运行3分钟只是为了捕获这里显示的数据)有3台计算机运行此gatling测试,每个计算机最多150个并发线程,总共450个线程.

我看到内核中运行的代码很多,而W3wp进程并没有占用大部分CPU:

测试刚刚启动时捕获的CPU(添加新线程时cpu正在上升):

测试刚刚开始

当测试几乎在结束之前捕获CPU:

在测试结束之前

内核模式看起来很糟糕,我不确定是什么原因造成的.应该几乎没有涉及锁.当阅读其他可能导致高内核模式的内容时,我发现DPC可能会导致它.所以我也捕获了一些DPC数据,但我不确定什么是正常的,什么不是.无论如何,具有DPC最大时间的图表也包括在sshot中.

vmbus.sys从所有DPC中获取最重要的时间.这意味着Azure实例不是任何裸机(并不令人惊讶),并且该实例与其他实例共享它的计算能力.据我了解,vmbus.sys负责网卡本身与托管的HyperV实例之间的通信.可能在HyperV中运行是低性能的主要原因?

我想知道在哪里查看,以及如何在我的情况下找出导致内核模式的原因.


更多数据:

测试开始时的部分DPC数据(在30秒内拍摄):

Total …
Run Code Online (Sandbox Code Playgroud)

c# performance cpu-usage azure

15
推荐指数
1
解决办法
397
查看次数

efilogin-helper在MacBook Pro上以高CPU连续运行

launchd启动了一个名为efilogin-helper的进程,它以root身份运行,在高CPU负载下持续运行(60%到120%)

你知道这个过程是什么以及如何控制它吗?

关于谷歌的信息令人惊讶.

另外,自己解决这些问题的好方法是什么?

macos process cpu-usage macos-sierra

15
推荐指数
1
解决办法
1万
查看次数

Python中每个进程的CPU使用率

我是否可以看到当前python应用程序使用的处理器使用量(最大值的百分比)?

场景:我的主机允许我运行我的应用程序,只要它不消耗超过X%的CPU功率,所以我希望它"关注自己"并放慢速度.那么我怎么知道应用程序使用了多少CPU?

目标平台是*nix,但是我想在Win主机上也这样做.

python monitoring cpu-usage

14
推荐指数
3
解决办法
3万
查看次数

性能计数器当前进程的CPU使用率超过100

我想显示我的多线程应用程序的CPU使用率(在多核处理器上工作).我想收到任务经理附近的数字.但我得到的数字超过100%.甚至超过500%.是的,我知道,对于类别"进程"的计数器"%Processor Time",我需要分为Environment.ProcessorCount"NumberOfLogicalProcessors"(我的配置相同).此操作结果为500%.我在具有不同硬件(i7,i5,Core2)和软件配置(带有所有更新的Windows 7 SP1,带有所有更新的Windows 2008 R2 SP1)的不同计算机上测试了此示例,并遇到了同样的问题.

public static class SystemInfo
{
    private static Process _thisProc;
    private static bool HasData = false;
    private static PerformanceCounter _processTimeCounter;

    private static void Init()
    {
        if (HasData)
            return;

        if (CheckForPerformanceCounterCategoryExist("Process"))
        {
            _processTimeCounter = new PerformanceCounter();
            _processTimeCounter.CategoryName = "Process";
            _processTimeCounter.CounterName = "% Processor Time";
            _processTimeCounter.InstanceName = FindInstanceName("Process");
            _processTimeCounter.NextValue();
        }

        MaximumCpuUsageForCurrentProcess = 0;
        HasData = true;
    }

    private static bool CheckForPerformanceCounterCategoryExist(string categoryName)
    {
        return PerformanceCounterCategory.Exists(categoryName);
    } …
Run Code Online (Sandbox Code Playgroud)

c# process performancecounter cpu-usage

14
推荐指数
1
解决办法
2万
查看次数

你如何通过PHP获得服务器CPU使用率和RAM使用率?

我想使用php获取服务器CPU和RAM使用率.该脚本应该适用于Windows和Linux.

我该怎么办?

php cpu-usage

14
推荐指数
2
解决办法
6万
查看次数