監控io性能,free命令,ps命令,查看網絡狀態,linux下抓包,linux網絡相關

監控io性能

  • 有時候,cpu佔用率不高,可是負載卻很高
  • 這種狀況多是因爲 io 性能不足引發的
  • 可使用 iostat 命令查看磁盤狀態
  • 在安裝sysstat包的時候,就已經包含了 iostat 命令
  • 能夠直接使用 iostat 查看磁盤狀態
  • 也可使用 iostat 1 每秒輸出一次磁盤狀態

  • 一個重要的用法是 iostat -x
  • 參數 -x 能夠查看到一個重要的數據
  • 如上圖所示,使用x參數,能夠查看到 %util 這一列數據
  • cpu的使用時間裏面,有兩部分
  • 一部分是 處理進程計算的時間
  • 一部分是 等待 io 的時間
  • 某些時候要經過磁盤拿到數據才能進行計算處理
  • 或者要把一些數據進行保存寫入磁盤
  • 磁盤讀寫的這個時間就是io等待時間
  • cpu須要讀取磁盤數據或者寫入磁盤數據才能進行下一步動做
  • 這個數據存取的時間就是cpu的io等待時間
  • %util 就是 io 等待時間 佔 cpu總時間的百分比
  • 若是磁盤的 %util 列的值很大,達到50%,60%
  • 說明磁盤io性能不足,致使io等待時間太長
  • 通常來講,%util 值大,磁盤讀寫量都會很大,由於頻繁讀取
  • 可是若是出現,%util值大,可是磁盤讀寫量卻不大
  • 說明這個磁盤可能出現了問題,也許須要更換磁盤了

  • 若是想知道哪個進程在頻繁讀寫磁盤
  • 可使用 iotop 命令
  • 這個命令不是默認安裝的,須要進行安裝
  • 使用 yum install -y iotop 進行安裝
  • 如圖,直接使用 iotop 命令就能夠進入這個界面
  • 也是動態顯示數據的界面
  • 看 IO 列就能夠知道進程的io佔比
  • 默認排序規律是 io 佔比高的進程在上面

free命令

  • free命令能夠查看內存使用狀況
  • 使用 free 命令會出現上圖數據
  • 有三行數據,第一行是列名稱,第二行是內存數據,第三行是交換分區的數據
  • 主要看第二行內存數據
  • 第二行數據,第一列 total 是內存總大小,單位是kb
  • 如圖,還可使用兩個參數,-m 或者 -h
  • 參數 m 的意思是,把數據的顯示單位變成 MB,本來是 kb 的
  • 參數 h 的意思是,在數據後面加上更容易閱讀的單位顯示
  • 能夠看到,使用參數 h 以後,每一個數據後面都有單位顯示了
  • 第二列數據used是 使用了多少內存
  • 第三列數據free是 剩餘多少內存
  • 可是有一個問題,就是 used + free 不等於 total
  • 這是由於 有一部份內存 被分配給了 buff/cache
  • buff/cache 是 緩衝/緩存
  • 由於磁盤速度與cpu速度差距太大,因此中間須要內存作緩衝
  • 如上圖,數據從磁盤到cpu,通過內存的部分就是 cache 緩存
  • 數據從cpu到磁盤,通過內存的部分就是 buffer 緩衝
  • 最後一列數據 available 的數值是 free的值 + 尚未被使用的 buff/cache 的值
  • 因此內存真正可使用的空間值是 available 的值,而不是 free 的值
  • 想看內存真正剩餘空間應該看 available

