1. 程式人生 > >第十章、日常運維(上)

第十章、日常運維(上)

抓取 進入 fff 0.11 cpu rip 筆記 裏來 ifd

10.1 使用w查看系統負載

10.2 vmstat命令

10.3 top命令

10.4 sar命令

10.5 nload命令

10.6 監控io性能

10.7 free命令

10.8 ps命令

10.9 查看網絡狀態

10.10 linux下抓包

10.11 Linux網絡相關

10.11擴展

10.12課堂筆記

10.1 使用w查看系統負載

監控系統狀態 w #查看系統負載 第一行 當前系統時間 啟動多長時間 登錄幾個用戶 系統負載(一分鐘系統負載數,五分鐘系統負載數,十五分鐘系統負載值)(負載正常值是8以內) ##含義:單位時間段內使用cpu活動的進程有多少個(平均值) 第二行 用戶 tty 從哪裏來 登陸時間 cat /proc/cpuinfo
查看cpu核數 只看processor,如果是0,說明只有一顆邏輯cpu;如果是1,就有2顆邏輯cpu uptime #也能查看系統負載,不過只是w的第一行

10.2 vmstat命令

vmstat 1 #查看系統進程,一秒動態顯示一次,按Ctrl+c結束 vmstat 1 5 #查看系統進程,一秒動態顯示一次,顯示5次自動結束 關鍵的幾列: r :run,表示有多少個進程處於run狀態,run就是在等待使用cpu b:block,表示被除cpu以外的資源阻斷了,卡死了,處於等待的狀態 swpd:如果數字在持續變化,說明你的內存不夠了 si:有多少數據塊從swap進入內存 so:多少數據塊從內存出去到swap bi:從磁盤裏出來,進入到內存裏去;從磁盤裏讀 bo:從磁盤裏寫 us:表示用戶占用cpu資源百分比,不超過100%,;如果長時間大於50%,說明系統資源不夠了 sy:系統本身進程服務占用資源百分比 id:cpu空閑資源百分比 ps:us+sy+id=100% wa:類似b,表示進程等待cpu的百分比數,有多少進程在等待cpu,如果wa很大, 說明cpu不夠用

10.3 top命令

top #查看進程使用情況,動態的,三秒顯示一次 主要看us(長期處於60%以上,對主機沒好處) 第一行,跟w命令查看的一樣 第二行 進程總數狀況 總數 r狀態數 休眠狀態數 停止狀態數 僵屍進程數(主進程被意外終止了,只留下子進程在這裏) 第三行 cpu百分比 st(表示被偷走的cpu百分比) 第四行 物理內存使用情況 總內存數 剩余內存數 使用內存數 buff/cache數 第五行 交換分區使用情況 顯示進程 默認情況下,按照cpu百分比排序(使用cpu多的排前面) %CPU :使用cpu百分比 %MEM:使用內存百分比 RES:物理內存大小(單位為k字節) COMMAND:進程所在的路徑名 ##按q退出,數字1顯示所有核cpu使用情況(從第三行觀看),大寫字母M按內存使用排序,大寫字母P按cpu使用排序 top -c
#顯示詳細的進程信息,COMMAND:進程所在的絕對路徑 top -bn1 # 靜態顯示所有進程 (適合在寫腳本的時候用)

10.4 sar命令

主要用來查看網卡流量 yum install -y sysstat #安裝sar命令 sar每十分鐘將系統狀態抓一次,放入/var/log/sa/saxx 文件內 (xx表示抓取日期) ps: /var/log/sa/ 目錄內容最多保存一個月 sar -n DEV #網卡流量 sar -n DEV 1 10 #每隔一秒顯示一次,共顯示十次 IFACE:網卡名稱 rxpck/s:接收到的數據包(單位為個) (數據包幾千個正常,數據包上萬的話就不正常了) txpck/s:發送的數據包(單位為個) rxkB/s:接受的數據量(大小為kB) txkB/s:發送的數據量(大小為kB) sar -q #查看歷史sar文件 sar -q 1 10 #查看系統負載一秒一次,共10次 sar -b #查看磁盤讀寫 sar -b 1 5 sar -f /var/log/sa/saxx #查看歷史sar文件 sa目錄會生成兩種文件saxx和sarxx, saxx是二進制的文件,不能cat,只能用 sar -f 選項去加載查看 sarxx是可以直接cat(sarxx會在saxx文件產生後一天出現)

