導航:首頁 > 編程系統 > linuxcpu資源分配

linuxcpu資源分配

發布時間:2024-06-22 21:06:41

『壹』 linux下怎樣將線程分配到指定CPU

大概的介紹一下Linux 的指定CPU運行,包括進程和線程。linux下的top命令是可以查看當前的cpu的運行狀態,按1可以查看系統有多少個CPU,以及每個CPU的運行狀態。
可是如何查看線程的CPU呢?top
-Hp pid,pid就是你當前程序的進程號,如果是多線程的話,是可以查看進程內所有線程的CPU和內存使用情況。

pstree可以查看主次線程,同樣的pstree -p pid。可以查看進程的線程情況。

taskset這個其實才是重點,可以查看以及設置當前進程或線程運行的CPU(設置親和力)。

taskset -pc pid,查看當前進程的cpu,當然有的時候不只是一個,taskset -pc cpu_num pid ,cpu_num就是設置的cpu。

這樣的話基本的命令和操作其實大家都知道了,接下來就是在代碼中完成這些操作,並通過命令去驗證代碼的成功率。

進程制定CPU運行:

[cpp] view plain
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/sysinfo.h>
#include<unistd.h>
#define __USE_GNU
#include<sched.h>
#include<ctype.h>
#include<string.h>

int main(int argc, char* argv[])
{
//sysconf獲取有幾個CPU
int num = sysconf(_SC_NPROCESSORS_CONF);
int created_thread = 0;
int myid;
int i;
int j = 0;

//原理其實很簡單,就是通過cpu_set_t進行位與操作
cpu_set_t mask;
cpu_set_t get;

if (argc != 2)
{
printf("usage : ./cpu num\n");
exit(1);
}

myid = atoi(argv[1]);

printf("system has %i processor(s). \n", num);

//先進行清空,然後設置掩碼
CPU_ZERO(&mask);
CPU_SET(myid, &mask);

//設置進程的親和力
if (sched_setaffinity(0, sizeof(mask), &mask) == -1)
{
printf("warning: could not set CPU affinity, continuing...\n");
}
while (1)
{

CPU_ZERO(&get);
//獲取當前進程的親和力
if (sched_getaffinity(0, sizeof(get), &get) == -1)
{
printf("warning: cound not get cpu affinity, continuing...\n");
}
for (i = 0; i < num; i++)
{
if (CPU_ISSET(i, &get))
{
printf("this process %d is running processor : %d\n",getpid(), i);
}
}
}
return 0;
}

進程設置CPU運行,其實只能是單線程。多線程設定CPU如下:

[cpp] view plain
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sched.h>

void *myfun(void *arg)
{
cpu_set_t mask;
cpu_set_t get;
char buf[256];
int i;
int j;
//同樣的先去獲取CPU的個數
int num = sysconf(_SC_NPROCESSORS_CONF);
printf("system has %d processor(s)\n", num);

for (i = 0; i < num; i++) {
CPU_ZERO(&mask);
CPU_SET(i, &mask);
//這個其實和設置進程的親和力基本是一樣的
if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {
fprintf(stderr, "set thread affinity failed\n");
}
CPU_ZERO(&get);
if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {
fprintf(stderr, "get thread affinity failed\n");
}
for (j = 0; j < num; j++)
{
if (CPU_ISSET(j, &get))
{
printf("thread %d is running in processor %d\n", (int)pthread_self(), j);
}
}
j = 0;
while (j++ < 100000000) {
memset(buf, 0, sizeof(buf));
}
}
pthread_exit(NULL);
}

int main(int argc, char *argv[])
{
pthread_t tid;
if (pthread_create(&tid, NULL, (void *)myfun, NULL) != 0)
{
fprintf(stderr, "thread create failed\n");
return -1;
}
pthread_join(tid, NULL);
return 0;
}

『貳』 為什麼一個請求過來,linux伺服器的cpu佔用那麼高(20-80%)

1、防殺毒軟體造成故障

由於新版的KV、金山、瑞星都加入了對網頁、插件、郵件的隨機監控,無疑增大了系統負擔。處理方式:基本上沒有合理的處理方式,盡量使用最少的監控服務吧,者,升級你的硬體配備。
2、驅動沒有經過認證,造成CPU資源佔用100%

大量的測試版的驅動在網上泛濫,造成了難以發現的故障原因。 處理方式:尤其是顯卡驅動特別要注意,建議使用微軟認證的或由官方發布的驅動,並且嚴格核對型號、版本

3、病毒、木馬造成

