麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > Ubuntu > 正文

自己動手提高ubuntu系統的性能

2024-07-26 00:36:45
字體:
來源:轉載
供稿:網友

在每一個基本的系統中,都包含有各種各樣的基本進程,用于檢查系統服務,和操作系統通信等等。進程和系統的性能表現有著很大的關系,因此,一個系統管理者應該清楚了解當前系統中正在運行什么東西,有什么資源可用等等,只有這樣,你才能夠調整配置,例如,禁止不需要的進程,打開必須的監護程序以及將你的內核調整到最優化,最后得到一個最適合自己使用的最好的系統。Ubuntu是一個為大眾設計的系統,這也就決定了其系統設置的大眾化,換句話說,臃腫化。為了適應兼容性而支持的很多東西,我們其實不一定需要。在這里,筆者試圖講解一些通過調整內核參數,shell參數以及特定應用的設置來優化系統的方法,供大家參考。需要注意的是,不同的ubuntu系統有著不同的啟動腳本,并有著不同的運行進程,這里我只能以7.04系統為基礎來講解。其實自己學會對進程進行追蹤查看是非常重要的,只有這樣你才能在不同的系統中都游刃有余。另外,如果要更加深入調整系統,那么自己編譯一個屬于自己的系統是最合適的,本文沒有牽涉這么深入的東西。如果你對自己編譯linux系統感興趣,可以參考這篇文章和這篇文章。

本文假設你有一點點基本使用linux的基礎,所以很多東西只是講一個概念性的大綱,想深入了解的話,網絡上有很多文章。如果你是系統高手,基本就可以不用看本文了,你會覺得很簡單,如果你是連ps,who -r都不知道的新手,建議你還是先放google搜索一些入門文章,并親自使用linux一周以上,再回過頭來看這篇文章。本文很大程度上參考了Ubuntu Performance Guides,篇幅較長,故分兩頁發出。

剛才就幾次提到進程,那么,我們應該怎么理解這個詞語?廣泛得說,所有在系統中運行的,用于執行各種各樣任務的,都是一個進程,只不過根據具體執行任務的不同可以有所區分,例如,用于管理和維持操作系統運行的屬于系統進程,而用于處理用戶需求的就是用戶進程。

進程并不是一個獨立的概念,它是相互交互的,很多進程都為其他進程提供服務,或者攜手共同完成某一個功能。這些服務中,有一些對于系統的運作是非常關鍵的,例如X-Windows服務。絕大多數的系統進程都是服務性質的進程,而絕大多數用戶進程則是應用程序類進程。應用程序,比如你現在在使用的 Firefox(或者其它,估計FF最多吧)通常是由一個或多個滿足用戶需求的進程組成。總的來說,服務的開啟和關閉是基于系統需求的,而應用程序的開啟和關閉,則是基于用戶的需求的。

我們上面說的這些進程阿,服務阿啥的,其實之間的區分并不是很明顯,舉個例子,Gnome的桌面系統就是由各種程序和進程組成,而他們不僅提供其它程序需要的服務,還可以支持用戶的需求。GDE完全可以被稱為是程序,進程,應用和服務的集合體,這不會產生任何沖突。

當然,我們還是要稍微做一下區分,后面才方便繼續講解。現在就統一一下,進程表示任何可以產生運行中的進程標志符的東西,程序則表示能產生進程的可執行文件。用戶能夠直接使用應用程序,而操作系統才使用服務。
進程基本操作

在你的機器上,唯一能夠消耗你資源的就是正在運行的進程。如果當你發現自己的系統突然很慢,運行不正常時,通常只有兩個可能,一種是某些進程運行異常,另一種就是某些進程所消耗的資源已經大于你所擁有的資源。

當然,想看看什么東西正在你機器上運行其實很簡單,使用ps -aux或者top命令即可,這些東西資料很多,我就不多說了,實在不行man top或者man ps吧。當然,對于初學者來說最方便的還是利用圖形化界面的系統監視器,如圖:

screeshot(點擊縮放)

所有信息都盡顯眼前。注意,在系統監視器中,你不僅能看到進程運行情況,還能看到磁盤使用,CPU使用等很多有價值的信息,這些信息是接下來的部分可能用到的。