10.5 nload命令

監控網卡流量 yum install -y epel-release yum isntall -y nload nload #顯示實時的動態的網卡流量 第一行 網卡名 IP地址 網卡數(按方向鍵可以切換其他網卡) curr:當前值 avg:平均值 Min:最小值 Max:最大值 #一般情況買來的帶寬的性能看的是出去的流量(Outgoing)

10.6 監控io性能

iostat命令也在sysstat包裏面,與sar命令一樣 iostat -x #磁盤使用情況,主要關註%util這一列 %util:表示io,有多少時間占用cpu,等待io時間比 如果數值很大,說明io不好或是io很忙,讀寫數值也會很大;如果只是wkb/s大,說明硬盤可能存在著問題,有些故障 yum install -y iotop iotop #查看磁盤io使用情況

10.7 free命令

free #查看內存使用情況 第一行是說明 第二行是內存使用情況 內存總大小(kB) 使用內存數 空閑內存數 第三行是交換分區的使用情況 free -m #單位為M free -h #數值後面加上M total=used+free+buff/cache buff和cache的區別 buff:緩沖 cache:緩存 數據流向: 1、數據從磁盤讀出來,先放內存裏,然後交給cpu運轉 磁盤-->內存(cache)-->cpu 2、cpu把數據計算完,放到內存裏,最後存到磁盤裏去 cpu-->內存(buffer)-->磁盤 avaliable包含free和buffer/cache剩余部分

10.8 ps命令

ps #查看系統進程靜態 ps auxps -elf一樣 #把系統所有進程全部列出來 kill [pid] #殺死進程 ls -l /proc/[pid]/ #查看進程的啟動位置 stat部分說明 D:不能中斷的進程 R:run狀態的進程 S:sleep狀態的進程 T:暫停的進程 Z:僵屍進程 <:高優先級進程 N:低優先級進程 L:內存中被鎖了內存分頁 s:主進程 l:多線程進程 +:前臺進程

10.9 查看網絡狀態

netstat #查看tcp/ip通信網絡狀態 netstat -lnp #查看監聽端口 netstat -an #查看系統的網絡連接狀況 netstat -lntp #只看出tcp的,不包含socket -t #tcp -u #udp ##小技巧 netstat -an |awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}‘ ##查看所有tcp握手、揮手狀態的數量 established 一千以內正常 ss -an 類似 nestat ,但是不會顯示進程的名字

10.10 linux下抓包

? 抓包工具tcpdump #查看數據的流向 yum install -y tcpdump ? 用法:tcpdump -nn #第一個n表示ip,第二個n表示端口號 ? tcpdump -nn -i ens33 #抓包ens33網卡 #一般情況下都是tcp的包,如果是udp的包,有可能被攻擊了 ? tcpdump -nn port 80 #抓包80端口的 ? tcpdump -nn -i ens33 port 80 #抓包ens33網卡的80端口 ? tcpdump -nn not port 22 and host 192.168.0.100 #不要22端口的,和只要192.168.0.100ip的 ? tcpdump -nn -c 10 -w /tmp/1.cap #指定-c10個數據包,-w包存到/tmp/1.cap #/tmp/1.cap不能用cat查看,因為內容是通信的數據可以通過tcpdump -r /tmp/1.cap查看 ? yum install -y wireshark #安裝tshark命令 ? tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" #查看指定網卡80端口web訪問情況

