1. 如何查看當前linux系統的狀態,如CPU使用,內存使用,負載情況等.
可以用TOP工具查看實時狀態。
top進入視圖:
第一行:
10:01:23 當前系統時間
126 days, 14:29 系統已經運行了126天14小時29分鍾(在這期間沒有重啟過)
2 users 當前有2個用戶登錄系統
load average: 1.15, 1.42, 1.44 load average後面的三個數分別是1分鍾、5分鍾、15分鍾的負載情況。
load average數據是每隔5秒鍾檢查一次活躍的進程數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
第二行:
Tasks 任務(進程),系統現在共有183個進程,其中處於運行中的有1個,182個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵屍)的有0個。
第三行:cpu狀態
6.7% us 用戶空間佔用CPU的百分比。
0.4% sy 內核空間佔用CPU的百分比。
0.0% ni 改變過優先順序的進程佔用CPU的百分比
92.9% id 空閑CPU百分比
0.0% wa IO等待佔用CPU的百分比
0.0% hi 硬中斷(Hardware IRQ)佔用CPU的百分比
0.0% si 軟中斷(Software Interrupts)佔用CPU的百分比
第四行:內存狀態
8306544k total 物理內存總量(8GB)
7775876k used 使用中的內存總量(7.7GB)
530668k free 空閑內存總量(530M)
79236k buffers 緩存的內存量 (79M)
第五行:swap交換分區
2031608k total 交換區總量(2GB)
2556k used 使用的交換區總量(2.5M)
2029052k free 空閑交換區總量(2GB)
4231276k cached 緩沖的交換區總量(4GB)
2. 如何查看當前Linux 系統的狀態,如CPU 使用,內存使用,負載情況
cpuinfo 主機自CPU 信息
filesystems 文件系統信息
meninfo 主機內存信息
version Linux 內存版本信息
diskstatus 磁碟負載情況
另外top 命令可以動態的顯示當前系統進程用戶的使用情況,而且是動態的顯示出來,尤其是在該命令顯示出來的對上方對系統的情況進行匯總.
系統情況的各種使用情況,傳智播客的社區都有很全面的老師的總結,我哥們就在傳智學的,現在月薪12k。我在自學,社區的信息就足夠了。
3. linux 下查看網路負載命令
用 netstat 查看 Linux 網路狀況。
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
前面的 netstat -n是的命令,Windows和Linux都可以用,結果顯示內容差不多
後面的 awk'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 是Linux下的命令,主要作用是對netstat輸出的結果進行過濾和處理:
運行這一句之後,顯示的結果類似如下:
TIME_WAIT 27
FIN_WAIT1 435
FIN_WAIT2 89
ESTABLISHED 82
SYN_RECV 64
CLOSING 4
LAST_ACK 90
內容解釋如下:
TIME-WAIT:等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
FIN-WAIT-1:等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN-WAIT-2:從遠程TCP等待連接中斷請求
ESTABLISHED:代表一個打開的連接
SYN-RECV:再收到和發送一個連接請求後等待對方對連接請求的確認
SYN-SENT:再發送連接請求後等待匹配的連接請求
CLOSING:等待遠程TCP對連接中斷的確認
CLOSED:沒有任何連接狀態
CLOSE-WAIT:等待從本地用戶發來的連接中斷請求
LAST-ACK:等待原來的發向遠程TCP的連接中斷請求的確認
LISTEN:偵聽來自遠方的TCP埠的連接請求
4. Linux裡面查看負載的命令是什麼
linux中執行[root @xyz ~]# top命令回車即可查看負載信息
5. 如何查看linux伺服器負載
查看伺服器負載有多種命令,w、vmstat或者uptime都可以直接展示負載。
[hs@master opt]$ uptime
11:00:06 up 106 days, 19:36, 3 users, load average: 0.00, 0.03, 0.05
信息顯示依次為:現在時間、系統已經運行了多長時間、目前有多少登陸用戶、系統在過去的1分鍾、5分鍾和15分鍾內的平均負載。
1可以被認為是最優的負載值。負載是會隨著系統不同改變得。單CPU系統1-3和SMP系統6-10都是可能接受的。
[hs@master opt]$ w
11:00:38 up 106 days, 19:37, 3 users, load average: 0.00, 0.03, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
spark59 pts/0 09:47 14:46 1:08 0.01s sshd: spark59 [priv]
spark59 pts/1 09:47 11:10 55.77s 0.00s sshd: spark59 [priv]
spark59 pts/2 09:58 6.00s 0.11s 0.00s sshd: spark59 [priv]
load average分別對應於過去1分鍾,5分鍾,15分鍾的負載平均值。
[hs@master opt]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2276632 132056 1544508 0 0 20 75 1 0 2 0 97 0 0
procs
r 列表示運行和等待cpu時間片的進程數,如果長期大於1,說明cpu不足,需要增加cpu。
b 列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。
cpu表示cpu的使用狀態
us 列顯示了用戶方式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化用戶的程序。
sy 列顯示了內核進程所花費的cpu時間的百分比。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
wa 列顯示了IO等待所佔用的CPU時間的百分比。這里wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁碟大量隨機訪問造成的,也可能磁碟或者磁碟訪問控制器的帶寬瓶頸造成的(主要是塊操作)。
id 列顯示了cpu處在空閑狀態的時間百分比
system 顯示採集間隔內發生的中斷數
in 列表示在某一時間間隔中觀測到的每秒設備中斷數。
cs列表示每秒產生的上下文切換次數,如當 cs 比磁碟 I/O 和網路信息包速率高得多,都應進行進一步調查。
memory
swpd 切換到內存交換區的內存數量(k表示)。如果swpd的值不為0,或者比較大,比如超過了100m,只要si、so的值長期為0,系統性能還是正常
free 當前的空閑頁面列表中內存數量(k表示)
buff 作為buffer cache的內存數量,一般對塊設備的讀寫才需要緩沖。
cache: 作為page cache的內存數量,一般作為文件系統的cache,如果cache較大,說明用到cache的文件較多,如果此時IO中bi比較小,說明文件系統效率比較好。
swap
si 由內存進入內存交換區數量。
so由內存交換區進入內存數量。
IO
bi 從塊設備讀入數據的總量(讀磁碟)(每秒kb)。
bo 塊設備寫入數據的總量(寫磁碟)(每秒kb)
這里我們設置的bi+bo參考值為1000,如果超過1000,而且wa值較大應該考慮均衡磁碟負載,可以結合iostat輸出來分析。
以上三個個命令只是單純的反映出負載,linux提供了更為強大,也更為實用的top命令來查看伺服器負載。
top命令能夠清晰的展現出系統的狀態,而且它是實時的監控,按q退出。
[hs@master opt]$ top
top - 11:01:13 up 106 days, 19:37, 3 users, load average: 0.05, 0.04, 0.05
Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.1 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 8011936 total, 5733520 used, 2278416 free, 131392 buffers
KiB Swap: 0 total, 0 used, 0 free. 1543588 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32001 hs 20 0 1265020 256252 38172 S 2.3 3.2 0:56.77 java
2696 hs 20 0 3726664 447420 60 S 0.7 5.6 819:57.88 java
29566 root 20 0 64780 4668 2628 S 0.7 0.1 43:18.42 AliYunDun
1624 hs 20 0 1789456 292492 4928 S 0.3 3.7 298:23.89 java
2008 hs 20 0 1996320 438004 4604 S 0.3 5.5 849:44.95 java
2465 hs 20 0 1258944 170752 264 S 0.3 2.1 89:18.25 java
3284 hs 20 0 2867828 210788 3756 S 0.3 2.6 259:29.98 java
29580 root 20 0 836552 6320 2584 S 0.3 0.1 13:10.27 AliHids
1 root 20 0 63648 25184 1424 S 0.0 0.3 4:44.45 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:01.49 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 8:01.90 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:30.46 migration/0
Tasks行展示了目前的進程總數及所處狀態,要注意zombie,表示僵屍進程,不為0則表示有進程出現問題。
Cpu(s)行展示了當前CPU的狀態,us表示用戶進程佔用CPU比例,sy表示內核進程佔用CPU比例,id表示空閑CPU百分比,wa表示IO等待所佔用的CPU時間的百分比。wa佔用超過30%則表示IO壓力很大。
Mem行展示了當前內存的狀態,total是總的內存大小,userd是已使用的,free是剩餘的,buffers是目錄緩存。
Swap行同Mem行,cached表示緩存,用戶已打開的文件。如果Swap的used很高,則表示系統內存不足。
在top命令下,按1,則可以展示出伺服器有多少CPU,及每個CPU的使用情況
一般而言,伺服器的合理負載是CPU核數*2。也就是說對於8核的CPU,負載在16以內表明機器運行很穩定流暢。如果負載超過16了,就說明伺服器的運行有一定的壓力了。
在top命令下,按shift + "c",則將進程按照CPU使用率從大到小排序,按shift+"p",則將進程按照內存使用率從大到小排序,很容易能夠定位出哪些服務佔用了較高的CPU和內存。
僅僅有top命令是不夠的,因為它僅能展示CPU和內存的使用情況,對於負載升高的另一重要原因——IO沒有清晰明確的展示。linux提供了iostat命令,可以了解io的開銷。
輸入iostat -x 1 10命令,表示開始監控輸入輸出狀態,-x表示顯示所有參數信息,1表示每隔1秒監控一次,10表示共監控10次。
其中rsec/s表示讀入,wsec/s表示每秒寫入,這兩個參數某一個特別高的時候就表示磁碟IO有很大壓力,util表示IO使用率,如果接近100%,說明IO滿負荷運轉。
[hs@master opt]$ iostat -x 1 10
Linux 3.10.0-123.9.3.el7.x86_64 (master) 07/29/2016 _x86_64_(4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.47 0.00 0.38 0.20 0.00 96.95
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 0.86 0.77 1.45 50.88 139.71 172.11 0.18 81.22 3.87 122.28 1.52 0.34
vdb 0.00 37.36 0.37 3.16 28.06 159.69 106.50 0.02 4.69 5.87 4.55 1.86 0.65
avg-cpu: %user %nice %system %iowait %steal %idle
0.75 0.00 0.25 0.25 0.00 98.75
總結:
(1)使用top命令查看負載,在top下按「1」查看CPU核心數量,shift+"c"按cpu使用率大小排序,shif+"p"按內存使用率高低排序;
(2)使用iostat -x 命令來監控io的輸入輸出是否過大
6. Linux裡面uptime命令作用是什麼
[root@oldboy ~]# uptime
11:45:25 up 5 days, 13:20, 3 users, load average: 0.00, 0.01, 0.05
uptime內容顯示的內容一次是系統時間,開機到現在的天數,用戶登錄數,以及平均負載。
核心是平均負載,其實就是【單位時間內的活躍進程數】。
2顆,單顆4核CPU為例:
1分鍾:10.00 #CPU處理進程1分鍾的繁忙程度,忙碌1分鍾。
5分鍾:8.01 #CPU處理進程5分鍾的繁忙程度,忙碌了5分鍾
15分鍾:5.05 #CPU處理進程15分鍾的繁忙程度,忙碌持續15分鍾,15分鍾內平均值5.
uptime:故障恢復了。
1分鍾:1.00 #CPU處理進程1分鍾的繁忙程度,忙碌1分鍾。
5分鍾:8.01 #CPU處理進程5分鍾的繁忙程度,忙碌了5分鍾
15分鍾:5.05 #CPU處理進程15分鍾的繁忙程度,忙碌持續15分鍾,15分鍾內平均值5.
==============================================
總結:15分鍾負載值12,是高是低呢
負載數值/總的核心數=1 #開始慢的臨界點,實際上1*70%==關注的臨界點。
12/8=1.2 大於1就說明有問題。
負載不要超過5,是臨界點。
2顆單顆4核CPU,共8核,負載就是8*70%=5左右。
需要關注負載的值:總的核心數*70%=關注的點
==================要掌握的============================
1.平均負載是運行隊列中活躍的進程數。
2.平均負載,1,5,15分鍾內的負載。
3.需要關注負載的值:總的核心數*70%=關注的點
4.輔助top,ps,uptime,sar,mpstat,pidstat,iostat,排查問題。
5.strace跟蹤進程系統調用。
6.記住幾個案例(面試講故事)。
面試官問:
你在工作中遇到過哪些生產故障,是怎麼解決的?
最好和資料庫相關(負載高),和web相關(PHP進程100%,JAVA內存泄漏)
==================要掌握的============================
***6.平均負載案例分析實戰\***
下面,我們以三個示例分別來看這三種情況,並用 stress、mpstat、pidstat 等工具,找出平均負載升高的根源。
stress 是 Linux 系統壓力測試工具,這里我們用作異常進程模擬平均負載升高的場景。
mpstat 是多核 CPU 性能分析工具,用來實時查看每個 CPU 的性能指標,以及所有 CPU 的平均指標。
pidstat 是一個常用的進程性能分析工具,用來實時查看進程的 CPU、內存、I/O 以及上下文切換等性能指標。
#如果出現無法使用mpstat、pidstat命令查看%wait指標建議更新下軟體包
yum install sysstats -y
yum install stress -y
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
***場景一:CPU 密集型進程\***
1.首先,我們在第一個終端運行 stress 命令,模擬一個 CPU 使用率 100% 的場景:
[root@oldboy ~]# stress --cpu 1 --timeout 600
2.接著,在第二個終端運行 uptime 查看平均負載的變化情況
# 使用watch -d 參數表示高亮顯示變化的區域(注意負載會持續升高)
[root@oldboy ~]# watch -d uptime
*3.最後,在第三個終端運行 mpstat 查看 CPU 使用率的變化情況*
# -P ALL 表示監控所有CPU,後面數字5 表示間隔5秒後輸出一組數據
[root@oldboy ~]# mpstat -P ALL 5
#單核CPU,所以只有一個all和0
4.從終端二中可以看到,1 分鍾的平均負載會慢慢增加到 1.00,而從終端三中還可以看到,正好有一個 CPU 的使用率為 100%,但它的 iowait 只有 0。這說明,平均負載的升高正是由於 CPU 使用率為 100% 。那麼,到底是哪個進程導致了 CPU 使用率為 100% 呢?可以使用 pidstat 來查詢

# 間隔5秒輸出一組數據
[root@oldboy ~]# pidstat -u 5 1
#從這里可以明顯看到,stress進程的CPU使用率為100%。
- 模擬cpu負載高 `stress --cpu 1 --timeout 100`
- 通過uptime或w 查看 `watch -d uptime`
- 查看整體狀態mpstat -P ALL 1 查看每個cpu核心使用率
- 精確到進程: pidstat 1
****場景二:I/O 密集型進程\****
1.首先還是運行 stress 命令,但這次模擬 I/O 壓力,即不停地執行 sync
[root@oldboy ~]# stress --io 1 --timeout 600s #利用sync()
stress --hdd 8 --hdd-bytes 1g # hd harkdisk 創建進程去進程寫
*2.然後在第二個終端運行 uptime 查看平均負載的變化情況:*
[root@oldboy ~]# watch -d uptime
18:43:51 up 2 days, 4:27, 3 users, load average: 1.12, 0.65, 0.00
*3.最後第三個終端運行 mpstat 查看 CPU 使用率的變化情況:*
# 顯示所有 CPU 的指標,並在間隔 5 秒輸出一組數據
[root@oldboy ~]# mpstat -P ALL 5
#會發現cpu的與內核打交道的sys佔用非常高
*4.那麼到底是哪個進程,導致 iowait 這么高呢?我們還是用 pidstat 來查詢*
# 間隔5秒後輸出一組數據,-u 表示CPU指標
[root@oldboy ~]# pidstat -u 5 1
#可以發現,還是 stress 進程導致的。
- 通過stress 模擬大量進程讀寫 `stress --hdd 4 `
- 通過w/uptime查看系統負載信息 `watch -d uptime`
- 通過top/mpstat 排查 `mpstat -P ALL 1 或 top 按1`
- 確定是iowati `iostat 1查看整體磁碟讀寫情況 或iotop -o 查看具體哪個進程讀寫`
- 根據對應的進程,進行相關處理.
***場景三:大量進程的場景 高並發場景 \***
*當系統中運行進程超出 CPU 運行能力時,就會出現等待 CPU 的進程。*
*1.首先,我們還是使用 stress,但這次模擬的是 4 個進程*
[root@oldboy ~]# stress -c 4 --timeout 600
*2.由於系統只有 1 個 CPU,明顯比 4 個進程要少得多,因而,系統的 CPU 處於嚴重過載狀態*
*3.然後,再運行 pidstat 來看一下進程的情況:*
# 間隔5秒後輸出一組數據
[root@oldboy ~]# pidstat -u 5 1
*可以看出,4 個進程在爭搶 1 個 CPU,每個進程等待 CPU 的時間(也就是代碼塊中的 %wait 列)高達 75%。這些超出 CPU 計算能力的進程,最終導致 CPU 過載。*
****分析完這三個案例,我再來歸納一下平均負載與CPU\****
***平均負載提供了一個快速查看系統整體性能的手段,反映了整體的負載情況。但只看平均負載本身,我們並不能直接發現,到底是哪裡出現了瓶頸。所以,在理解平均負載時,也要注意:
平均負載高有可能是 CPU 密集型進程導致的;
平均負載高並不一定代表 CPU 使用率高,還有可能是 I/O 更繁忙了;
當發現負載高的時候,你可以使用 mpstat、pidstat 等工具,輔助分析負載的來源****
**系統負載的計算和意義**
進程以及子進程和線程產生的計算指令都會讓cpu執行,產生請求的這些進程組成"運行隊列",等待cpu執行,這個隊列就是系統負載, 系統負載是所有cpu的運行隊列的總和.
[root@oldboye ~]# w
20:25:48 up 95 days, 9:06, 1 user, load average: 2.92, 0.00, 0.00
//假設當前計算機有4個核心的cpu,當前的負載是2.92
cpu1 cpu2 cpu3 cpu4
2.94/4(個cpu核心) = 73%的cpu資源被使用,剩下27%的cpu計算資源是空想的
//假設當前的計算有2個核心的cpu,當前的負載是2.92
2.92/2 = 146% 已經驗證超過了cpu的處理能力
7. 日常故障排查流程(含日誌)
- w/uptime, 查看負載
- ps aux/top 看看 cpu百分比, io wait或者是內存佔用的高? (三高 cpu,io,內存)
- top檢查具體是哪個進程,找出可疑進程
- 追蹤這個進程使用情況,做什麼的?
- 看看對應**日誌**是否有異常
- 系統日誌: /var/log/messages(系統通用日誌) /var/log/secure(用戶登錄情況)
- 服務軟體的日誌
***3.那平均負載為多少時合理\***
*最理想的狀態是每個 CPU核心 上都剛好運行著一個進程,這樣每個 CPU 都得到了充分利用。所以在評判平均負載時,首先你要知道系統有幾個 CPU核心,這可以通過 top 命令獲取,或`grep 'model name' /proc/cpuinfo`*
系統平均負載被定義為在特定時間間隔內運行隊列中的平均進程數。如果一個進程滿足以下條件則其就會位於運行隊列中:
- 它沒有在等待I/O操作的結果
- 它沒有主動進入等待狀態(也就是沒有調用'wait')
- 沒有被停止(例如:等待終止)
《內容來自老男孩老師的課堂筆記》
7. 如何查看linux伺服器硬碟IO讀寫負載
打開終端
用top命令查看。輸入:
top#查看swap
iostat-x110#查看%util%idle
#如果iostat沒有要yuminstallsysstat
#如果%util接近100%,說明產生的I/O請求太多,I/O系統已專經滿負荷,該磁碟可屬能存在瓶頸。idle小於70%IO壓力就較大了,一般讀取速度有較多的wait.
#如果你想對硬碟做一個IO負荷的壓力測試可以用如下命令
timeddif=/dev/zerobs=1Mcount=2048of=direct_2G
#此命令為在當前目錄下新建一個2G的文件
歡迎追問