ok,現在我們知道,如果系統異常,如何去確定是什么進程異常了。但是接下來該怎么處理呢?無論是命令行還是圖形界面顯示,你都可以看到每一個進程都有屬于自己的ID,也就是PID。它們都是進程的句柄,而不是表示真實的進程。這有什么區別?對于一個擁有多線程的進程來講,可以讓所有的線程都擁有同一個句柄,也可以讓每一個線程都擁有一個句柄。太專業了?恩,通俗來講,這就相當于……進程的身份證,我們通過它來標志進程。這個東西在ubuntu中默認可以有32768個不同的PID,每有一個新的進程,就分配一個當前未用的PID給它。

好了,讓我們找到那個讓我們系統變慢的該死的罪魁禍首,看看它的PID,然后用kill PID命令來關閉它。等等,你確定就是這個進程影響了你的系統?你確信沒有錯殺好人?好吧,其實可以先用kill -stop PID命令來暫停一個進程,看看沒有了它,我們的系統是否正常。如果發現了冤假錯案,沒關系,kill -cont PID能讓進程繼續工作。

除了直接使用kill PID之外,我們還有更進一步的kill進程的辦法。kill PID僅僅是發出一個TERM信號,然后進程能捕捉這個信號,開始釋放資源,關閉程序,這不是一下子就完成的,因此在關閉程序之前,你可以結束打開的文件和完成正在做的任務。但是這導致一個問題,假如進程正在進行作業而且不能中斷,那么進程可以忽略這個SIGTERM信號,而且如果進程失去響應了怎么辦?別急,我們還可以試一試kill -1 PID命令,這個命令發送的是hang up信號,含義是“中止信號”,它告訴進程,終端已經被kill了。但這個信號同樣只被運行良好的進程所攔截。假設這兩種方式都無法結束進程,那么只能使用kill -9 PID了。這個命令發送的是真正的kill信號,對于這個信號,進程是不能忽略的。這是一個“我不管您在做什么,立刻停止”的信號,也就是說進程立刻被終止,不實施清理操作。

信號是用來與守護程序和進程通信的。任何活動任務都是一個進程,而守護程序是等待對某些事件做出反應或者按照日程安排執行任務的后臺服務。一個程序必須有建在其中的信號處理程序用于捕獲和應答信號。在LINUX中的signal參考指南解釋了各種不同信號和這些信號的用途。常用的信號除了上面介紹的以外,還有INT,CHLD等。
進程操作進階

當然,僅僅了解上面的知識,對于對進程的理解,還是不夠的。下面,我會介紹更多的關于進程的知識。

首先,我們需要知道,并不是所有的進程都會被動態分配PID,至少有兩個進程不會,就是kernel和init。kernel進程的PID是0, 一直是0,而且你無法從ps,top這些命令中看見它,當然,也無法用kill命令來終止它。init進程是主父進程,什么意思呢?每一個進程都需要一個父進程來監管它,父進程的作用就是接受子進程的返回值和狀態值。而如果任何一個進程的父進程被終止,init就會成為它的父進程。init進程的PID固定是1,從理論上講,你也可以終止它,但是千萬不要試圖這樣做,因為它是用來清除呆死進程的,一旦將其kill,系統最終將崩潰。

除了他倆,還有一些進程是你不應該kill的,包括Zombies,/O Bound—A和Interception。事實上,我們很少解除這幾個進程,普通用戶也沒必要接觸它們,因此,在這里我不會詳細解釋它們的用途,有興趣的朋友可以自己google。

其它進程,在保證系統本身不崩潰的情況下,一旦有異常你都可以試圖去kill,不過要知道,kill命令只作用一次,也就是說,假如,我是說假如,這個進程在被kill后又重新自啟動,那么你不得不再運行一次kill,這樣循環。當然,此時,你就不能一直陪它kill下去了,追蹤查看其自啟動的根源才是正確的做法。你覺得這太麻煩了?好吧,還有一個懶辦法,就是看看這個進程的名字,然后用kill name來阻止它。我知道很多地方都有介紹kill -9 -1這個命令,但是你需要知道,這個命令會kill你所有的進程,包括界面進程以及終端。而且如果你是root權限……它會連所有系統應用都一起 kill,然后,你的系統就將崩潰。所以用這個命令,你還不如直接按下你的重新啟動按鍵,還更加省心……
進程的啟動