10.11 Linux網絡相關

ifconfig #查看網卡ip(yum install net-tools) ? ifup ens33 #開啟網卡ens33 ifdown ens33 #關閉網卡ens33 ifdown ens33 && ifup ens33 #重啟網卡 ? 設定虛擬網卡ens33:1 1、cd /etc/sysconfig/network-scripts/ 2、cp ifcfg-ens33 ifcfg-ens33\:0 3、vim ifcfg-ens33\:0 修改下面三個 name=ens33:0 DEVICE=ens33:0 IPADDR= DNS1去掉,因為已經有了 4、ifdown ens33 && ifup ens33 ? mii-tool ens33 #查看網卡是否連接, ? ethtool ens33 #也可以查看網卡是否連接 ? hostnamectl set-hostname aminglinux # 更改主機名CentOS6不支持該命令 修改DNS的兩種方式: 1、 修改DNS配置文件/etc/resolv.conf 2、修改網卡配置文件/etc/sysconfig/network-scripts/ifcfg-網卡名 ? /etc/hosts文件 192.168.133.150 www.qq123.com #左邊ip,右邊域名,支持一個ip多個域名 #ping www.qq123.com時,會轉到192.168.133.150 (只會在本機生效)

10.12擴展

tcp三次握手四次揮手(重點面試問到) http://www.doc88.com/p-9913773324388.html tshark幾個用法:http://www.aminglinux.com/bbs/thread-995-1-1.html

10.13課堂筆記

10.1 使用w查看系統負載 uptime #只顯示w的第一行 lscpu #查看cpu具體信息 cat /proc/cpuinfo #查看cpu具體信息, lsb_release #查看操作系統版本 cat /etc/issue #查看操作系統版本 uname -r #查看內核信息 lspci -k #顯示驅動信息 cat /proc/meminfo #查看內存信息 10.2 vmstat命令(面試常考) vmstat -n 1 #每一秒顯示系統負載 r列表示有多少進程在run(運行)的狀態; b代表cpu以外的資源被其他進程占用; swpd當內存不夠時數值會發生變化; si代表有多少kb的數據從swp進入到內存中; bi代表從磁盤中出來到內存中去, bo代表寫入的數據量數值大小代表磁盤數據的 讀寫頻率; us表示用戶級別的一些資源占用的cpu百分比; us +sy +id =100; wa代表等待cpu的百分比buffer 與cache的區別常考1、buffer是位於內存和硬盤之間,叫做緩沖;cache是位於CPU和主內存之間,叫做緩存 2、緩沖速率低於緩存 3、數據流向不同 磁盤(數據) --》 內存(起緩存作用cache) --》 cpu cpu (數據) --》 內存(起緩沖作用buffer) --》 磁盤 10.3 top命令 top與w顯示的第一行相同 第二行查看系統任務狀態 第三行cpu利用率 原本是cpu(s)按e,變成cpu(0); 按M,按內存大小排序 id : idle ,表示cpu的空閑率,id越高,cpu非常空閑 wa:進程等待cpu的占用率 10.4 sar命令 ##sar掌握網卡流量就行,其他的了解 sar -n 數字 #-n指定打印次數 sar -n DEV 1 2 #DEV表示網卡流量 ,1表示每秒顯示一次,2表示打印兩次 sar -b 1 #查看硬盤,一秒顯示一次 10.5 nload命令 yum install -y epel-release yum install -y nload #安裝前提要有epel擴展源 nload #動態實時顯示網卡,按方向鍵可以查看其它網卡 10.6 監控io性能 iostat -x #查看磁盤使用 #io百分比表示等待執行的進程,wkb數值很大的話說明硬盤可能有故障 -z 數字 #表示多久顯示一次 iotop #實時顯示磁盤讀寫速率 10.7 free命令 第一列是內存的總大小,單位是kb(可以使用free -h); 第二列是使用了多少; 第三列是剩余內存數量; buff/cache(緩沖和緩存)是預分配內存的量; avaliable是預分配和沒有完的內存 total=used+free+buff/cache 10.8 ps命令 ps -ef ps -aux 類似,查看所有運行的進程 ps -C 進程名 #查看系統裏是否有這個進程 kill命令加pid可以殺死進程(結束)
  • D是不能中斷的進程;
  • R run狀態下的進程;
  • S sleep狀態下的進程;
  • T 暫停的進程;
  • Z 僵屍進程;
  • < 高優先級的進程;
  • N 低優先級進程;
  • s 主進程;
  • l 多線程進程;
  • + 前臺進程。
