91av免费观看_日韩视频在线免费看_日本xxxx色视频在线观看免费_伊人222综合网图片_国产二区三区在线_91麻豆麻豆

IT之道-艾銻知道

您當前位置: 主頁 > 資訊動態 > IT知識庫 >

服務器維護Linux 命令 高效的使用 top


2020-05-25 17:39 作者:艾銻無限 瀏覽量:

服務器維護Linux 命令 高效的使用 top

 
如何做好服務器維護?北京艾銻無限科技與你談談IT人員必須知道的服務器維護信息
 
服務器維護小知識對桌面用戶來說,監視系統資源使用是一項重要的工作。通過這項工作,我們可以找到系統瓶頸所在,針對性的進行系統優化,識別內存泄露等。問題是,我們應該用什么軟件,以及如果針對我們的需求使用它。
在眾多備選的監測工具中,多數人使用“top”(procps 包的一部分)。Top 提供了幾乎可以說是所有的我們所需要的系統資源使用監測,就在這一個軟件中。本文中的所有信息都是基于運行在 Linux 2.6.x 內核上的版本號為3.2.5的 procps 包。
在這里,我們假定 procps 已經安裝并運行在你的 Linux 系統中。這里無需你對 top 的使用經驗,但如果你嘗試去用一下,將更有利。
下面是一些挑戰:
A.交互還是批處理模式?
默認情況下,Top 被調用時使用交互模式。在此模式下,Top 無限期運行,并可以通過按鍵重新定義 Top 的運行方式。但是,有時你需要對 Top 的輸出進行后續處理,但這在此模式下難以實現。解決方法?使用批處理模式。
1   $ top -b  
你將獲得類似下面的輸出: 

top - 15:22:45 up 4:19, 5 users, load average: 0.00, 0.03, 0.00 Tasks: 60 total, 1 running, 59 sleeping, 0 stopped, 0 zombie Cpu(s): 3.8% us, 2.9% sy, 0.0% ni, 89.6% id, 3.3% wa, 0.4% hi, 0.0% si Mem: 515896k total, 495572k used, 20324k free, 13936k buffers Swap: 909676k total, 4k used, 909672k free, 377608k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 16 0 1544 476 404 S 0.0 0.1 0:01.35 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0 3 root 10 -5 0 0 0 S 0.0 0.0 0:00.11 events/0
哈,等等,它是不斷重復運行的,同交互模式一樣。不用擔心,你可以使用 -n 限制重復數量。所以,如果你希望獲得一次性結果,鍵入: 

$ top -b -n 1
服務器維護小知識這一模式的真正優勢在于你可以很容易的與 at 或 cron 命令結合。它們的結合,使得 Top 可以在特定時間對資源使用狀態進行快照。例如,使用 at ,我們可以設定 top 在一分鐘之后運行。
$ cat ./test.at TERM=linux top -b -n 1 >/tmp/top-report.txt $ at -f ./test.at now+1minutes
細心的讀者可能會問“在創建新任務時,為什么我需要在調用 Top 之前設置環境變量 TERM?”。答案是,Top 運行時需要此變量,但“at”在定時調用時并不會保留它。同上面那樣簡單的設置可以確保 Top 正常運行。
B.如何監控制定進程?
有時,我們只對幾個進程感興趣,可能只是全部進程中的4個或5個。例如,如果你想要監測進程標識(PID)為4360和4358的進程,你需要鍵入:
$ top -p 4360,4358

$ top -p 4360 -p 4358
看起來很簡單,只需要使用 -p 列出所有需要的 PID,并使用逗號間隔或簡單的多次使用 -p即可。
另一種可能是監測擁有特定用戶標識(UID)的進程。應對此需求,你可以使用 -u 或 -U 選項。假設用戶“johndoe”的 UID 為500,鍵入:
$ top -u johndoe
OR
$ top -u 500

