|
轉(zhuǎn)載:http://www./archives/2670.html
我的Linode十分繁忙,在跑一些密集操作數(shù)據(jù)庫的Rake任務(wù)時尤其如此。但我觀察發(fā)現(xiàn),Linode服務(wù)器的4核CPU,只有第1個核心(CPU#0)非常忙,其他都處于idle狀態(tài)。 不了解Linux是如何調(diào)度的,但目前顯然有優(yōu)化的余地。除了處理正常任務(wù),CPU#0還需要處理每秒網(wǎng)卡中斷。因此,若能將CPU#0分擔(dān)的任務(wù)攤派到其他CPU核心上,可以預(yù)見,系統(tǒng)的處理能力將有更大的提升。
一、在Linux上修改進(jìn)程的“CPU親和力” 在Linux上,可以通過 taskset 命令進(jìn)行修改。以Ubuntu為例,運行如下命令可以安裝taskset工具。 # apt-get install schedutils 對運行中的進(jìn)程,文檔上說可以用下面的命令,把CPU#1 #2 #3分配給PID為2345的進(jìn)程: # taskset -cp 1,2,3 2345
但我嘗試沒奏效,于是我關(guān)掉了MySQL,并用taskset將它啟動: # taskset -c 1,2,3 /etc/init.d/mysql start 對于其他進(jìn)程,也可如此處理(nginx除外,詳見下文)。之后用top查看CPU的使用情況,原來空閑的#1 #2 #3,已經(jīng)在辛勤工作了。
二、配置nginx綁定CPU 剛才說nginx除外,是因為nginx提供了更精確的控制。 在conf/nginx.conf中,有如下一行: worker_processes 1; 這是用來配置nginx啟動幾個工作進(jìn)程的,默認(rèn)為1。而nginx還支持一個名為worker_cpu_affinity的配置項,也就是說,nginx可以為每個工作進(jìn)程綁定CPU。我做了如下配置: worker_processes 3; 這里0010 0100 1000是掩碼,分別代表第2、3、4顆cpu核心。 重啟nginx后,3個工作進(jìn)程就可以各自用各自的CPU了。 三、刨根問底
四、Windows? 在Windows上修改“CPU親和力”,可以通過任務(wù)管理器搞定。
* 個人感覺,Windows系統(tǒng)中翻譯的“處理器關(guān)系”比“CPU親和力”容易理解點兒 —————– 進(jìn)行了這樣的修改后,即使系統(tǒng)負(fù)載達(dá)到3以上,不帶緩存打開首頁(有40多次查詢)依然順暢;以前一旦負(fù)載超過了1.5,響應(yīng)就很慢了。效果很明顯。
linux taskset命令詳解 SYNOPSIS |
|
|