進程和線程區別 進程和線程的主要差別在於它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的並發操作,只能用線程,不能用進程。 1) 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程. 2) 線程的劃分尺度小於進程,使得多線程程序的並發性高。 3) 另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。 4) 線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。 5) 從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。 10.9 查看網絡狀態 查看端口 netstat -anlp |grep 80 #查看網絡狀態並將80端口顯示,也能查端口號是否被占用 10.10 linux下抓包 tcpdump -nn #表示用數字顯示ip地址的端口號;用來看數據的流向 -i + 網卡設備 port + 端口號 -w +文件 # 將抓的數據寫到指定文件 ps:抓到的數據只能通過tcpdump -r 進行查看,其他的查看如cat只會看到亂碼 yum install -y wireshark #安裝tshark tshark命令可查看指定網卡80端口web的訪問情況;類似於web的訪問日誌 10.11 Linux網絡相關 ethtool +網卡名 #查看網線是否連接 ifdown +網卡名 #斷開該網卡 修改主機名 vim /etc/hostname 或者hostnamectl set-hostname 主機名 修改DNS配置文件 1、vim /etc/resolv.conf 2、vim /etc/sysconfig/network-scripts/ifcfg-網卡名 如果橋接情況下ping網關ping的通,ping外網ping不通,可以查看/etc/resolv.conf是否存在dns 擴展 tcp三次握手四次揮手(重點面試常問連接三次握手 技術分享圖片技術分享圖片
  1. TCP服務器進程先創建傳輸控制塊TCB,時刻準備接受客戶進程的連接請求,此時服務器就進入了LISTEN(監聽)狀態;
  2. TCP客戶進程也是先創建傳輸控制塊TCB,然後向服務器發出連接請求報文,這是報文首部中的同部位SYN=1,同時選擇一個初始序列號 seq=x ,此時,TCP客戶端進程進入了 SYN-SENT(同步已發送狀態)狀態。TCP規定,SYN報文段(SYN=1的報文段)不能攜帶數據,但需要消耗掉一個序號。
  3. TCP服務器收到請求報文後,如果同意連接,則發出確認報文。確認報文中應該 ACK=1,SYN=1,確認號是ack=x+1,同時也要為自己初始化一個序列號 seq=y,此時,TCP服務器進程進入了SYN-RCVD(同步收到)狀態。這個報文也不能攜帶數據,但是同樣要消耗一個序號。
  4. TCP客戶進程收到確認後,還要向服務器給出確認。確認報文的ACK=1,ack=y+1,自己的序列號seq=x+1,此時,TCP連接建立,客戶端進入ESTABLISHED(已建立連接)狀態。TCP規定,ACK報文段可以攜帶數據,但是如果不攜帶數據則不消耗序號。
  5. 當服務器收到客戶端的確認後也進入ESTABLISHED狀態,此後雙方就可以開始通信了。
斷開四次揮手 技術分享圖片技術分享圖片
  1. 客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
  2. 服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接收。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
  3. 客戶端收到服務器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最後的數據)。
  4. 服務器將最後的數據發送完畢後,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。
  5. 客戶端收到服務器的連接釋放報文後,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。註意此時TCP連接還沒有釋放,必須經過2?MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。
  6. 服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。

第十章、日常運維(上)