$ top -U johndoe
結論是,你既可以純使用用戶名,也可使用數字 UID。“-u,-U?這兩者不同?”是的。同多數其它 GNU 工具一樣,選項是大小寫敏感的。-U 意味著 Top 將會搜索有效的、真實的、被保存的以及文件系統的 UID 進行匹配,而 -u 僅匹配有效的用戶id。要知道,每一個 *nix 進程在運行時都是用有效用戶標識(effective UID),而其中有些并不等同真實用戶標識。多數情況是,對類似文件系統權限或操作系統功能這項的有效用戶標識感興趣的人將會檢查它,而不是 UID。 
不同于 -p 僅用于命令行選項,-U 和 -u 都可以在交互模式中使用。同你猜測的一樣,鍵入‘U’或‘u’可以依據用戶名過濾進程。同樣的規則依然適用,‘u’為有效用戶標識,‘U’為 真實/有效/保存/文件系統用戶名。你將被要求鍵入用戶名或數字 UID。
C.快熟還是緩慢更新?
在回答這個問題之前,讓我們先簡單介紹一下,Top 是如何運行的。這里,Strace 能夠幫助你:
$ strace -o /tmp/trace.txt top -b -n 1
使用你偏愛的文本編輯器打開 /tmp/trace.txt。你怎么想?一次調用有太多的活要做了,反正我是這么想的。Top 在每次遍歷中必做的工作之一就是打開很多文件,并解析其內容,可以看看次數:
$ grep open( /tmp/hasil.txt | wc -l
舉例而言,我的 Linux 中,這個數量是304.仔細觀察就會發現,Top 遍歷 /proc 文件夾,以收集進程信息。/proc 本身是一個虛擬文件系統,意味著它并非存在于真實硬盤之中,而是由 Linux 內核憑空創建,保存在內存中的。在文件夾中,如/proc/2097(2097為 PID),Linux 內核將與之關聯的信息打印到此文件中,而這里就是 Top 的消息來源。
同時試一下:
$ time top -b -n 1
這樣你就能了解到 Top 單輪工作有多快了。在我的系統中,大約為0.5-0.6秒。看“real”字段,不是“user”或“system”字段,因為“real”字段反應了 Top 工作需要的總時間。
所以,有了這個認知之后,使用適度的更新間隔是明智的。基于文件系統訪問內存也是需要時間的。經驗法則是,對于多數用戶來說,1到3秒的間隔就足夠了。在命令行中使用-d,或在交互模式下按下“s”以設置。你可以使用類似2.5,4.1這樣的小樹。
什么時候我們需要快于1秒的更新?
時間段內需要更多的樣本。應對這點要求,最好使用批處理模式,并將標準輸出重定向到文件中,以便更好的分析。
你并不在意 Top 消耗的額外CPU負荷。是的,雖然它很小,它依然需要負荷。如果你的 Linux 系統相對比較空閑,隨意使用短間隔,如果不是,最好為重要的任務保留你的 CPU 時間。
一個減少 Top 工作的辦法是只監測特定的幾個 PID。這樣,Top 無需遍歷 /proc 下所有的子文件夾。用戶名過濾呢?并不會變得更好。用戶名過濾會給Top帶來額外工作量,因此將其與短間隔聯合將會增加 CPU 負荷。
當然,當你需要強制更新時,按下 Space 鍵,Top 將會刷新統計。
D.我們需要的字段
默認時,Top 啟動后會顯示下面的任務屬性:
字段 描述
PID :   進程 ID  
USER :   有效用戶 ID  
PR :   動態優先值  
NI :   良好值,也被稱為基本優先級  
VIRT :   任務虛擬大小。包括進程的可執行二進制文件大小,數據區大小以及所有已加載的共享庫的大小。  
RES :   目前任務內存消耗。存入交換分區的部分并不包含。  
SHR :   一些內存區域可能由兩個或多個任務分享,此字段反應這些共享區域。例如共享庫以及 Sysv 共享內存。  
S :   任務狀態  
%CPU :   Top 屏幕更新時專用于運行任務的CPU 時間百分比。  
%MEM :   任務當前內存消耗的百分比  
TIME+ :   在任務啟動后消耗的總CPU時間。"+" sign means it is displayed with hundreth of a second granularity. 默認時,TIME/TIME+ 不會計入已經關閉的任務子進程。  
COMMAND :  
顯示程序名。
 
php100.com      


不止這些。下面我介紹一些你可能會用到的列:
列 描述
服務器維護小知識nFLT ('u'鍵)  
進程啟動以來重大頁面錯誤(page fault)的個數。準確地說,頁面錯誤是由于進程訪問它的地址空間內不存在的頁面引起的。“重大”的頁面錯誤是指內核需要訪問磁盤來使得該頁面有效。相反,小型頁面錯誤是指內核只需要在內存中分配頁面而不用讀磁盤。
例如,假設程序ABC的大小為8KB,頁面大小為4KB。當程序讀進內存的時候,發生了兩次重大的頁面錯誤(2*4KB)。程序本身分配了8KB空間當作臨時數據。因此,還會有兩次小型頁面錯誤。
nFLT過高可能意味著:
進程從磁盤讀取大量資源。The task is aggressively load some portions of its executable or library from the disk.
進程訪問了一個已經交換到磁盤的頁面。
 
當進程第一次運行時,看到大量重大頁面錯誤很正常。下次運行的時候,由于緩存已經分配好了,你很可能看到"0"次或者很小的 nFLT。但是,如果一個程序頻繁地觸發重大頁面錯誤,很有可能是你目前安裝的內存不夠那個程序使用。
 
服務器維護小知識nDRT ('v'鍵)  
上次頁面寫入磁盤以來,臟頁面的數目。
什么是臟頁面?先看一點背景知識。大家都知道,Linux使用了緩存系統,所以從磁盤讀取的數據也會被緩存到內存中。這樣做的優點是,后續的對這個磁盤塊的讀操作可以直接從內存中取數據,因而速度更快。
但這也是有代價的。如果緩沖區的內容被修改了,那么就需要進行同步。因此,被更改的緩沖區(臟頁面)必需寫回到磁盤中。同步失敗則可能導致磁盤上的數據不一致。
在負載不重的系統中,nDRT 通常小于10(大約估計)或者為0。如果你的系統通常大于10,則有可能:
進程正在往磁盤寫入大量數據。磁盤I/O經常跟不上緩沖區的速度。
磁盤I/O擁塞,因此即使進程修改了很小部分文件,也必需等待一段時間才能完成同步。擁塞出現在很多進程同時訪問磁盤而緩存命中率低的情況下(譯者注:FTP服務的典型情況)。
現在的話,(1) 不太可能出現,因為I/O速度越來越快,需要更少的CPU(DMA技術的出現)。所以 (2) 出現的概率更高。
注意:在 2.6.x 內核中, 不知道為什么,這個列的值總是0。
 
服務器維護小知識P ('j'鍵)  
上次使用的CPU。這個列只在SMP環境中有意義。這里的SMP指超線程,多核或者多CPU架構。如果你只有一個CPU(不是多核,沒有超線程),這個列總是顯示0。
在SMP系統中,即使這個列有幾次改變,也不要吃驚。這意味著,Linux 內核嘗試將你的進程移到另一個負載更少的CPU。
 
服務器維護小知識CODE ('r'鍵) 和 DATA ('s'鍵)  
CODE 只是反映了你程序代碼的大小,DATA反映了你數據段(棧,堆,變量,不包含共享庫) 的大小。單位都是KB。
DATA可以顯示你的程序分配了多少內存。有時,也可以用來協助分析內存泄漏。當然,你需要更好的工具,如使用 valgrind 來查看每次的內存分配。如果DATA不斷增長,則很有可能出現了內存泄漏。
注意:DATA, CODE, SHR, SWAP, VIRT, RES 都是使用頁面大小(Intel架構上為4KB)來衡量。只讀數據段也包含在CODE的大小中,因而有時候CODE比實現的段要大。
 
服務器維護小知識SWAP ('p'鍵)  
已經進行交換的進程內存映像大小。這個列有時很讓人疑惑:
邏輯上,你可能期望這個列顯示你的程序實際上是完全進行交換,還是部分交換了,交換了多少。但是事實上不是。即使"Swap used" 列顯示為0,你仍然可以很吃驚地發現所有進程的SWAP列都大于0。到底是為什么呢?
這是由于 top 命令使用如下的計算公式:
VIRT = SWAP + RES or equal SWAP = VIRT - RES
前面說過,VIRT 包含了進程的地址空間里面的所有東西:內存中的,已經進行交換的,尚未從磁盤讀取的。RES 代表了進程占用的全部內存大小。所以,這里的SWAP代表了已經進行交換的全部數據,以及尚未從磁盤讀取的數據。不要被SWAP這個名字迷惑了,它代表的不只是已經交換的數據。
服務器維護小知識要顯示以上的列,在交互模式下按 'f' 鍵,然后再按相應的鍵。按一下顯示指定的列,再按一下隱藏該列。要確定當前顯示的是哪些列,只需看第一行的字母(在"Current Fields"的右邊)。大寫字母表示顯示了該列,小寫表示隱藏。你選好以后,按回車即可。
排序使用了類似的方法。按 'O' (大寫),然后再按相應的鍵。即使記不住那些按鍵也沒關系,top 會顯示出來。新的排序鍵將標上星號,相應的字母會變成大寫,很直觀。選好以后,記得按回車。
E.多視圖比單個視圖更好嗎?
在不同的情況下,有時候我們想監視不同的系統屬性。例如,你想同時監控CPU的百分比和CPU被所有任務消耗的時間。在另一段時間,你想監控常駐內存和所有任務的總頁面故障。快速按‘F’鍵然后切換界面?我想這也太不明智了吧。
為什么不試試多視圖窗口模式呢?按‘A’(大寫)切換到多窗口界面。默認的,你將會看到4個不同的系列的字段組。每個字段組有默認的標簽/名稱:
第一字段組: Def
第二字段組: Job
第三字段組: Mem
第四字段組: Usr
第一字段組就是你在單一視圖窗口所常見的組,而其余的組會被隱藏。內置多視圖窗口模式,所有可用的窗口通過按‘a’或者‘w’循環。注意,切換到其他窗口時會改變活動窗口(也稱為當前窗口)。假如你不確定哪一個是活動窗口的話,只需要看一下top展示的第一行(在當前時間字段的左邊)。另一個改變活動窗口的方法是通過按‘G’緊跟著輸入數字(1到4)。
活動窗口是針對用戶輸入的,因此在開始干活之前確定選好了你偏好的界面。然后,你可以在單一窗口模式下愛干嘛干嘛。在這種情況你一般想自定義字段展示,那么你只需要按‘f’然后開始自定義。
服務器維護小知識假如你認為第四字段組太多的話,你只需要切換到字段組然后按‘-’隱藏。請注意,即使你隱藏了當前的字段組,那并不以意味著你同時改變了活動組。再次按‘-’的話,當前組就可見了。
如果你想操作多視圖窗口模式,再次按‘A’鍵。那樣也將使得活動組成為了單一視圖窗口模式的新的字段組。
F. "我的Linux主機上怎么會只有很少的空閑內存?"
有同樣的問題? 不管你在主板上增加多少內存,你都會很快發現空閑內存減少的非常迅速. 空閑內存算錯了? 不!
在回答這個之前, 先查看一下top命令頂部顯示的內存概要 (有可能你需要按 'm'來顯示出來). 在這里,你可以看到兩個區域: 緩沖(buffers)和緩存(cached)。 "緩沖(Buffers)" 代表有多少內存用來緩存磁盤塊 "緩存(Cached)" 有一點類似 "緩沖(Buffers)", 只是僅僅從文件讀取緩存頁面. 想透徹了解這部分,建議讀一下Linux內核的書比如Robert M.Love寫的《Linux Kernel Development》。
這足夠了解緩沖(buffers)和緩存(cached)代表系統緩存. 他們會根據linux內核機制動態增加或減少。
除去被緩存的消耗,程序和代碼同樣要占據RAM. 所以,最終空閑內存顯示的是RAM中不被緩存和程序/代碼占用的部分 一般來說,你也可以考慮緩存區域為另一部分“空閑”RAM,如果程序需要更多內存它會減少
從進程的角度來看,你可能想知道哪個區域代表真實的內存消耗,VIRT(virtual memory usage )區域? 當然不是! 回顧一下,這個區域代表了進程地址空間里一切,包括相關的庫。閱讀top命令的源代碼和proc.txt (在內核代碼樹中的Documentation/filesystem 文件夾內), 我的結論是RSS字段是進程內存消耗的最好的描述.我說“最好的”是因為你可以考慮它是近似而不是所有時間100%準確。
G.使用數個保存的配置
希望保存多個不同的配置文件,以便于輕松的切換預配置視圖?只需要創建一個 Top 二進制文件的軟連接到你喜歡的名字:
# ln -s /usr/bin/top /usr/bin/top-a
然后運行新的“top-a”。調整完畢后鍵入‘W’保存配置,它將被保存到 ~/.top-arc(格式為你的 Top 別名+rc)。
這樣,運行原來的 Top 可以使用之前的視圖,而 top-a 則使用第二個,依次類推。
H.總結
服務器維護小知識有很多竅門使用top會更加高效。關鍵是知道你真正需要的是什么和可能的對Linux低級別原理的一般理解。統計并不總是正確,但至少有助于總體衡量。所有這些數字收集自 /proc,因此首先確保它已掛載!
 
IT運維  我們選擇北京艾銻無限
以上文章由北京艾銻無限科技發展有限公司整理

相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 国产亚洲精品久久www | 国产真实乱对白精彩久久 | 久久WWW成人看片免费不卡 | 97国产大学生情侣在线视频 | 99riav国产精品视频 | 中文字幕日韩精品一区 | 亚洲无亚洲人成网站77777 | 国产在线无码视频一区二区三区 | 未满十八勿入AV网免费 | 黑人刚破完处就三P | 亚洲欧美成人精品 | 成人wwxx免费观看 | AV导航第一福利网 | 激情射精爽到偷偷C视频无码 | 色视频线观看在线网站 | 大地资源网高清在线观看 | 丰满熟女大屁股水多多 | 日本新janpanese乱熟 | 国产精品线在线精品 | 超碰CAO草棚GAO进入 | 97热视频在线| 国产成人乱色伦区 | 巜被社长侵犯的人2中文在线 | 老司机福利影院在线观看 | 一本一道AV无码中文字幕﹣百度 | 精品国产一区二区三区AV | 免费人成网站视频在线观看 | 在线免费观看日韩欧美 | 18禁美女裸体免费网站 | 美国黄色小视频 | 国产极品车模吞精高潮呻吟 | 97久久精品人人槡人妻人人玩 | 哦┅┅快┅┅用力啊┅┅在线观看 | a级片网站 | 成人免费网站 | 国产999精品视频 | 成年免费A级毛片无码 | 1000部又爽又黄无遮挡的视频 | 欧美bbwbbwbbwbbw18| 免费国产线观看免费观看 | 国内精品久久久久影院古代 |