若是你想知道你的服務器正在作幹什麼,你就須要瞭解一些基本的命令,一旦你精通了這些命令,那你就是一個專業的 Linux 系統管理員。java
iostat命令用來顯示存儲系統的詳細信息,一般用它來監控磁盤 I/O 的狀況。要特別注意 iostat 統計結果中的 %iowait
值,太大了代表你的系統存儲系統性能低下。linux
命令: iostat -m -x 1 1000ios
能夠觀察對應的CPU中的%iowait數據
,除此以外iostat還提供了一些更詳細的I/O狀態數據,好比比較重要的有:nginx
Meminfo 可以讓你獲取內存的詳細信息,你可使用 cat 和 grep 命令來顯示 meminfo 信息:web
另外你可使用 free
命令來顯示動態的內存使用信息,free 只是給你大概的內存信息,而 meminfo
提供的信息更加詳細。ubuntu
mpstat是MultiProcessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。
在多CPUs系統裏,其不但能查看全部CPU的平均情況信息,並且可以查看特定CPU的信息。windows
mpstat的語法以下:mpstat [-P {|ALL}] [internal [count]]
,參數的含義以下:安全
命令:mpstat -P ALL 1 1000ruby
CPU 處理器IDbash
user 在internal時間段裏,用戶態的CPU時間(%),不包含 nice值爲負 進程 (usr/total)*100
nice 在internal時間段裏,nice值爲負進程的CPU時間(%) (nice/total)*100
system 在internal時間段裏,核心時間(%) (system/total)*100
iowait 在internal時間段裏,硬盤IO等待時間(%) (iowait/total)*100
irq 在internal時間段裏,硬中斷時間(%) (irq/total)*100
soft 在internal時間段裏,軟中斷時間(%) (softirq/total)*100
idle 在internal時間段裏,CPU除去等待磁盤IO操做外的由於任何緣由而空閒的時間閒置時間(%)(idle/total)*100
intr/s 在internal時間段裏,每秒CPU接收的中斷的次數intr/total)*100
CPU總的工做時間=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示當前值,_pre表示interval時間前的值。上表中的全部值可取到兩位小數點。
%iowait
列,CPU等待I/O操做所花費的時間。這個值持續很高一般多是I/O瓶頸所致使的。經過這個參數能夠比較直觀的看出當前的I/O操做是否存在瓶頸。
Netstat 和 ps 命令相似,是 Linux 管理員基本上天天都會用的工具,它顯示了大量跟網絡相關的信息,例如 socket 的使用、路由、接口、協議、網絡等等,下面是一些經常使用的參數:
Nmon, 是 Nigel's Monitor 的縮寫,是一個使用很廣泛的開源工具,用以監控 Linux 系統的性能。Nmon 監控多個子系統的性能數據,例如處理器的使用率、內存使用率、隊列、磁盤I/O統計、網絡I/O統計、內存頁處理和進程信息。Nmon 也提供了一個圖形化的工具:
要運行 nmon,你能夠在命令行中啓動它,而後選擇要監控的子系統,這些子系統都對應有一個快捷鍵,例如輸入 c 可查看 CPU 信息,m用於查看內存,d用來查看磁盤信息
等,你也能夠使用 -f 命令將 nmon 的執行結果保存到一個 CSV 文件中,便於往後分析
。-----在每日的監控工做中,我發現 nmon 是我最經常使用的工具。
pmap 命令用來報告每一個進程佔用內存的詳細狀況
,可用來看是否有進程超支了,該命令須要進程 id 做爲參數
。
ps 告訴你每一個進程佔用的內存和 CPU 處理時間,而 pstree 顯示的信息沒那麼詳細,但它以樹形結構顯示進程之間的依賴關係,包括子進程信息。
一旦發現某個進程有問題,你可使用 kill 來殺掉它。
這個命令的做用,主要是能夠獲取到對應一個進程下的線程的一些信息。 好比你想分析一下一個java進程的一些運行瓶頸點,能夠經過該命令找到全部當前Thread的佔用CPU的時間,也就是這裏的最後一列。
TID : 6603
,所佔用的TIME時間最高。經過
printf "%x\n" 6603 首先轉化成16進制
, 繼續經過
jstack命令dump出當前的jvm進程的堆棧信息
。 經過
Grep命令便可以查到對應16進制的線程id信息
,很快就能夠找到對應最耗CPU的代碼塊在哪。
簡單的解釋下,jstack下這一串線程信息內容:"qtp812487918-32" prio=10 tid=0x00007f69b4430000 nid=0x19cb waiting on condition [0x00007f69a5b86000]
命令: pidstat -p pid -u -d -t -w -h 1 1000
sudo apt-get install sysstat
進行安裝。
監視進程的性能狀況
,也能夠
監視線程的性能狀況
。
命令:dstat -y --tcp 1 1000
經過dstat --tcp能夠比較方便的看到當前的tcp的各類狀態,不須要每次netstat -nat去看
tcpdump 是一個簡單、可靠的網絡監控工具,用來作基本的協議分析,看看那些進程在使用網絡以及如何使用網絡。固然,若是你要獲取跟詳細的信息,你應該使用 Wireshark。
top 命令顯示當前的活動進程,默認它是按消耗 CPU 的厲害程度進行排序
,每5秒鐘刷新一次列表,你也能夠選擇不一樣的排序方式,例如 m 是按內存佔用方式進行排序的快捷鍵。
命令:top -Hp pid
能夠實時的跟蹤並獲取指定進程中最耗cpu的線程。再用ps命令中提到的jstack方法提取到對應的線程堆棧信息。
默認狀況下,Top 被調用時使用交互模式。
在此模式下,Top 無限期運行,並能夠經過按鍵從新定義 Top 的運行方式。可是,有時你須要對 Top 的輸出進行後續處理,但這在此模式下難以實現。解決方法?使用批處理模式。
命令:top -b
哈,等等,它是不斷重複運行的,同交互模式同樣。不用擔憂,你可使用 -n 限制重複數量。因此,若是你但願得到一次性結果,鍵入:
命令:top -b -n 1
這一模式的真正優點在於你能夠很容易的與 at 或 cron 命令結合
。它們的結合,使得 Top 能夠在特定時間對資源使用狀態進行快照。例如,使用 at ,咱們能夠設定 top 在一分鐘以後運行。
細心的讀者可能會問「在建立新任務時,爲何我須要在調用 Top 以前設置環境變量 TERM?」。答案是,Top 運行時須要此變量,但「at」在定時調用時並不會保留它。同上面那樣簡單的設置能夠確保 Top 正常運行。
如何監控制定進程
有時,咱們只對幾個進程感興趣,可能只是所有進程中的4個或5個。例如,若是你想要監測進程標識(PID)爲4360和4358的進程,你須要鍵入:top -p 19647,10065
看起來很簡單,只須要使用 -p 列出全部須要的 PID
,並使用逗號間隔或簡單的屢次使用 -p便可。
另外一種多是監測擁有特定用戶標識(UID)的進程
。應對此需求,你可使用 -u 或 -U 選項。假設用戶「johndoe」的 UID 爲500,鍵入:top -u taomk
或:top -U taomk
結論是,你既能夠純使用用戶名,也可以使用數字 UID。「-u,-U?這二者不一樣?」是的。同多數其它 GNU 工具同樣,選項是大小寫敏感的。-U 意味着 Top 將會搜索有效的、真實的、被保存的以及文件系統的 UID 進行匹配,而 -u 僅匹配有效的用戶id。
要知道,每個 Linux 進程在運行時都是用有效用戶標識(effective UID),而其中有些並不等同真實用戶標識。多數狀況是,對相似文件系統權限或操做系統功能這項的有效用戶標識感興趣的人將會檢查它,而不是 UID。
不一樣於 -p 僅用於命令行選項,-U 和 -u 均可以在交互模式中使用。
同你猜想的同樣,鍵入‘U’或‘u’能夠依據用戶名過濾進程。一樣的規則依然適用,‘u’爲有效用戶標識,‘U’爲 真實/有效/保存/文件系統用戶名
。你將被要求鍵入用戶名或數字 UID。
sar命令也是Linux系統中重要的性能監測工具之一,它能夠週期性地對內存和CPU使用狀況進行採樣
。
命令:sar -u 1 3 查看CPU使用率
命令:sar -r 1 3 查看內存使用率
命令:sar -b 1 3 查看I/O使用率
uptime 命令告訴你這臺服務器從開機啓動到如今已經運行了多長時間了。
同時也包含了從啓動到如今服務器的平均負載狀況:
你能夠使用 vmstat 來監控虛擬內存
,通常 Linux 上的開發者喜歡使用虛擬內存來得到最佳的存儲性能。該命令報告關於內核線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息。由 vmstat 命令生成的報告能夠用於平衡系統負載活動。系統範圍內的這些統計信息(全部的處理器中)都計算出以百分比表示的平均值,或者計算其總和。
vmstat:能夠查看內存,交互區分,I/O操做,上下文切換,時鐘中斷以及CPU的使用狀況。
命令:vmstat 1 3
命令:uname -a
命令:uname -r
查看系統發行版信息###
命令:cat /etc/issue
命令:cat /proc/version
命令:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看系統CPU物理核數###
命令:cat /proc/cpuinfo | grep physical | uniq -c
命令:grep "model name" /proc/cpuinfo
命令:getconf LONG_BIT
說明:當前CPU運行在64bit模式下
命令:cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
說明:結果大於0, 支持64bit計算. lm指long mode, 支持lm則是64bit
查看物理CPU的個數:cat /proc/cpuinfo |grep "physical id"|sort |uniq| wc -l
查看邏輯CPU的個數:cat /proc/cpuinfo |grep "processor"|wc -l
查看CPU是幾核:cat /proc/cpuinfo |grep "cores"|uniq
查看CPU的主頻:cat /proc/cpuinfo |grep MHz|uniq
查看當前系統時間:date
修改當前系統時間:date -s "2009-07-28 15:32:00"
列出當前目錄的文件樹:
find . -print 2 > /dev/null | awk '!/\.$/ {for (i=1;i<NF;i++){d=length($i);if ( d < 5 && i != 1 )d=5;printf("%"d"s","|")}print "---"$NF}' FS='/'
查看用戶所在哪些終端:who | awk '{print $1 "\t" $6}'
uname -a:查看內核/操做系統/CPU信息
head -n 1 /etc/issue:查看操做系統版本
cat /proc/cpuinfo:查看CPU信息
hostname:查看計算機名
lspci -tv:列出全部PCI設備
lsusb -tv:列出全部USB設備
lsmod:列出加載的內核模塊
**env **:查看環境變量資源free -m:查看內存使用量和交換區使用量
df -h:查看各分區使用狀況
du -sh <目錄名>:查看指定目錄的大小
grep MemTotal /proc/meminfo:查看內存總量
grep MemFree /proc/meminfo:查看空閒內存量
uptime:查看系統運行時間、用戶數、負載
cat /proc/loadavg:查看系統負載磁盤和分區mount | column -t:查看掛接的分區狀態
fdisk -l:查看全部分區
swapon -s:查看全部交換分區
hdparm -i /dev/hda:查看磁盤參數(僅適用於IDE設備)
dmesg | grep IDE:查看啓動時IDE設備檢測情況網絡ifconfig:查看全部網絡接口的屬性
iptables -L:查看防火牆設置
**route -n **:查看路由表
netstat -lntp:查看全部監聽端口
netstat -antp:查看全部已經創建的鏈接
**netstat -s **:查看網絡統計信息進程ps -ef:查看全部進程
top:實時顯示進程狀態用戶
w:查看活動用戶
id <用戶名>:查看指定用戶信息
last:查看用戶登陸日誌
cut -d: -f1 /etc/passwd:查看系統全部用戶
cut -d: -f1 /etc/group:查看系統全部組
crontab -l:查看當前用戶的計劃任務服務
chkconfig --list:列出全部系統服務
chkconfig --list | grep on:列出全部啓動的系統服務程序rpm -qa:查看全部安裝的軟件包
shutdown命令安全地將系統關機。
有些用戶會使用直接斷掉電源的方式來關閉linux,這是十分危險的。由於linux與windows不一樣,其後臺運行着許多進程,因此強制關機可能會致使進程的數據丟失
﹐使系統處於不穩定的狀態﹐甚至在有的系統中會損壞硬件設備。
而在系統關機前使用shutdown命令﹐系統管理員會通知全部登陸的用戶系統將要關閉。而且login指令會被凍結﹐即新的用戶不能再登陸。直接關機或者延遲必定的時間才關機都是可能的﹐還可能重啓。這是由全部進程〔process〕都會收到系統所送達的信號〔signal〕決定的。
這讓像vi之類的程序有時間儲存目前正在編輯的文檔﹐而像處理郵件〔mail〕和新聞〔news〕的程序則能夠正常地離開等等。
shutdown執行的工做是送信號〔signal〕給init程序﹐要求它改變runlevel。
Runlevel 0被用來停機〔halt〕﹐runlevel 6是用來從新激活〔reboot〕系統﹐而runlevel 1則是被用來讓系統進入管理工做能夠進行的狀態﹔這是預設的﹐假定沒有-h也沒有-r參數給shutdown。要想了解在停機〔halt〕或者從新開機〔reboot〕過程當中作了哪些動做﹐你能夠在這個文件/etc/inittab裏看到這些runlevels相關的資料。
shutdown 參數說明:
halt就是調用shutdown -h。
halt執行時﹐殺死應用進程﹐執行sync系統調用﹐文件系統寫操做完成後就會中止內核。
halt 參數說明:
reboot的工做過程差很少跟halt同樣﹐不過它是引起主機重啓﹐而halt是關機。它的參數與halt相差很少。
init是全部進程的祖先﹐它的進程號始終爲1
﹐因此發送TERM信號給init會終止全部的用戶進程﹑守護進程等。shutdown 就是使用這種機制。
init定義了8個運行級別(runlevel), init 0爲關機﹐init 1爲重啓。
關於init能夠長篇大論﹐這裏就再也不敘述。另外還有 telinit命令能夠改變init的運行級別﹐好比﹐telinit -i S可以使系統進入單用戶模式﹐而且得不到使用shutdown時的信息和等待時間。
「起初GNU/Linux系統中只有.tar.gz。用戶必須本身編譯他們想使用的每個程序。在Debian出現之後,人們認爲有必要在系統中添加一種機制用來管理安裝在計算機上的軟件包。人們將這套系統稱爲dpkg。至此着名的‘package’首次在GNU/Linux上出現。不久之後紅帽子也開始着手創建本身的包管理系統‘rpm’。
「GNU/Linux的創造者們很快又陷入了新的窘境。他們但願經過一種快捷、實用並且高效的方式來安裝軟件包。這些軟件包能夠自動處理相互之間的依賴關係,而且在升級過程當中維護他們的配置文件。Debian又一次充當了開路先鋒的角色。她獨創了APT(Advanced Packaging Tool)。這一工具後來被Conectiva 移植到紅帽子系統中用於對rpm包的管理。在其餘一些發行版中咱們也能看到她的身影。」
"同時,apt是一個很完整和先進的軟件包管理程序,使用它可讓你,又簡單,又準確的找到你要的的軟件包, 而且安裝或卸載都很簡潔。
它還可讓你的全部軟件都更新到最新狀態,並且也能夠用來對ubuntu進行升級。"
"apt是須要用命令來操做的軟件,不過如今也出現了不少有圖形的軟件,好比Synaptic, Kynaptic 和 Adept。"
wget是在Linux下開發的開放源代碼的軟件,做者是Hrvoje Niksic,後來被移植到包括Windows在內的各個平臺上。它有如下功能和特色:
wget http://soft.deepvps/web/nginx/nginx-0.8.0.tar.gz:下載遠程服務器上的文件到本身的服務器,連上傳都省了,服務器不是100M就是1000M的帶寬,下載一個2-3兆的MT還不是幾十秒的事;
wget -c http://soft.deepvps/web/nginx/nginx-0.8.0.tar.gz:繼續下載上次未下載完的文件;
1)下載整個http或者ftp站點:wget http://place.your.url/here
這個命令能夠將http://place.your.url/here 首頁下載下來
。使用-x會強制創建服務器上如出一轍的目錄,若是使用-nd參數,那麼服務器上下載的全部內容都會加到本地當前目錄。
2)遞歸下載 :wget -r http://place.your.url/here
這 個命令會按照遞歸的方法,下載服務器上全部的目錄和文件,實質就是下載整個網站
。這個命令必定要當心使用,由於在下載的時候,被下載網站指向的全部地址同 樣會被下載,所以,若是這個網站引用了其餘網站,那麼被引用的網站也會被下載下來!基於這個緣由,這個參數不經常使用。能夠用-l number參數來指定下載的層次。
例如只下載兩層,那麼使用-l 2。
3)製做鏡像站點,那麼可使用-m參數,例如:wget -m http://place.your.url/here
這時wget會自動判斷合適的參數來製做鏡像站點
。此時,wget會登陸到服務器上,讀入robots.txt並按robots.txt的規定來執行。
4)斷點續傳,例如:wget -c http://the.url.of/incomplete/file
當文件特別大或者網絡特別慢的時候,每每一個文件尚未下載完,鏈接就已經被切斷,此時就須要斷點續傳。wget的斷點續傳是自動的,只須要使用-c參數,使用斷點續傳要求服務器支持斷點續傳
。-t參數表示重試次數,例如須要重試100次,那麼就寫-t 100,若是設成-t 0,那麼表示無窮次重試,直到鏈接成功。-T參數表示超時等待時間,例如-T 120,表示等待120秒鏈接不上就算超時。
**5)批量下載,例如:wget -i download.txt **
若是有多個文件須要下載,那麼能夠生成一個文件,把每一個文件的URL寫一行,例如生成文件download.txt,而後用命令:wget -i download.txt 這樣就會把download.txt裏面列出的每一個URL都下載下來。(若是列的是文件就下載文件,若是列的是網站,那麼下載首頁)
6)選擇性的下載,例如:wget -m –reject=gif http://target.web.site/subdirectory
能夠指定讓wget只下載一類文件,或者不下載什麼文件。例如:wget -m –reject=gif http://target.web.site/subdirectory 表示下載http://target.web.site/subdirectory, 可是忽略gif文件。–accept=LIST 能夠接受的文件類型,–reject=LIST拒絕接受的文件類型。
7)密碼和認證
wget只能處理利用用戶名/密碼方式限制訪問的網站,能夠利用兩個參數:
對於須要證書作認證的網站,就只能利用其餘下載工具了,例如curl。
8)利用代理服務器進行下載
若是用戶的網絡須要通過代理服務器,那麼可讓wget經過代理服務器進行文件的下載。此時須要在當前用戶的目錄下建立一個.wgetrc文件。文件中能夠設置代理服務器:
http-proxy = 111.111.111.111:8080 ftp-proxy = 111.111.111.111:8080分別表示http的代理服務器和ftp的代理服務器。若是代理服務器須要密碼則使用:
這兩個參數。
使用參數–proxy=on/off 使用或者關閉代理。
附錄:命令格式:
wget [參數列表] [目標軟件、網頁的網址]
-V,–version 顯示軟件版本號而後退出;
-h,–help顯示軟件幫助信息;
-e,–execute=COMMAND 執行一個 「.wgetrc」命令
-o,–output-file=FILE 將軟件輸出信息保存到文件;
-a,–append-output=FILE將軟件輸出信息追加到文件;
-d,–debug顯示輸出信息;
-q,–quiet 不顯示輸出信息;
-i,–input-file=FILE 從文件中取得URL;
-t,–tries=NUMBER 是否下載次數(0表示無窮次)
-O –output-document=FILE下載文件保存爲別的文件名
-nc, –no-clobber 不要覆蓋已經存在的文件
-N,–timestamping只下載比本地新的文件
-T,–timeout=SECONDS 設置超時時間
-Y,–proxy=on/off 關閉代理
-nd,–no-directories 不創建目錄
-x,–force-directories 強制創建目錄
-http-user=USER設置HTTP用戶
-http-passwd=PASS設置HTTP密碼
-proxy-user=USER設置代理用戶
-proxy-passwd=PASS設置代理密碼
-r,–recursive 下載整個網站、目錄(當心使用)
-l,–level=NUMBER 下載層次
-A,–accept=LIST 能夠接受的文件類型
-R,–reject=LIST拒絕接受的文件類型
-D,–domains=LIST能夠接受的域名
-exclude-domains=LIST拒絕的域名
-L,–relative 下載關聯連接
-follow-ftp 只下載FTP連接
-H,–span-hosts 能夠下載外面的主機
-I,–include-directories=LIST容許的目錄
-X,–exclude-directories=LIST 拒絕的目錄
查看所屬root用戶進程所打開的文件類型爲txt的文件:lsof -a -u root -d txt