我們能夠查看正在運行的進程,查看進程的具體信息,但是,我們能不能知道它們是怎樣開始的?難道是和孫猴子一樣從石頭里面崩出來的?你也許會看它的 PPID,恭喜你,摸著點門道了,but……你會發現大多數進程的PPID都是1,init進程。而事實上,進程的啟動原因可能是很多種,啟動腳本,設備配置腳本,網絡變化,甚至是任務日程等等等等。因此,我們需要探查進程啟動的秘密。
啟動腳本

看看你的/etc/init.d/文件夾,你會發現其中包含了很多用于啟動和停止系統服務的腳本,而它們,都將以鏈接形式存在于/etc/rc0.d, /etc/rc1.d以及類似目錄中。例如,在/etc/rc1.d執行命令ls -l,你會看見如下結果:

lrwxrwxrwx 1 root root 13 2007-04-21 22:01 K01gdm -> ../init.d/gdm*
lrwxrwxrwx 1 root root 17 2007-04-21 21:59 K01usplash -> ../init.d/usplash*
lrwxrwxrwx 1 root root 17 2007-04-23 14:54 K09apache2 -> ../init.d/apache2*
lrwxrwxrwx 1 root root 17 2007-04-21 21:58 K11anacron -> ../init.d/anacron*
lrwxrwxrwx 1 root root 13 2007-04-21 21:58 K11atd -> ../init.d/atd*
lrwxrwxrwx 1 root root 14 2007-04-21 21:58 K11cron -> ../init.d/cron*
lrwxrwxrwx 1 root root 16 2007-04-21 21:59 K19cupsys -> ../init.d/cupsys*
lrwxrwxrwx 1 root root 15 2007-04-21 21:59 K19hplip -> ../init.d/hplip*
lrwxrwxrwx 1 root root 22 2007-04-21 21:58 K20acpi-support -> ../init.d/acpi-su
……………………………..

如果你的運行級別是1,init就會進入/etc/rc1.d并調用其中的鏈接符號,也就是啟動相應的進程,以此類推。如果想知道目前系統的運行級別,最簡單的辦法就是用who -r命令,會顯示:

run-level 2 2007-05-04 10:09

這就表示我目前的系統運行級別是2。在boot的時候,所有/etc/rc2.d目錄下對應的init腳本的輸出都會存到/var/log/messages這個文件中,你可以根據它來判斷哪些進程被執行了。
啟動設備

udev進程用于動態管理設備的配置,這個進程監視和管理即插即用設備。一旦這些設備生效,存在于/etc/udev/rules.d/文件夾下的哪些腳本就會生效,調用不同的應用程序。
shell啟動腳本

每當你登入登出系統,或者是啟動了一個新的shell之后,都會執行配置腳本,每一個腳本都會啟動進程。對于筆者使用的ubuntu而言,默認的shell是bash,相應的配置腳本如下:

/etc/PRofile:每次登錄shel都會執行,全局配置文件
$HOME/.bash_profile:基于用戶自定義,每一個用戶都可以有自己的登錄腳本
/etc/bash.bashrc:交互式非登錄全局配置腳本,這個文件在.bashrc中會調用
$HOME/.bashrc:交互式非登錄用戶自定義的配置腳本,也是我們大多數時候需要修改的文件
/etc/bash.logout:不一定存在,如果存在的話,每次用戶登出時調用它
$HOME/.bash_logout:同上,只不過是用戶自定義的

我們可以注意到,上面這些腳本大致可以分為兩類,一類是用于登入登出的,一類是交互式。它們有什么區別么?簡單得說,每當你登入你的系統時,登入腳本和交互式腳本都會執行。而當你打開一個終端窗口時,只有交互式腳本才會被執行。
桌面腳本

linux喊了一萬年的要易用,要占領桌面系統,簡單說來,就是希望有一個漂亮易用的圖形界面。大多數人的大多數應用還是基于圖形界面的,因此,除了上面介紹的shell腳本,我們還應該關注一下圖形界面腳本。