ps命令

  • ps 能夠查看系統內,進程的情況
  • 通常使用 ps aux 命令查看
  • 這樣能夠看到系統全部的進程的狀況
  • top命令是實時的,ps命令則是快照
  • 就是使用命令那個時間點的進程狀況,而不是實時更新信息的
  • 如圖,能夠看到 cpu 和 內存 的佔用狀況
  • 如上圖,使用管道符,配合 grep 使用能夠查看某個進程是否存在
  • 上圖例子,查看 nginx 和 mysql 進程是否存在,還有進程的信息

  • 另一種ps命令的使用方法是 ps -elf
  • 上圖是使用 ps -elf 命令後出現的進程信息
  • ps aux 和 pa -elf 均可以用來查看進程的狀況

  • 使用 kill + 進程的PID 能夠殺死一個進程
  • 若是想查看一個進程的目錄,要用到 PID
  • proc目錄下面有不少數字目錄
  • 這麼數字目錄的數字就是進程的PID
  • 因此如圖,ls -l /proc/2729 就能夠查看一個進程目錄的內容

  • 如圖,ps aux 顯示的信息
  • VSZ 是虛擬內存
  • RSS 是物理內存
  • TTY 是進程在哪一個TTY上
  • STAT 是進程狀態
  • START 是進程開始的時間
  • TIME 是進程運行了多久
  • COMMAND 是進程名稱等信息

  • 主要須要注意的是 STAT 列的信息
  • STAT有各類不一樣的類型
  • 例如,類型 D 是不可中斷的進程類型
  • 類型D的進程由於會影響程序的結果,因此是不能中斷的
  • 類型D的進程對系統的負載影響比較大
  • 有不少 D類型 的進程的話,系統負載會很大
  • R 是指某個時間段內在使用cpu的進程
  • S 是睡眠狀態的進程,在須要的時候會被cpu喚醒
  • 如圖,S+ 表示這個進程是在前臺運行的
  • 符號 + 表示前臺,有 + 的進程類型,就表示這個進程是前臺進程
  • T 表示被暫停的進程,好比使用 ctrl + z 暫停一個程序
  • 這個程序的進程就進入了 T 的狀態
  • 小寫的 s 表明主進程
  • 如圖,nginx 的進程裏面,分爲 父進程 和 子進程
  • 父進程類型是 Ss 說明父進程是主進程
  • 看用戶,父進程是 root 啓動的
  • 子進程是其它用戶啓動的
  • 若是一個進程有多個線程,就會顯示 l 狀態

查看網絡狀態

  • netstat 命令能夠查看網絡狀態
  • netstat 能夠查看TCP/IP的通訊狀態
  • 服務器要對外通訊,須要一個端口
  • 外部數據經過端口進入服務器
  • 要獲取這些數據,須要對端口進行監聽
  • 使用 netstat -lnp 命令能夠查看監聽端口信息
  • 如圖,查看監聽端口信息
  • tcp是ipv4協議,tcp6是ipv6協議,udp是udp協議
  • State 表示狀態,下面是 LISTEN 表示監聽狀態
  • 第一行信息,最後一列顯示,sshd,表示這是遠程鏈接
  • Local Address 列下面,22 表示是經過 22 端口鏈接的

  • socket 文件是用來進程間通訊的,前提是在同一臺服務器
  • netstat 也能夠查看系統裏面有哪裏socket文件被監聽
  • 如圖,這就是一個被監聽的socket文件

  • netstat主要仍是查看端口的監聽信息
  • 還有一種用法 netstat -an
  • 這個命令能夠查看 TCP/IP 狀態
  • 參數 an 查看的是全部的鏈接狀態
  • 也能夠查看指定的信息
  • 如圖,-ltnp 就是隻查看 tcp協議的信息
  • 第二個 -ltunp 就能夠查看 tcp協議和udp協議的信息
  • netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
  • 以上命令能夠統計各類TCP/IP狀態的進程的數量
  • 其中 ESTABLISHED 的數量能夠表明併發鏈接數
  • 併發鏈接就是指同一時間段,有多少客戶端在鏈接服務端
  • 通常來講,ESTABLISHED 的數量在1000如下或者幾千左右

  • 命令 ss -an 是一個相似 netstat 的命令
  • 也能夠查看 TCP/IP 的狀態
  • 如圖,使用 grep 匹配狀態爲 LINTEN 的進程
  • 可是 ss 命令的缺點是,不會顯示進程的名字