大量的蠕蟲病毒在系統內部迅速復制,造成CPU佔用資源率據高不下。解決辦法:用可靠的殺毒軟體徹底清理系統內存和本地硬碟,並且打開系統設置軟體,察看有無異常啟動的程序。經常性更新升級殺毒軟體和防火牆,加強防毒意識,掌握正確的防殺毒知識。

4、控制面板—管理工具—服務—RISING REALTIME MONITOR SERVICE點滑鼠右鍵,改為手動。

5、開始->;運行->;msconfig->;啟動,關閉不必要的啟動項,重啟。

6、查看「svchost」進程。

svchost.exe是Windows XP系統的一個核心進程。svchost.exe不單單只出現在Windows XP中,在使用NT內核的Windows系統中都會有svchost.exe的存在。一般在Windows 2000中svchost.exe進程的數目為2個,而在Windows XP中svchost.exe進程的數目就上升到了4個及4個以上。

7、查看網路連接。主要是網卡。

8、查看網路連接

當安裝了Windows XP的計算機做伺服器的時候,收到埠 445 上的連接請求時,它將分配內存和少量地調配 CPU資源來為這些連接提供服務。當負荷過重的時候,CPU佔用率可能過高,這是因為在工作項的數目和響應能力之間存在固有的權衡關系。你要確定合適的 MaxWorkItems 設置以提高系統響應能力。如果設置的值不正確,伺服器的響應能力可能會受到影響,或者某個用戶獨占太多系統資源。
要解決此問題,我們可以通過修改注冊表來解決:在注冊表編輯器中依次展開 [HKEY_LOCAL_ ]分支,在右側窗口中新建一個名為「maxworkitems」的DWORD值。然後雙擊該值,在打開的窗口中鍵入下列數值並保存退出:

9、看看是不是Windows XP使用滑鼠右鍵引起CPU佔用100%

在資源管理器裡面,當你右鍵點擊一個目錄或一個文件,你將有可能出現下面所列問題:
任何文件的拷貝操作在那個時間將有可能停止相應
網路連接速度將顯著性的降低
所有的流輸入/輸出操作例如使用Windows Media Player聽音樂將有可能是音樂失真成因:
當你在資源管理器裡面右鍵點擊一個文件或目錄的時候,當快捷菜單顯示的時候,CPU佔用率將增加到100%,當你關閉快捷菜單的時候才返回正常水平。

解決方法:

方法一:
關閉「為菜單和工具提示使用過渡效果」
1、點擊「開始」--「控制面板」
2、在「控制面板」裡面雙擊「顯示」
3、在「顯示」屬性裡面點擊「外觀」標簽頁
4、在「外觀」標簽頁裡面點擊「效果」
5、在「效果」對話框裡面,清除「為菜單和工具提示使用過渡效果」前面的復選框接著點擊兩次「確定」按鈕。

方法二:
在使用滑鼠右鍵點擊文件或目錄的時候先使用滑鼠左鍵選擇你的目標文件或目錄。然後再使用滑鼠右鍵bomb出快捷菜單。
一般情況下CPU佔了100%的話我們的電腦總會慢下來,而很多時候我們是可以通過做一點點的改動就可以解決,而不必問那些大蝦了。
當機器慢下來的時候,首先我們想到的當然是任務管理器了,看看到底是哪個程序佔了較搞的比例,如果是某個大程序那還可以原諒,在關閉該程序後只要 CPU正常了那就沒問題;如果不是,那你就要看看是什幺程序了,當你查不出這個進程是什幺的時候就去google或者搜。有時只結束是沒用的,在xp下我們可以結合msconfig里的啟動項,把一些不用的項給關掉。在200

閱讀全文

與linuxcpu資源分配相關的資料

熱點內容
編程用的鍵盤是什麼 瀏覽:316
perl判斷文件為空 瀏覽:865
java生成07版的docx 瀏覽:276
華碩a555l升級了win10 瀏覽:820
文件夾怎麼加密win7 瀏覽:341
文件及文件夾操作 瀏覽:329
大白菜win10密鑰 瀏覽:718
ghost程序是什麼 瀏覽:233
電信營業廳手機app如何測網速 瀏覽:910
邊城浪子幾個版本 瀏覽:488
更改磁碟文件系統 瀏覽:282
access2007資料庫壓縮 瀏覽:899
微信公眾號怎麼清粉 瀏覽:459
長安引力app怎麼刷u幣 瀏覽:256
windows7桌面文件夾 瀏覽:110
makefile文件格式 瀏覽:999
市面上賣的蘋果4S是真的嗎 瀏覽:946
app保存密碼 瀏覽:420
團隊網路投票介紹怎麼寫 瀏覽:891
odak音箱app在哪裡下載 瀏覽:830

友情鏈接