在啟動圖形界面的時候,首先會運行/etc/X11/xinit/xinitrc, /etc/X11/Xsession和/etc/X11/xinit/xserverrc這三個腳本。它們會設置相應的環境變量,并在最開始啟動時運行應用程序。在X-Windows啟動完畢之后,就是Gnome的啟動,它會調用很多程序,產生很多進程,也就是類似于Windwos下的開機自啟動程序。到底是哪些進程呢?我們可以從存放系統級別啟動腳本的/etc/X11/gdm/目錄,用于用戶自定義啟動程序的$HOME/.gnomerc文件,或者通過系統>首選項>會話菜單來查看:

screeshot(點擊縮放)

好,問題來了。既然有這么多的地方都能進行開機自啟動程序的添加,難道它們都是完全一樣的么?這樣有什么意義呢?

恩,它們當然不是完全一樣的,而是各司其職。

如果你希望自啟動程序是作用于使用X-Windwos的所有人,那么你要修改的地方就是/etc/X11/Xsession,或者把腳本放置到 /etc/X11/Xsession.d/目錄下。如果僅僅是希望對你自己使用X-Windwos時生效,則修改$HOME/.xsession即可。

如果你希望自啟動程序是作用于使用Gnome的所有人,那么你要修改的地方就是 /etc/X11/gdm/PostSession/Default,它會僅僅對Gnome使用者起作用,而不是KDE使用者或者其他。或者把腳本放置到 /etc/X11/Xsession.d/目錄下。如果僅僅是希望對你自己使用Gnome時生效,則修改$HOME/.gnomerc即可。

小知識:Gnome和X-Windows的區別?
X-Windows是圖形界面底層,提供的功能是在屏幕上構造方塊(窗口),然后畫出里面的元素,但不提供交互式操作。gnome,kde這些都是基于X -Windows的不同風格的界面,屬于桌面環境。怎么理解這個桌面環境呢?基本的意思是指“ Mac OS 和 Windows的圖形界面有,而X沒有卻應該有的東西”。通常是一組有著共同外觀和操作感的應用程序,和程序庫,以及創建新的應用程序的方法。事實上你可以同時有兩個文件管理器,兩個面板,等等,并不沖突,因為它們都是屬于應用。

桌面應用

插入光盤,就會自動彈出文件瀏覽器,插入數碼相機,就會自動彈出照片導入程序,等等。這些應用是怎么實現的?如何禁止程序的自動執行?如何自定義在即插即用設備被認出以后的啟動程序?
答案就在 系統>首選項>可移動驅動器和介質 里。打開它,你就明白怎么回事了,這東西實在太簡單,我就不多說了。只有一點補充的,就是如果你要使用一款新的即插即用設備,而這種設備在可移動驅動器和介質選項中沒有,那么此時你就必須求助于udev了。至于udev的具體知識,講起來又是一篇文章,所以就不講了,還是那句話,放google~~^_^。
評估資源

剛才我們一直再說資源資源,當然,系統資源的使用情況直接決定了你系統當前的性能。那么,我們如何才能對自己系統的性能做一個基礎評估呢?在評估之前,我們需要對資源做一個更加詳細的解釋。所謂的資源,都是指進程所能使用的資源,包括了CPU處理能力,磁盤空間,磁盤I/O,RAM使用情況,顯存使用情況,網絡流量等。而這些資源的當前使用狀態,我們都是有辦法自己獲取的。
系統監視器和proc

正如大多數linuxer所知道的那樣,/proc掛載了一個虛擬文件系統,專門用于列出當前系統資源情況和正在運行的進程。在這里,所有的東西都是動態的,隨時可能改變的。最關鍵的是,/proc目錄下有很多以數字命名的文件夾,這些文件夾都對應了某一個響應PID的進程,內含進程的很多信息,包括使用命令,運行環境等。還有一些不是以數字命名的文件夾,那是設備驅動和內核的情況,例如,cpuinfo這個文件就提供了系統中cpu的相關信息。

當然,你可能覺得從這里面獲取系統資源信息實在太麻煩了,你會抱怨,拜托,我僅僅是初學者,有沒有直觀的辦法?sure!剛才我們說的CPU處理能力,磁盤可使用空間,內存情況,網絡情況,你統統都可以從系統監視器中看到。監視器以曲線圖的形式把情況呈現在你的面前,你可以根據它評估系統的運行是否良好,有沒有異常的發生。