linux下抓包

  • 命令 tcpdump 是用來抓包的
  • 受到網絡攻擊的時候,網卡流量會有異常
  • 進來的包可能會超過1萬,想知道有什麼包進來,可使用 tcpdump
  • tcpdump命令若是不存在,就須要安裝包
  • 使用命令 yum install -y tcpdump
  • 使用上圖命令就能夠看到許多信息
  • 參數 -nn 能夠顯示主機ip地址和端口號
  • 如上圖,這是 ip 地址,22是接受數據的端口
  • 如上圖,若是不使用 -nn 參數
  • 那麼出來的數據原來的ip地址的位置就變成了主機名稱
  • 端口號的位置,變成了 .ssh
  • 參數 -i 後面接 網卡的名稱 ens33
  • 這樣看這個網卡收到的數據
  • 這些信息主要分爲幾個部分
  • 如圖,第一部分是時間信息
  • 第二部分是 源ip地址和端口
  • 第三部分是 目的ip地址和端口
  • 源ip就是發送數據的一方,目的ip是接受數據的一方
  • 後面的部分就是 包 的一些信息

  • 有一種DDos攻擊叫作 udp flood
  • udp的包有多是DDos攻擊
  • 遇到這些攻擊就須要接入防攻擊的設備或者請專業的人員處理
  • tcpdump 能夠顯示指定端口的包
  • 使用 port參數 後面接端口號 22 就能夠抓 ip地址端口號爲22 的包
  • 還可使用 not 和 and 進行條件選擇
  • 如圖,not port 意思是抓 ip端口不是 22 的包
  • 後面是 and 表示還要符合and後面的條件
  • 參數 host 能夠指定ip地址,後面接ip地址 192.168.0.100
  • 意思就是抓 ip端口不是22 而且 ip地址爲 192.168.0.100 的包

  • 還能夠指定長度,指定個數來抓取數據包
  • 參數 -c 能夠指定抓包個數,後面接 100 表示抓100個包
  • 如圖,能夠抓取數據包,並保存到一個文件裏面
  • 參數 -w 就能夠指定保存到哪一個文件裏面
  • 這裏是抓取 100 個包保存到 1.cap 裏面
  • 不過使用這個命令以後,系統並無反應,由於系統沒有產生數據包,因此沒有東西抓取
  • 因此能夠複製一個虛擬終端,輸入一些命令,就會產生一些數據包
  • 這裏就能夠抓取到,抓夠100個包就會自動退出
  • 文件 1.cap 若是使用 cat 讀取,會發現裏面都是亂碼
  • 使用 tcpdump -r /tmp/1.cap 就能夠讀取1.cap文件的數據流的信息
  • 如圖,下面顯示的就是數據流信息,也是數據的流向
  • 寫入1.cap的信息時數據包的信息
  • 可是使用 -r 只能讀取數據流向的信息,不能讀取到數據包裏面的內容

  • 安裝 wireshark 包,可使用命令 tshark
  • 這是一個相似 tcpdump 的工具
  • 使用上圖命令,能夠查看指定網卡,指定端口,web服務的信息
  • 上圖是使用命令後,顯示的信息
  • 能夠看到,訪問的ip地址,域名,GET操做等信息
  • 不過這個命令在虛擬機上不能實驗,由於虛擬機沒有web服務

