目錄php
[root@localhost ~]# w 23:38:24 up 33 days, 1:03, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.56.1 Fri16 0.00s 0.95s 0.00s w [root@localhost ~]# uptime 23:38:38 up 33 days, 1:03, 1 user, load average: 0.00, 0.01, 0.05
load average**:1分鐘內系統的平均負載值,5分鐘內系統的平均負載值,15分鐘內系統的平均負載值mysql
這個值的意義是,單位時間段內CPU活動進程數。這個值越大就說明服務器壓力越大。通常狀況下這個值不超過服務器cpu數量就沒有關係。假設服務器的cpu數量爲8,那麼這個值若小於8,就說明當前服務器沒有壓力,不然就要關注一下了。那麼如何查看服務器有幾個cpu呢?ios
[root@localhost ~]# cat /proc/cpuinfo |grep processor #查看cpu核數 processor : 0 [root@localhost ~]# cat /proc/cpuinfo |grep processor |wc -l 1 [www@wef66fxcdgkbsdsd790fd9z ~]$ cat /proc/cpuinfo |grep processor|wc -l #線上環境使用了4核 4
[root@localhost ~]# vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 1540 126124 0 600364 0 0 0 1 4 12 0 1 99 0 0 0 0 1540 126124 0 600364 0 0 0 0 165 286 0 0 100 0 0 2 0 1540 126124 0 600364 0 0 0 0 152 280 0 0 100 0 0 1 0 1540 126124 0 600364 0 0 0 0 157 276 0 1 99 0 0 1 0 1540 126124 0 600364 0 0 0 0 166 281 1 0 99 0 0 ①procs 顯示進程相關信息 r:表示運行和等待cpu時間片的進程數。若是長時間大於服務器cpu的個數,則說明cpu不夠用了 b:表示等待資源的進程數。好比,等待I/O、內存等,這列的值若是長時間大於1,則須要關注一下了 ②memory 內存相關信息 swpd:表示切換到交換分區中的內存數量 free:當前空閒的內存數量 buff:緩衝大小,(即將寫入磁盤的) cache:緩存大小,(從磁盤中讀取的) ③swap 內存交換狀況 si:由交換區寫入到內存的數據量 so:由內存寫入到交換區的數據量 ④io 磁盤使用狀況 bi:從塊設備讀取數據的量(讀磁盤) bo:從塊設備寫入數據的量(寫磁盤) ⑤system 顯示採集間隔內發生的中斷次數 in:表示在某一時間間隔中觀測到的每秒設備中斷數 cs:表示每秒產生的上下文切換次數 ⑥CPU 顯示cpu的使用狀態 us:顯示用戶下所花費cpu時間的百分比 sy:顯示系統花費cpu時間百分比 id:表示cpu處於空閒狀態的時間百分比 wa:表示I/O等待所佔用cpu時間百分比 st:表示被偷走的cpu所佔百分比(通常都爲0,不用關注)
以上介紹的各個參數中,比較關注r列、b列、wa列。IO部分的bi以及bo也是常常參考的對象。若是磁盤io壓力很大時,這兩列的數值會比較高。另外當si、so兩列的數值比較高,而且在不斷變化時,說明內存不夠用了,內存中的數據會頻繁交換到swap分區中,這樣每每對系統的性能產生影響。nginx
這個命令用於動態監控進程所佔系統資源,每隔3s變一次。它的特色是把佔用系統資源(CPU,內存,磁盤IO等)最高的進程放到最前面。top命令打印出了不少信息,包括系統負載(loadaverage)、進程數(Tasks)、cpu使用狀況、內存使用狀況及交換分區使用狀況。須要關注的有幾項:%CPU、%MEM、COMMAND。RES爲進程所佔內存大小,而%MEM爲使用內存百分比。在top狀態下,按「shift+m」,能夠按照內存使用大小排序。按數字1能夠列出各顆cpu的使用狀態。web
top - 15:06:39 up 38 days, 15:09, 1 user, load average: 0.45, 0.49, 0.52 Tasks: 328 total, 2 running, 326 sleeping, 0 stopped, 0 zombie %Cpu0 : 12.0 us, 6.7 sy, 0.0 ni, 80.7 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st %Cpu1 : 4.3 us, 3.3 sy, 0.0 ni, 91.7 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st %Cpu2 : 13.0 us, 5.7 sy, 0.0 ni, 81.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu3 : 10.0 us, 4.0 sy, 0.0 ni, 84.6 id, 0.0 wa, 0.0 hi, 1.3 si, 0.0 st KiB Mem : 8010096 total, 195140 free, 1800572 used, 6014384 buff/cache KiB Swap: 0 total, 0 free, 0 used. 5398572 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24423 www 20 0 586460 38764 24164 S 5.0 0.5 55:44.43 php-fpm 24333 www 20 0 586392 39308 24748 S 4.7 0.5 55:58.71 php-fpm 24328 www 20 0 586336 41876 27360 S 4.3 0.5 55:35.53 php-fpm 24483 www 20 0 586480 37964 23388 S 2.0 0.5 55:41.00 php-fpm 24310 www 20 0 586356 38540 24008 S 1.0 0.5 55:38.32 php-fpm 24311 www 20 0 588468 41120 26536 S 1.0 0.5 56:00.00 php-fpm 24324 www 20 0 586448 39064 24348 S 1.0 0.5 56:09.32 php-fpm 24332 www 20 0 587924 40548 26608 S 1.0 0.5 55:37.79 php-fpm 24341 www 20 0 586456 38224 23572 S 1.0 0.5 56:06.65 php-fpm 24361 www 20 0 586324 38576 24020 S 1.0 0.5 56:12.87 php-fpm 24366 www 20 0 586388 37864 23468 S 1.0 0.5 55:34.51 php-fpm
PID:進程ID號sql
USER:用戶名docker
PR:priority其取值範圍是0~39,進程優先級,PR值越小,優先級越高shell
NI:nice,表示進程優先級狀態的值,其取值範圍是-20~19,一共40個級別。這個值越小,表示進程優先級越高,而值越大,表示優先級越低。數據庫
PR+NI=20apache
VIRT:虛擬內存多大
RES:實際內存使用
SHR:共享內存
S:進程狀態
TIME+:cpu佔用時長
top -bn1表示非動態打印系統資源使用狀況,能夠用在shell腳本中。和tip命令的區別就是,它一次性所有把全部信息輸出出來而非動態顯示。
iostat -x 1 10 查看io,看%until 表示有多少沒有寫入磁盤,等待須要寫入磁盤的,若是太高,就要查看進程了。
沒有iostat命令能夠安裝:sysstat-9.0.4-31.el6.i686
[root@localhost ~]# yum install -y sysstat #若是沒有sar命令,須要安裝sysstat [www@localhost ~]$ sar -n DEV #查看網卡流量 Linux 3.10.0-693.21.1.el7.x86_64 (localhost) 07/07/2018 _x86_64_ (4 CPU) 12:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 12:10:01 AM eth0 782.73 391.12 642.35 80.69 0.00 0.00 0.00 12:10:01 AM lo 182.90 182.90 55.27 55.27 0.00 0.00 0.00 12:20:01 AM eth0 762.37 384.97 619.17 78.28 0.00 0.00 0.00 12:20:01 AM lo 182.80 182.80 55.26 55.26 0.00 0.00 0.00 12:30:01 AM eth0 815.71 414.54 662.49 84.65 0.00 0.00 0.00 12:30:01 AM lo 184.49 184.49 60.96 60.96 0.00 0.00 0.00 12:40:01 AM eth0 731.05 354.88 609.65 71.97 0.00 0.00 0.00 12:40:01 AM lo 179.47 179.47 51.47 51.47 0.00 0.00 0.00 12:50:01 AM eth0 699.75 345.80 575.08 72.07 0.00 0.00 0.00 12:50:01 AM lo 177.91 177.91 51.58 51.58 0.00 0.00 0.00 01:00:02 AM eth0 672.47 319.08 553.33 76.75 0.00 0.00 0.00 01:00:02 AM lo 178.08 178.08 58.16 58.16 0.00 0.00 0.00 01:10:01 AM eth0 537.61 287.04 409.51 53.91 0.00 0.00 0.00 01:10:01 AM lo 174.22 174.22 39.61 39.61 0.00 0.00 0.00 01:20:01 AM eth0 450.01 250.07 325.20 49.19 0.00 0.00 0.00 01:20:01 AM lo 171.17 171.17 37.62 37.62 0.00 0.00 0.00 01:30:01 AM eth0 506.51 257.61 394.53 48.44 0.00 0.00 0.00 01:30:01 AM lo 170.50 170.50 37.90 37.90 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: eth0 108.23 87.20 27.30 25.59 0.00 0.00 0.00 Average: lo 11.34 11.34 61.10 61.10 0.00 0.00 0.00
- IFACE:表示設備名稱
- rxpck/s:表示每秒進入收取的包的數量,單位爲"個"
- txpck/s:表示每秒發送出去的包的數量,單位爲"個"
- rxkb/s:表示每秒收取的數據量,單位爲kb
- txkb/s:表示每秒發送的數據量,單位爲kb
若是有一天服務器的丟包很嚴重,此時應觀察這個網卡流量是否異常,若是rxpck/s那一列的數值大於4000,或者rxkb/s那列大於5000,則頗有多是被攻擊了,正常的服務器網卡流量不會高於這麼多,除非是本身在拷貝數據。
實時查看網卡流量每秒打印,打印5次:sar -n DEV 1 5
[www@localhost ~]$ sar -n DEV 1 2 Linux 3.10.0-862.3.2.el7.x86_64 (localhost) 07/07/2018 _x86_64_ (2 CPU) 03:21:47 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 03:21:48 PM eth0 126.00 101.00 54.70 54.87 0.00 0.00 0.00 03:21:48 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 03:21:48 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 03:21:49 PM eth0 66.00 59.00 5.15 5.41 0.00 0.00 0.00 03:21:49 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: eth0 100.60 85.80 28.03 18.35 0.00 0.00 0.00 Average: lo 8.00 8.00 3.49 3.49 0.00 0.00 0.00
另外也能夠查看某一天的網卡流量歷史,使用-f選項,後面跟文件名。sar的庫文件在/var/log/sa/目錄下:默認該目錄下文件保留時長爲30天
[www@localhost ~]$ sar -n DEV -f /var/log/sa/sa01 Linux 3.10.0-693.5.2.el7.x86_64 (localhost) 07/01/2018 _x86_64_ (2 CPU) 12:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 12:10:01 AM eth0 49.80 24.46 41.21 15.63 0.00 0.00 0.00 12:10:01 AM lo 8.97 8.97 0.88 0.88 0.00 0.00 0.00 12:20:01 AM eth0 50.09 24.56 41.44 15.94 0.00 0.00 0.00 12:20:01 AM lo 8.93 8.93 0.87 0.87 0.00 0.00 0.00 12:30:01 AM eth0 50.02 24.68 41.45 15.93 0.00 0.00 0.00 ......
ls /var/log/sa/會看到有兩種不一樣的文件,一個是以sa開頭加日期,一個是sar開頭加日期,其中sa加日期的文件爲二進制文件,是不能直接cat查看,只能用sar -f查看,另一種sar加日期的文件是能夠直接cat的。他們都是記錄的系統狀態歷史信息。
也可使用sar查看歷史負載:sar -q,每隔1s打印,打印10次:sar -q 1 10
[www@localhost ~]$ sar -q Linux 3.10.0-862.3.2.el7.x86_64 (localhost) 07/06/2018 _x86_64_ (2 CPU) 12:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 12:10:01 AM 3 356 0.12 0.07 0.05 0 12:20:01 AM 16 354 0.01 0.05 0.05 1 12:30:01 AM 15 354 0.00 0.02 0.05 0 12:40:01 AM 3 362 0.00 0.01 0.05 0 12:50:01 AM 6 353 0.00 0.02 0.05 0 ldavg-1 :1分鐘負載 ldavg-5 :5分鐘負載 ldavg-15:15分鐘負載
[root@localhost ~]# yum install -y epel-release nload [root@localhost ~]# nload
(1/2):表示有2個網卡,能夠用箭頭進行來回切換
- Curr:當前流量
- Avg:平均流量
- Min:最小流量
- Max:最大流量
- Ttl:總共流量
[www@localhost ~]$ iostat -x Linux 3.10.0-693.5.2.el7.x86_64 (loccalhost) 07/07/2018 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.89 0.00 0.66 0.18 0.00 98.27 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 3.24 0.02 9.94 0.46 64.19 12.99 0.42 42.13 17.21 42.17 0.55 0.55
%util**:表示磁盤IO等待比例。這個數值過大,說明磁盤IO擁堵。說明rkB/s和wkB/s也會增大,若是隻是單純%util較大,說明可能磁盤存在問題。
當發現磁盤IO很忙,須要查看某個進程在讀寫,就可使用iotop**
[root@localhost ~]# yum install -y iotop [root@localhost ~]# iotop #能夠看到是mysql進程在進行讀寫
[www@localhost ~]$ free -m total used free shared buff/cache available Mem: 3790 308 153 128 3328 3050 Swap: 0 0 0 total:內存總大小 used:已經使用的內存 free:空閒內存 available:可用內存,包含free和buffer/cache剩餘部分 total=used+free+buff/cache
系統啓動完畢後,會先拿出一部份內存分給buffer、cache,緩存用來隨時提供給程序使用。若是程序不用時,那這部份內存就空閒。寫入磁盤數據時,會把數據寫入buffer,緩衝。cache是從磁盤讀取數據,先放到緩存中。
磁盤-->內存(cache)-->cpu
cpu-->內存(buffer)-->磁盤
經常使用:ps -elf ps -axu
選項:
-a:顯示全部終端機下執行的程序,除了階段做業領導者以外。 a:顯示現行終端機下的全部程序,包括其餘用戶的程序。 -A:顯示全部程序。 -c:顯示CLS和PRI欄位。 c:列出程序時,顯示每一個程序真正的指令名稱,而不包含路徑,選項或常駐服務的標示。 -C<指令名稱>:指定執行指令的名稱,並列出該指令的程序的情況。 -d:顯示全部程序,但不包括階段做業領導者的程序。 -e:此選項的效果和指定"A"選項相同。 e:列出程序時,顯示每一個程序所使用的環境變量。 -f:顯示UID,PPIP,C與STIME欄位。 f:用ASCII字符顯示樹狀結構,表達程序間的相互關係。 -g<羣組名稱>:此選項的效果和指定"-G"選項相同,當亦能使用階段做業領導者的名稱來指定。 g:顯示現行終端機下的全部程序,包括羣組領導者的程序。 -G<羣組識別碼>:列出屬於該羣組的程序的情況,也可以使用羣組名稱來指定。 h:不顯示標題列。 -H:顯示樹狀結構,表示程序間的相互關係。 -j或j:採用工做控制的格式顯示程序情況。 -l或l:採用詳細的格式來顯示程序情況。 L:列出欄位的相關信息。 -m或m:顯示全部的執行緒。 n:以數字來表示USER和WCHAN欄位。 -N:顯示全部的程序,除了執行ps指令終端機下的程序以外。 -p<程序識別碼>:指定程序識別碼,並列出該程序的情況。 p<程序識別碼>:此選項的效果和指定"-p"選項相同,只在列表格式方面稍有差別。 r:只列出現行終端機正在執行中的程序。 -s<階段做業>:指定階段做業的程序識別碼,並列出隸屬該階段做業的程序的情況。 s:採用程序信號的格式顯示程序情況。 S:列出程序時,包括已中斷的子程序資料。 -t<終端機編號>:指定終端機編號,並列出屬於該終端機的程序的情況。 t<終端機編號>:此選項的效果和指定"-t"選項相同,只在列表格式方面稍有差別。 -T:顯示現行終端機下的全部程序。 -u<用戶識別碼>:此選項的效果和指定"-U"選項相同。 u:以用戶爲主的格式來顯示程序情況。 -U<用戶識別碼>:列出屬於該用戶的程序的情況,也可以使用用戶名稱來指定。 U<用戶名稱>:列出屬於該用戶的程序的情況。 v:採用虛擬內存的格式顯示程序情況。 -V或V:顯示版本信息。 -w或w:採用寬闊的格式來顯示程序情況。 x:顯示全部程序,不以終端機來區分。 X:採用舊式的Linux i386登錄格式顯示程序情況。 -y:配合選項"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位 。 -<程序識別碼>:此選項的效果和指定"p"選項相同。 --cols<每列字符數>:設置每列的最大字符數。 --columns<每列字符數>:此選項的效果和指定"--cols"選項相同。 --cumulative:此選項的效果和指定"S"選項相同。 --deselect:此選項的效果和指定"-N"選項相同。 --forest:此選項的效果和指定"f"選項相同。 --headers:重複顯示標題列。 --help:在線幫助。 --info:顯示排錯信息。 --lines<顯示列數>:設置顯示畫面的列數。 --no-headers:此選項的效果和指定"h"選項相同,只在列表格式方面稍有差別。 --group<羣組名稱>:此選項的效果和指定"-G"選項相同。 --Group<羣組識別碼>:此選項的效果和指定"-G"選項相同。 --pid<程序識別碼>:此選項的效果和指定"-p"選項相同。 --rows<顯示列數>:此選項的效果和指定"--lines"選項相同。 --sid<階段做業>:此選項的效果和指定"-s"選項相同。 --tty<終端機編號>:此選項的效果和指定"-t"選項相同。 --user<用戶名稱>:此選項的效果和指定"-U"選項相同。 --User<用戶識別碼>:此選項的效果和指定"-U"選項相同。 --version:此選項的效果和指定"-V"選項相同。 --widty<每列字符數>:此選項的效果和指定"-cols"選項相同。
[root@localhost ~]# ps -elf |head -n 5 F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 31307 ep_pol May31 ? 00:01:56 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 1 S root 2 0 0 80 0 - 0 kthrea May31 ? 00:00:00 [kthreadd] 1 S root 3 2 0 80 0 - 0 smpboo May31 ? 00:12:12 [ksoftirqd/0] 1 S root 5 2 0 60 -20 - 0 worker May31 ? 00:00:00 [kworker/0:0H] [root@localhost ~]# ps axu |head -n 5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 125228 3408 ? Ss May31 1:56 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S May31 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S May31 12:12 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< May31 0:00 [kworker/0:0H]
PID:進程的id
STAT:表示進程的狀態,進程狀態分爲如下幾種(不要求記住,但要了解)
D:不能中斷的進程(一般爲IO),當CPU負載高,而使用率不高,能夠查看是否進程狀態爲D的數量是否較多,該數量較多會影響系統負載值。
R:run狀態的進程,正在運行中的進程
S:sleep狀態的進程,一般狀況下,系統中大部分進程都是這個狀態
T:已經中止或者暫停的進程
W:表示沒有足夠的內存頁分配
X:已經死掉的進程
Z:殭屍進程,殺不掉,打不死的垃圾進程,佔用系統一小點資源,不過沒有關係,若是太多的話就存在問題。
<:高優先級進程
N:低優先級進程
L:在內存中被鎖了內存分頁
s:主進程
l:多線程進程
+:表明在前臺運行的進程
netstat命令用來打印網絡鏈接情況、系統所開放的端口、路由表等信息。
netstat -lnp:打印當前系統啓動哪些端口
[root@localhost ~]# netstat -lntp #打印當前系統啓動哪些端口,-t表示只查看tcp的端口,不加-t表示查看全部的端口 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 5106/nginx: master tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5106/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 734/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 818/master tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 25837/php-fpm: mast tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 43059/mysqld tcp6 0 0 :::22 :::* LISTEN 734/sshd tcp6 0 0 ::1:25 :::* LISTEN 818/master tcp6 0 0 :::2377 :::* LISTEN 977/dockerd tcp6 0 0 :::7946 :::* LISTEN 977/dockerd udp 0 0 0.0.0.0:4789 0.0.0.0:* - udp 0 0 127.0.0.1:323 0.0.0.0:* 513/chronyd udp6 0 0 :::7946 :::* 977/dockerd udp6 0 0 ::1:323 :::* 513/chronyd Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 22022 981/docker-containe /var/run/docker/containerd/docker-containerd-debug.sock
還可使用組合命令來查看TCP的狀態統計。關注ESTABLISHED這個數值若是較大,說明網站較忙,1000之內能夠接受。併發較高
[www@localhost ~]$ netstat -an | awk '/^tcp/{++sta[$NF]} END {for(key in sta) print key , sta[key]}' LISTEN 8 ESTABLISHED 5 TIME_WAIT 173
使用-i顯示全部鏈接
[root@localhost ~]# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 513 chrony 1u IPv4 14838 0t0 UDP localhost:323 chronyd 513 chrony 2u IPv6 14839 0t0 UDP localhost:323 sshd 734 root 3u IPv4 16833 0t0 TCP *:ssh (LISTEN) sshd 734 root 4u IPv6 16835 0t0 TCP *:ssh (LISTEN) master 818 root 13u IPv4 17273 0t0 TCP localhost:smtp (LISTEN) master 818 root 14u IPv6 17274 0t0 TCP localhost:smtp (LISTEN) dockerd 977 root 21u IPv6 22761 0t0 TCP *:2377 (LISTEN) dockerd 977 root 26u IPv6 22776 0t0 TCP *:7946 (LISTEN) dockerd 977 root 28u IPv6 22777 0t0 UDP *:7946 nginx 5106 root 6u IPv4 1433341 0t0 TCP *:http (LISTEN) nginx 5106 root 7u IPv4 1433342 0t0 TCP *:webcache (LISTEN) php-fpm 25837 root 6u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25838 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25839 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25840 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25841 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25842 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25843 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) nginx 25857 nginx 6u IPv4 1433341 0t0 TCP *:http (LISTEN) nginx 25857 nginx 7u IPv4 1433342 0t0 TCP *:webcache (LISTEN) sshd 34937 root 3u IPv4 1958031 0t0 TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED) mysqld 43059 mysql 14u IPv4 916196 0t0 TCP *:mysql (LISTEN)
使用-i 4僅獲取IPv4流量
[root@localhost ~]# lsof -i 4 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 513 chrony 1u IPv4 14838 0t0 UDP localhost:323 sshd 734 root 3u IPv4 16833 0t0 TCP *:ssh (LISTEN) master 818 root 13u IPv4 17273 0t0 TCP localhost:smtp (LISTEN) nginx 5106 root 6u IPv4 1433341 0t0 TCP *:http (LISTEN) nginx 5106 root 7u IPv4 1433342 0t0 TCP *:webcache (LISTEN) php-fpm 25837 root 6u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25838 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25839 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25840 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25841 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25842 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) php-fpm 25843 apache 0u IPv4 1491295 0t0 TCP localhost:cslistener (LISTEN) nginx 25857 nginx 6u IPv4 1433341 0t0 TCP *:http (LISTEN) nginx 25857 nginx 7u IPv4 1433342 0t0 TCP *:webcache (LISTEN) sshd 34937 root 3u IPv4 1958031 0t0 TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED) mysqld 43059 mysql 14u IPv4 916196 0t0 TCP *:mysql (LISTEN)
僅顯示TCP鏈接(同理可得到UDP鏈接)
也能夠經過在-i後提供對應的協議來僅僅顯示TCP或者UDP鏈接信息。
[root@localhost ~]# lsof -iUDP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 513 chrony 1u IPv4 14838 0t0 UDP localhost:323 chronyd 513 chrony 2u IPv6 14839 0t0 UDP localhost:323 dockerd 977 root 28u IPv6 22777 0t0 UDP *:7946
使用-i:port來顯示與指定端口相關的網絡信息
也能夠經過端口搜索,這對於要找出什麼阻止了另一個應用綁定到指定端口實在是太棒了。
[root@localhost ~]# lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 734 root 3u IPv4 16833 0t0 TCP *:ssh (LISTEN) sshd 734 root 4u IPv6 16835 0t0 TCP *:ssh (LISTEN) sshd 34937 root 3u IPv4 1958031 0t0 TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
使用@host來顯示指定到指定主機的鏈接
在檢查是否開放鏈接到網絡中或互聯網上某個指定主機的鏈接時十分有用。
[root@localhost ~]# lsof -i@192.168.56.11 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 34937 root 3u IPv4 1958031 0t0 TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
使用@host:port顯示基於主機與端口的鏈接
也能夠組合主機與端口的顯示信息。
[root@localhost ~]# lsof -i@192.168.56.11:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 34937 root 3u IPv4 1958031 0t0 TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
找出正等候鏈接的端口。
[root@localhost ~]# lsof -i -sTCP:LISTEN COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 734 root 3u IPv4 16833 0t0 TCP *:ssh (LISTEN) sshd 734 root 4u IPv6 16835 0t0 TCP *:ssh (LISTEN) master 818 root 13u IPv4 17273 0t0 TCP localhost:smtp (LISTEN) master 818 root 14u IPv6 17274 0t0 TCP localhost:smtp (LISTEN) dockerd 977 root 21u IPv6 22761 0t0 TCP *:2377 (LISTEN) dockerd 977 root 26u IPv6 22776 0t0 TCP *:7946 (LISTEN)
找出已創建的鏈接
[root@localhost ~]# lsof -i -sTCP:ESTABLISHED COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 34937 root 3u IPv4 1958031 0t0 TCP swarm-manager:ssh->192.168.56.1:61856 (ESTABLISHED)
使用-u顯示指定用戶打開了什麼
[root@localhost ~]# lsof -u nginx COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 25857 nginx cwd DIR 8,3 265 64 / nginx 25857 nginx rtd DIR 8,3 265 64 / nginx 25857 nginx txt REG 8,3 1132976 738655 /usr/sbin/nginx
殺死指定用戶所作的一切事情
[root@localhost ~]# kill -9 `lsof -t -u mysql`
能夠查看指定程序或進程由什麼啓動,這一般會頗有用,而你可使用lsof經過名稱或進程ID過濾來完成這個任務。下面列出了一些選項:
使用-c查看指定的命令正在使用的文件和網絡鏈接
[root@localhost ~]# lsof -c php-fpm
使用-p查看指定進程ID已打開的內容
[root@localhost ~]# lsof -p 25843
-t選項只返回PID
[root@localhost ~]# lsof -t -c nginx 5106 25857
經過查看指定文件或目錄,你能夠看到系統上全部正與其交互的資源——包括用戶、進程等。
顯示與指定目錄交互的全部一切
[root@localhost ~]# lsof /var/log/messages/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 492 root 6w REG 8,3 863866 17552622 /var/log/messages
顯示與指定文件交互的全部一切
[root@localhost ~]# lsof /var/log/cron COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 492 root 4w REG 8,3 42911 17552620 /var/log/cron
與tcpdump相似,當你開始組合查詢時,它就顯示了它強大的功能。
顯示nginx鏈接到192.168.56.11所作的一切
[root@localhost ~]# lsof -u nginx -i @192.168.56.11 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 25857 nginx cwd DIR 8,3 265 64 / nginx 25857 nginx rtd DIR 8,3 265 64 / nginx 25857 nginx txt REG 8,3 1132976 738655 /usr/sbin/nginx nginx 25857 nginx mem REG 8,3 27616 17547606 /usr/lib64/perl5/vendor_perl/auto/nginx/nginx.so
同時使用-t和-c選項以給進程發送 HUP 信號
# kill -HUP `lsof -t -c sshd`
lsof +L1顯示全部打開的連接數小於1的文件
這一般(但不老是)表示某個攻擊者正嘗試經過刪除文件入口來隱藏文件內容。
[root@localhost ~]# lsof +L1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME mysqld 43059 mysql 4u REG 8,3 0 0 16939513 /var/tmp/ibiJ3IU3 (deleted) mysqld 43059 mysql 5u REG 8,3 0 0 17225230 /var/tmp/ibAhlMEQ (deleted) mysqld 43059 mysql 6u REG 8,3 0 0 16952289 /var/tmp/ibODsPoD (deleted) mysqld 43059 mysql 7u REG 8,3 0 0 17616006 /var/tmp/ibqYeF3c (deleted) mysqld 43059 mysql 11u REG 8,3 0 0 17635488 /var/tmp/ibGYCrRc (deleted)
有時候咱們須要查看某個網卡都有哪些數據包,尤爲是當你初步斷定服務器上有流量攻擊時,此時使用抓包工具來抓一下數據包,就能夠知道有哪些ip在攻擊了。
[root@localhost ~]# yum install -y tcpdump [root@localhost ~]# tcpdump -nn -i eth0 00:42:51.396212 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 141808:142084, ack 1, win 473, length 276 00:42:51.396380 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 142084, win 16110, length 0 00:42:51.396396 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142084:142264, ack 1, win 473, length 180 00:42:51.396579 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142264:142540, ack 1, win 473, length 276 00:42:51.396703 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142540:142720, ack 1, win 473, length 180 00:42:51.396977 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 142720, win 16383, length 0 00:42:51.396989 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142720:142900, ack 1, win 473, length 180 00:42:51.397119 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 142900:143176, ack 1, win 473, length 276 00:42:51.397206 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143176:143356, ack 1, win 473, length 180 00:42:51.397370 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 143356, win 16224, length 0 00:42:51.397386 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143356:143536, ack 1, win 473, length 180 00:42:51.397539 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143536:143812, ack 1, win 473, length 276 00:42:51.397714 IP 192.168.56.11.22 > 192.168.56.1.53338: Flags [P.], seq 143812:143992, ack 1, win 473, length 180 00:42:51.397875 IP 192.168.56.1.53338 > 192.168.56.11.22: Flags [.], ack 143812, win 16110, length 0
參數解析:
-i:後面跟設備名稱,若是像抓eht0網卡的包,後面則要跟eth0
-nn:是讓第3列和第4列顯示成ip+port端口號形式,若是不加-nn則顯示的是主機名+服務名稱
host:指定ip
prot:指定端口
-c:指定包數量
-w:寫入指定文件裏
若是沒有tcpdump這個命令,咱們須要用「yum install -y tcpdump」命令去安裝一下。上圖中第3列和第4列顯示的信息爲哪個ip+port在鏈接哪個ip+port,後面的信息爲該數據包的相關信息。
直接使用tcpdump -nn -i 網卡名稱展現得太快,沒法全面分析查看,因此將抓包結果輸出到文件
tcpdump -nn -i eth0 -c 100 -w /tmp/1.cap tcpdump -r /tmp/1.cap
(1)用tcpdump嗅探80端口的訪問哪一個ip最高
[root@localhost ~]# tcpdump -i eth0 -tnn dst port 80 -c 100 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 100 packets captured 102 packets received by filter 0 packets dropped by kernel 41 IP 192.168.100.171 29 IP 120.27.173.9 15 IP 120.27.173.8 9 IP 120.27.173.41 6 IP 120.27.173.35
(2)蜘蛛分析,查看是哪些蜘蛛在抓取內容
[root@localhost ~]# tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider' tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C57 packets captured 57 packets received by filter 0 packets dropped by kernel
(3)查看數據庫執行的sql
[root@localhost ~]# tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'