screeshot-1(點擊縮放)
其它

那么,監視器就是萬能的?no,至少顯存和磁盤I/O的情況它就無法呈現給你。在實際使用中,可能會發生你的系統中有好幾個磁盤,但某個磁盤的 I/O通道堵塞會導致系統性能下降的現象。有什么辦法來確定是哪個通道在搞鬼呢?這里,iostat就可以幫助我們了。這是一個小的,評估I/O性能的軟件,通過sudo apt-get install sysstat來獲得它。安裝完后直接輸入iostat命令,就會顯示:

avg-cpu: %user %nice %system %iowait %steal %idle
7.18 0.08 3.58 2.34 0.00 86.83

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 16.63 0.19 0.16 1046 877
sdb 0.01 0.00 0.00 0 0

包括基本CPU負荷以及I/O情況。我機器上磁盤數量較少,所以結果比較少。好了,光知道這些數據是沒用的,我們需要做的是根據這些數據來分析系統負荷。我們假設現在sdb設備數據量不正常,好,接下來就用mount命令來看看,是哪個文件掛載到sda下的,得出文件路徑名后,用lsof來查看這個目錄下打開了哪些文件,哪些進程,以及相關信息。這樣,就能有的放矢得來尋找到讓你磁盤I/O情況異常的東西。

之后談談顯存的情況讀取。首先談談我們為什么要關注顯存,顯存的容量會直接影響你的顯示情況,例如,如果你只有一塊老的,256K顯存的顯卡,那么屏幕的顯示最高也就是支持到800×600,16位色深。如今,大部分的高端顯卡都擁有至少128MB的顯存,能夠輕松在32位色深的情況下上到1280×1024的分辨率。更多的顯存同樣對游戲以及桌面的逼真度有益,因為可以由顯存的一部分來保持主畫面的顯示,其它空余下來的顯存就可以用來體現各種層面的仿真元素。我們可以通過lspci –v 命令來顯示所有PCI卡,包括顯卡的存儲關聯情況。這個命令有什么用呢?當你遇到硬件問題,比如缺乏關鍵的硬件環境支持時,可以用這個命令來診斷到底是什么設備出了問題。這個命令在我這里奏效,但我不保證在所有的機器上都能奏效。在顯示的情況中找VGA這一欄,可以看到顯示信息如下:

01:00.0 VGA compatible controller: ATI Technologies Inc RV370 [Sapphire X550 Silent] (prog-if 00 [VGA])
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at 20000000 (32-bit, prefetchable) [size=256M]
I/O ports at 2000 [size=256]
Memory at 30110000 (32-bit, non-prefetchable) [size=64K]
Expansion ROM at 30120000 [disabled] [size=128K]
Capabilities:

從這里,我們就可以看出我的顯卡是256M顯存。
風雷的技術天地


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品欧美一区二区精品久久 | 在线观看第一区 | 国产精品久久久久久久久久尿 | 免费的性生活视频 | 日韩美香港a一级毛片 | 99国产精品自拍 | 欧美乱淫 | caoporn国产一区二区 | 国产99久久久久 | 中文字幕在线视频网站 | 久久精品一区二区三区不卡牛牛 | 久久精品日产高清版的功能介绍 | 12av毛片| 欧美精品一区二区三区四区 | 国产在线欧美日韩 | 国产成人在线免费看 | 免费人成年短视频在线观看网站 | 成人黄色小视频网站 | 牛牛a级毛片在线播放 | 失禁高潮抽搐喷水h | av免费在线观看不卡 | 亚洲国产精品高潮呻吟久久 | 亚洲成年人免费网站 | 人人舔人人舔 | 一级毛片手机在线观看 | 日本不卡视频在线观看 | 一级免费在线视频 | 国产一级毛片高清视频完整版 | 毛片免费在线 | 国产精品毛片va一区二区三区 | av在线久草 | 特片网久久 | 日韩黄在线 | 欧美雌雄另类xxxxx | 欧美一级不卡视频 | 午夜精品毛片 | chinese18 xxxx videos| 在线成人免费观看 | 在线播放中文 | 日韩一级免费毛片 | 污片视频在线观看 |