linux網絡相關

  • 安裝包 yum install -y net-tools
  • 安裝好以後,就可使用命令 ifconfig 查看網卡ip了
  • ifconfig 有一個參數 -a
  • 使用 ifconfig 查看網卡信息的時候
  • 若是一個網卡沒有ip,多是網卡被關閉了,那麼就不會顯示
  • 這種時候,使用 ifconfig -a 就可讓沒有ip的網卡也顯示出來

  • 有兩個跟網卡有關的命令 ifdown 和 ifup
  • ifdown 是關閉網卡
  • ifup 是開啓網卡
  • 若是在 xshell 使用這個命令
  • 由於xshell遠程鏈接主機是經過這個網卡鏈接的
  • 因此若是在xshell關閉這個網卡,遠程鏈接會自動中斷
  • 要繼續遠程鏈接,須要先在主機終端使用 ifup ens33 打開網卡
  • 而後才能夠繼續遠程鏈接
  • 有時候須要對一個網卡進行更改
  • 好比更改網關,增長dns等,更改以後就須要重啓服務
  • 可是重啓服務會把全部網卡都重啓,如今只須要重啓指定的網卡,其它不用動
  • 這種時候,就可使用 ifdown,ifup 來操做
  • 可是有個問題,若是想要更改的是遠程鏈接正在使用的網卡
  • 若是關閉,就不能遠程鏈接啓動了
  • 如上圖,這種時候,把 ifdown 和 ifup 寫在一條命令裏面
  • 這樣使用命令後,網卡會自動關閉,而後自動重啓
  • 這樣就能夠遠程鏈接繼續使用了

  • 還能夠增長虛擬網卡
  • 目前系統裏面有 ens33 和 lo 兩個網卡
  • 在不增長物理網卡的狀況下,增長新的網卡
  • 能夠設置虛擬網卡,而後在虛擬網卡上設置新ip
  • 首先,cd 進入網卡配置文件所在的目錄裏面
  • 而後把ens33網卡的配置文件ifcfg-ens33 複製一份,而後重命名爲 ifcfg-ens33:0
  • 上圖命令冒號 : 前面加 \ 是由於須要脫義爲普通字符,不脫義就是命令字符了
  • 而後使用 vi ifcfg-ens33:0 編輯該配置文件
  • 如圖,把NAME的值改成 ens33:0 ,原來的值是ens33
  • 這裏冒號 : 不須要脫義,由於這個值是名稱字符串,不會把冒號錯認爲命令字符
  • DEVICE的值也改成 ens33:0
  • 而後 IPADDR 的值也修改一下,把最後一列修改成跟原來的值不一樣
  • 後面兩行數據 GATEWAY 和 DNS1 能夠刪除,由於別的網卡里面已經配置了
  • 而後保存退出
  • 如圖,使用命令 ifdown ens33 && ifup ens33 關閉而後重啓 ens33 網卡
  • 而後再使用 ifconfig 查看網卡信息
  • 能夠看到多了一個 ens33:0 的網卡信息
  • 這樣就成功設置了虛擬網卡
  • 後面 lvs 或者 keepalived 會用到虛擬網卡

  • 一臺服務器鏈接了一根網線
  • 可是不肯定服務器跟網線是否鏈接成功
  • 若是人在機房能夠直接過去看,可是若是人不在機房,而是遠程鏈接
  • 使用上圖命令 mii-tool ens33
  • 而後看下面的返回信息最後面顯示, link ok 說明網線鏈接沒有問題
  • 可是有些服務器會提示 not support 表示不支持這個命令
  • 這種時候可使用下圖命令
  • ethtool ens33 這個命令也能夠看網線是否鏈接
  • 看命令返回信息的最下面顯示,Link detected: yes 這就表示網線鏈接沒問題
  • 上圖是一個查看服務器網卡鏈接的例子
  • 使用 mii-tool + 網卡名稱 查看這臺服務器上的網卡是否鏈接了網線
  • 能夠看到,em3是link ok 鏈接沒有問題,em4是 no link 說明沒有鏈接網線

  • 上圖命令能夠修改主機名稱
  • hostname 命令能夠顯示當前主機名
  • 不過shell顯示的主機名還沒變,從新登陸就會改變
  • 也可使用 bash 進入子shell也會改變
  • 上圖是 主機名稱 的配置文件
  • 上圖是 DNS 的配置文件
  • 上圖是修改網卡DNS,增長了第二個DNS的信息
  • 而後關閉重啓網卡
  • 而後再 cat /etc/resolv.conf 這個DNS的配置文件
  • 能夠看到 resolv.conf 的內容已經增長了一個DNS的信息
  • 因此 resolv.conf 的信息是由網卡里面配置的DNS信息而來的
  • 若是想臨時增長 DNS 能夠直接修改 resolv.conf 這個配置文件
  • 不過每次網卡重啓後,網卡內的DNS信息都會把 resolv.conf 裏面的DNS信息覆蓋掉

  • 上圖 cat hosts文件的內容
  • 這個 hosts 文件是 linux 和 windows 都有的文件
  • 這個文件能夠修改域名解析
  • 舉例,使用命令 ping www.qq123.com 根據對這個域名的解析
  • 會鏈接到 www.qq123.com 對應的公網 ip 地址去
  • 如今的目的是,不但願別人經過這臺電腦鏈接到 www.qq123.com 對應的ip地址
  • 當其餘人經過這臺電腦 ping www.qq123.com 的時候
  • 要讓他鏈接到我自定義的ip地址去,而不是 www.qq123.com 對應的公網ip地址
  • 若是,使用 vim 打開 /etc/hosts 文件
  • 如圖,在下面編輯輸入,自定義ip + 域名
  • 而後保存退出
  • 如圖,再 ping 這個域名,就會鏈接到剛纔自定義的ip去
  • 這個修改只在本機生效,用別的電腦ping這個域名就不會鏈接到自定義ip去
  • 如圖,還能夠 多個域名 指向 同一個ip
  • 不一樣域名之間用 空格 分隔
  • 還有一種狀況,若是有同一個域名,指向多個ip
  • ping 這個域名的時候會指向哪個ip呢?
  • 這種時候,會指向最下面一行的ip
  • 舉例,有三行 ip 對應的都是 同一個域名
  • ping這個域名的時候,就會指向 第三行 ip ,上面的無效
相關文章
相關標籤/搜索