一種控制程序CPU利用率的方法

2021-06-27 14:11:38 字數 1621 閱讀 9539

在乙個計算機系統中,cpu是乙個有限的核心的資源,有時為了充分利用cpu的資源,我們會把業務混合部署到一台機器上,這些業務有可能包括核心業務和非核心業務,為了不影響核心業務,我們需要限制非核心業務cpu資源的利用率。

如果乙個程序的cpu利用率是40%,表示這個程序占用了40%的cpu時間。那麼為了限制程序的cpu不超過40%,我們可以讓這個程序執行40%的時間,然後停止60%的時間。通過給程序傳送sigcont和sigstop訊號可以控制程序的啟停。

根據上面的原理,**如下:

#include #include #include #include #include #include #include #include #include static int g_process_count = 8;

static int g_cpu_usage = 80;

static std::vectorg_child_processes;

static int g_show_usage = 0;

static void show_usage()

int child_main()

return 0;

}int main(int argc, char* argv)

, ,,};

c = getopt_long(argc, argv, "c:u:?h", long_options, &option_index);

if (c == -1)

break;

switch (c)

}if (optind != argc)

if (g_show_usage)

fprintf(stdout, "process count %d cpu usage %d\n", g_process_count, g_cpu_usage);

for (int i = 0; i < g_process_count; ++i)

if (pid == 0)

g_child_processes.push_back(pid);

}for (;;)

usleep((100 - g_cpu_usage) * 1000);

for (std::vector::const_iterator iter = g_child_processes.begin(); iter != g_child_processes.end(); ++iter)

usleep(g_cpu_usage * 1000);

}return 0;

}

使用g++ -o ./cpu_limit_test ./cpu_limit_test.cpp編譯,執行./cpu_limit_test --process-count=4 --cpu-usage=30的效果如下:

process-count引數指定建立的子程序的個數,cpu-usage引數表示cpu的上線。上面的**,首先建立process-count個子程序,每個子程序都是乙個死迴圈;父程序每隔一段時間給所有的子程序傳送sigcont和sigstop訊號來控制子程序的執行,進而達到控制cpu資源利用率的目的。

linux c控制cpu利用率

1 在x86體系結構中系統定時器的預設頻率是100,即i386處理上的每秒鐘時鐘中斷100次。所以在i386中每10ms產生一次時鐘中斷。2 程序排程,可能是主動讓出cpu,也可能是時鐘中斷中讓出cpu。3 控制cpu的利用率,實際上是控制cpu在totaltime時間內繁忙的時間busytime。...

Linux下限制程序的CPU利用率

運維生存時間的雲伺服器也用了大半年了,隨著上面的程式越來越多,cpu有時候會力不從心,有些程序是可以限制cpu的.cpuliimt完美的解決了這個問題。cpulimit安裝使用都非常簡單,大家往下看。1.cpulimit安裝 1.1 ubuntu debian 1 apt get install c...

Linux下CPU的利用率

cpu利用率是對系統進行效能分析的重要因素,本文將說明cpu時間的組成以及利用率的計算方法。核心中的時間 具體說明cpu的各種時間之前,先說明核心中幾個重要的時間概念。hz是系統時鐘在一秒內固定發出時鐘中斷的次數。hz在編譯核心前是可以進行配置的,因此通過下述命令就可以檢視當前系統的時鐘中斷頻率 1...