linux監控指標和命令

經常使用命令[]mysql

cplinux

Copyios

mvsql

移動、重命名centos

yum緩存

yum nstall xxx服務器

rmcookie

rm –rf xx網絡

mkdir多線程

建目錄

rpm

rpm –ivh xxx.rpm

tail

tail –f rr.log

find

find /usr/local -name xxx

tar

①tar xzvf xxxx.ta.gz

rz

上傳文件

sz

下載

②cd xxx

./configure

./configure –prefix=/user/local[指定目錄]加參數

wc

行、字、字節數

chmod

chmod 777 –R xxx

head

head -3 sqlq.log

 

 

ps

ps –ef|more

kill

ps -ef | grep xx

kill -9 [xxPID]

③make && make install

grep

查找

 

 

 

 

 

 

 

vi /etc/profile 最下面配置環境變量

 

 

 

2.影響性能的因素

因素1:cpu

因素factor

指標metrics

描述

備註

監測monitor

CPU

/proc/cpuinfo

Load average

等待執行的隊列中進程數+

等待uninterruptable task完成的進程數

cpu負荷的趨勢.

top

Procs

Run queue

Runnable,ready to run(running / waiting for runtime)的進程數【可執行未執行的】

 

vmstat(r)

Blocked

uninterruptible wait(一般因IO)進程數

 

vmstat(b)

System

Context Switch

線程的切換

減小程序無關的請求

vmstat(cs)

Interrupts

正在處理的中斷數:

(hi)Hard interrupts、(si)soft interrupts

 

top (cpu--hi、si)

vmstat(in)

cpu

利用率

User time

處理非內核操做的時間

User%+sys%

好(<70%)通常(85%)糟糕(>=90)

top

vmstat

iostat(avg-cpu)

 

System time

處理內核操做的時間

Waiting

等待io完成的時間

 

Idle time

空閒時間

<5%-à充分利用

Nice time

處理re-nicing進程的時間

 

iostat(nice%)

CPU影響大是最誤區,由於服務器的cpu通常是overconfigured。除非一些cpu密集使用的應用。

簡單解決方法

        若是有多餘的進程,能夠ps –ef來停掉

                   CPU-intensive的進程,能夠renice調整優先級

              SMP-based使用taskset來將進程綁定cpu,避免來回切換

              最新驅動和防火牆,減小對cpu的負載。

案例:CPU高的分析

一、us%  or sy%高,使用命令top;

1.1.1 、us%高,看看是哪一個任務/線程的佔用高,使用top排序或者ps –ef查看

1.1.二、瞭解線程的做用,可以使用strace 查看該進程的執行狀況,分析是否有異常,是否須要調整。

1.2.一、sy%高,查看memory、io方面性能,使用vmstat、iostat命令。

1.2.二、memory方面的問題,考慮是否要調整這方面的參數或增長內存

1.2.二、io方面的問題,考慮是否要增長快速的磁盤驅動等解決方案。

1.2.三、也要查看進程的佔用狀況,用strace查看該進程的執行狀況,分析是否有異常,是否須要調整。

 

因素2:內存

因素factor

指標metrics

描述

監測monitor

備註

Memory

/proc/meminfo

Free memory

Linux把未使用的內存做爲buffer和cache。

top(mem-free)

vmstat(free)

 

Swap usage (si、so)

使用的swap space。

physical memory用完後,

將最近使用過,暫不使用的memory pages

從physical memory寫到swap space。

表示剩餘的可支配物理內存嚴重不足,須要經過與磁盤交換內容來保持系統穩定性;磁盤處理速度要遠小於內存,值越大性能瓶頸越明顯。

top(swap-used)

vmstat(swpd)

si 、so[à0好]:

swap頻繁程度,長期很大,表示內存不夠or未有效利用內存

Buffer

不一樣步設備、優先級不一樣的設備間緩存

top(mem-buffers)

vmstat(buffer)

 

Cache

Cpu和主內存間高速文件緩存(cpu剛用過或循環使用的部分數據,cpu再用時就從cache調用)

top(swap-cached)

vmstat(cache)

 

Slabs

內核使用

vmstat –m

 

Active\inactive memory

活躍和不活躍的內存大小

vmstat -a

 

瓶頸表現

free↓,swpd↑(si、so↑),bi 、bo↑,in↑,cs↑、b↑,wa↑

測試期間,保持內存充足,可用內存>20%

簡單解決方法

        調整swap space,使用大頁面,大塊內存,共享內存;

              調整頁面的大小;

              改進對活動和非活動內存的處理;

              調整換頁率page-out rate.;

              限制服務器上每一個用戶的可用資源;

              停掉不須要的服務;             增長內存;

 

 

因素3:I/O

因素

指標metrics

描述

監測monitor

I/O

 

等待

iowait

等待io操做的時間

好(<20%)通常(=35%)糟糕(>=50%)

iostat(avg-cpu:iowait)

Average wait

實際的io操做時間svctm +

+在io隊列中等待時間

Svctm越接近awai越好

iostat –x  (await)

Average queue length

Io請求隊列長度

iostat –x  (avgqu-sz)

請求數

Tps

每秒處理的io操做數量。

iostat (tps)

r/s、w/s

每秒讀、寫請求數

iostat –x(r/s 、w/s)

或用rrqm/s 、wrqm/s(合併請求)考察

數據量

bi、bo

讀、寫磁盤的塊數(block/s)

vmstat(bi、bo)

iostat(Blk_read、BLk_wrtn)

或用kb、mb作單位考察總讀寫量

KB r/s、KB w/s

每秒對設備讀、寫數量Kb/s

iostat (Kb_read/s、Kb_wrtn/s)

或用MB、塊、扇區作單位考察每秒讀寫量

瓶頸表現

%util)設備繁忙、(await>>svctm)IO請求等待時間長,(avgqu-sz)等待隊列長度大。

簡單解決方法

        少許的大容量磁盤、減小邏輯盤;

                   序列式且控制器的帶寬壓力大,添加更快的磁盤控制器;隨機式,增長磁盤驅動;

                   Raid環境中,添加磁盤驅動;                  增長RAM;

 

 

 

因素4:Network

因素factor

指標metrics

描述

備註

監測monitor

Network

 

收、發送的包數

 

 

 

收、發送的字節數

 

 

每秒衝突數

 

 

掉包的數量

 

 

Overruns

 

 

Errors

 

 

查看網絡流量

watch –n 1 「/sbin/ifconfig eth0|grep bytes」

 

外網:

tx 發送[transport]

rx 接收[receive]

內網相反。

date;ifconfig eth0    顯示當前日期下網卡網絡狀況

 

簡單解決方法

   調整網絡配置;  換網卡、加更快的網卡。     

   修改ipv4 tcp的內核參數;            

案例:大量TIME_WAIT鏈接

使用netstat  –ae|grep  「TIME_WAIT」|wc  –l  #查看多少個TIME_WAIT

 

[每每是由於程序代碼中未關閉mysql鏈接netstat -ae |grep mysql]。

解決方法:

調整內核參數:vi /etc/sysctl.conf

加入如下內容, 修改後,執行/sbin/sysctl –p 讓參數生效:

net.ipv4.tcp_syncookies=1

#開啓SYN Cookies。當SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認0(關閉)

net.ipv4.tcp_tw_reuse=1     #開啓重用。容許將TIME-WAIT socket重用於新的TCP鏈接,默認0(關閉)

net.ipv4.tcp_tw_recycle=1               #開始TCP鏈接中TIME-WAIT socket的快遞迴收,默認0(關閉)

net.ipv4.tcp_fin_timeout=30                     #修改系統默認的TIME_OUT時間

net.ipv4.tcp_keepalive_probes=5            #減小超時前的探測次數

net.ipv4.tcp_keepalive_intvl=20               #探測消息發送頻率

net.ipv4.tcp_keepalive_time=1200

#表示當keepalive啓用時,TCP發送的keepalive消息的頻率。缺省值爲2小時,修改成2分鐘。

net.ipv4.ip_local_port_range=1024 65000

#用於向外鏈接的端口範圍。缺省狀況很小爲32768到61000,改成1024到65000

net.ipv4.tcp_max_syn_backlog=8192

#SYN隊列的長度,默認爲1024,加大了隊列的長度爲8192,可容納更多等待鏈接的網絡鏈接數

net.ipv4.tcp_max_tw_buckets=5000

#同時保持TIME_WAIT的最大數量,如超出,馬上清除TIME_WAIT、打印警告信息。默認180000,改成5000

3.監測性能指標的工具

Use the monitoring tools to to narrow down the bottleneck to the subsystem level.

工具1:top命令

top

動態\實時的運行狀況

當前活躍的進程信息

參數:top –u root(看這user是這root的)、top –p 123(看pid123的)

彙總信息

運行時間

Load average

當前時間\運行時間\用戶數

平均負載(1min、5min、15min),後兩個時間段是重要的

task和cpu

Task:running; sleeping; stopped; zombie

cpu間隔內狀況,多核(按1):

us、sy、id、wa、ni、hi(硬件中斷)、si(軟件中斷)、st(stolen)

Memory Usage

物理內存和虛擬內存狀況

輸入行

k:kill

r:renice(調整任務優先級)

o:列的順序

f:顯示哪些列

u:篩選user

i:忽略空閒和僵死進程

M:駐留內存大小(res)排序

P: %cpu排序

T: time排序

q:quit

A:

S:

列和Task

PID

PPID

S

進程id

父進程id

進程狀態: D=不可中斷的睡眠狀態、R=運行、 S=睡眠

            T=跟蹤/中止、Z=殭屍進程

COMMAND

命令名/命令行

UID

USER

RUSER

GROUP

進程全部者的用戶id

進程全部者的用戶名

Real user name

進程全部者的組名

PR

NI

優先級

nice值。負值表示高優先級,正值表示低優先級

%CPU

TIME

上次更新到如今的CPU時間佔用百分比

進程使用的CPU時間總計,秒

%MEM

VIRT

SWAP

RES

CODE

DATA

進程使用的物理內存百分比

進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES

進程使用的虛擬內存中,SWAP SPACE大小, kb。

進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA

可執行代碼佔用的物理內存大小, kb

可執行代碼之外的部分(數據段+棧)佔用的物理內存大小, kb

nFLT

頁面錯誤次數

nDRT

最後一次寫入到如今,被修改過的頁面數。

           

 

 

 

工具2:vmstat命令

vmstat

vmstat [options] [delay [count]]

第一個條是自開機到如今的平均值(不指定delay,僅顯示此條)

下面的是delay時間間隔的抽樣 ,procs、memory都是瞬時的狀況

參數:vmstat –t(時間戳)

Procs

r

Runnable,ready to run(running / waiting for runtime)的進程數

B

uninterruptible wait(一般由於io)的進程數

Memory

swpd

使用的虛擬內存大小KB

free

空閒內存大小

Buff

被用做Buffer的內存大小

Cache

被用做cache的內存大小

Swap

si、so

磁盤分頁到內存memory Swapped in 大小(kb/s)

內存分頁到磁盤memory Swapped out 大小。si so 趨於0,內存狀態較好。

Io

bi、bo

讀、寫磁盤的塊數(block/s)

System

in、cs

每秒中斷數

每秒上下文切換數

Cpu

us、sy、id、wa

Cpu時間%

St

Time stolen from a virtual machine

 

 

 

工具3:iostat命令

iostat

從開機到當前執行時刻的統計信息

參數:iostat –x(詳細信息)

 

CPU

多核:平均

%user

Cpu處理非內核%

 

%nice

用戶級別with a nice priority cpu使用%

 

%sys

內核使用cpu%

 

%idle

空閒時間的%

 

Device

Device

塊設備名稱

 

請求數

tps

對應設備的每秒Io請求數

 

rrqm/s

wrqm/s

每秒該設備的讀、寫請求被合併數

 

r/s、w/s

每秒讀rio、寫wio請求數

 

數據量

Blk_read/s

Blk_wrtn/s

Blk_read

BLk_wrtn

每秒讀、寫數據量(塊數)。/讀、寫的總量。

Blk_read、BLk_wrtn從開機到如今 讀寫的總塊數

 

塊的大小:dumpe2fs –h /dev/sda1 |grep –F 「Block size」

 

Kb_read/s

Kb_wrtn/s

Kb_read

Kb_wrtn

每秒讀、寫數據量(KB)/讀、寫的總量。----- iostat –k

rMB/s、wMB/s   (MB)              ----- iostat –m

 

rsec/s

Wsec/s

每秒讀、寫數據量(扇區

 

Avgrq-sz

每一個io請求的平均扇區數。

 

等待

await

r_await

w_await

平均每次設備i/o等待和操做的時間。

 
 

svctm

平均每次設備io操做時間(接近await表示等待越少)

 

Avgqu-sz

平均io隊列長度。

 

%util

設備繁忙程度(80%很忙)

 

工具4:strace命令

strace

被進程調用的系統調用的執行狀況,定位異常的具體位置。

先使用top命令定位異常的進程

strace  –T –p [pid]

顯示每次調用所耗時間

 

strace –c –p [pid]

strace –c find/etc –name xxx   (strace –c <command>)

 

 

統計每一系統調用的內核執行時間、次數和出錯次數等

 

 

 

     

 

 

工具5:netstat命令

netstat

各類網絡相關信息,如網絡鏈接,路由表,Interface Statistics\masquerade鏈接

Active Internet connections

Recv-Q

Send-Q

接收但未作處理的字節數。

發送但還未被確認的字節數。

通常應是0。大於0表示正在隊列中堆積數據

Active

UNIX domain sockets

Proto

Proto顯示鏈接使用的協議(tcp udp )

RefCnt

RefCnt表示鏈接到本套接口上的進程號

Types

Types顯示套接口的類型

State

socket狀態:

LISTEN(服務端socket正在監聽)ESTABLISHED(已創建鏈接)

SYN_SENT(發送鏈接請求後等待匹配)SYN_RECV(收到鏈接請求等鏈接請求的確認)

FIN_WAIT1(發送中斷請求後,等中斷確認),FIN_WAIT2(收到ack後,稍後中斷)

TIME_WAIT(收到fin、 ack,socket等關閉對剩餘數據包的處理後再回復中斷確認)

CLOSE_WAIT(收到fin後回覆了ack,由本地確認是否關閉鏈接)

CLOSING(都中斷了,但還有數據傳輸)

LAST_ACK(被動關閉在發送了fin後,再等待對方的ack,收到ack後關閉鏈接)

CLOSED(沒有任何鏈接狀態)unknown(未知)

Path

Path表示鏈接到套接口的其它進程使用的路徑名。

-a  (all)顯示全部listen和non-listen,默認不顯示listen

-t  (tcp)僅顯示tcp相關選項;-u  (udp)僅顯示udp相關選項

-n  拒絕顯示別名,能顯示數字的所有轉化成數字。

 

-p  顯示創建鏈接的pid和程序名    [root@centos0 xampp]# netstat -anp|grep mysql

-e  顯示擴展信息,例如uid等netstat -ae |grep mysql

-s  按各個協議進行統計

-c  不停的刷新continuous listing。

 

提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到

 

ps命令

ps

詳細的進程信息

Pstree\ \pmap

ps –elFL

F

Process flag

S

進程狀態:

S=sleeping、R=runnig、T=stopped ortraced、D=interuptable sleep,Z=zombie

UID

PID

PPID

LWP

LWP[Light weight process,or thread]ID of the lwp being reported

C

Cpu利用率

NLWP

Number of lwps(threads)in the process

PRI

Priority of theprocess

NI

Niceness level

ADDR

Process address space【不顯示的】

SZ

Code+data+stack 總的memory大小(kb)

WCHAN

Sleeping的Kernel function名。- 進程爲運行,*多線程

RSS

駐留集大小、non-swapped物理內存使用大小

PSR

Processor that process is currently assigned to.

STIME

本次開始的時間

TTY

終端

TIME

自動啓動佔用的cpu時間

CMD

開啓命令(有參數)

Ps –A :顯示正在運行的全部進程

工具6:Iptraf使用(待整理)

工具7:spotlight on linux使用(待整理)

各類命令

 

 image

 

 

4.調優(尚未熟悉)

注:一點一點的調,調了用同一方式來衡量性能改變狀況

         修改各項配置相關信息前,要備份。記錄每次修改,尤爲是會影響其餘方面的修改。

不要在生產環境調

調優完成後,繼續監測其它指標,直到達到性能目標

調優後再評估性能狀況,和基準對比。

ulimit調整內核參數

ulimit –a #用來顯示當前的各類用戶進程限制。linux對每一個用戶、系統限制了最大的進程數。

vi /etc/profile

ulimit –u 10000 #用戶的最大進程數

ulimit –n 4096 #每一個進程能夠打開的文件數

ulimit –d unlimited #數據段長度

ulimit –m unlimited #最大內存大小

ulimit –s unlimited #堆棧的大小

ulimit –t unlimited #cpu時間

ulimit –v unlimited#虛擬內存

limits.conf

解除linux系統的最大進程數和最大文件打開限制

vi /etc/security/limits.conf,添加如下內容,注意添加完成後重啓

*表明全部用戶,也能夠指定用戶;noproc 表明最大的進程數;nofile 表明最大文件打開數

* soft noproc 11000

*hard noproc 11000

*soft nofile 8192

*hard nofile 20480

 

 

 

 

 

命令: show status like '%下面變量%';

Aborted_clients 因爲客戶沒有正確關閉鏈接已經死掉,已經放棄的鏈接數量.

Aborted_connects 嘗試已經失敗的MySQL服務器的鏈接的次數.

Connections 試圖鏈接MySQL服務器的次數.

Created_tmp_tables 當執行語句時,已經被創造了的隱含臨時表的數量.

Delayed_insert_threads 正在使用的延遲插入處理器線程的數量.

Delayed_writes 用INSERT DELAYED寫入的行數.

Delayed_errors 用INSERT DELAYED寫入的發生某些錯誤(可能重複鍵值)的行數.

Flush_commands 執行FLUSH命令的次數.

Handler_delete 請求從一張表中刪除行的次數.

Handler_read_first 請求讀入表中第一行的次數.

Handler_read_key 請求數字基於鍵讀行.

Handler_read_next 請求讀入基於一個鍵的一行的次數.

Handler_read_rnd 請求讀入基於一個固定位置的一行的次數.

Handler_update 請求更新表中一行的次數.

Handler_write 請求向表中插入一行的次數.

Key_blocks_used 用於關鍵字緩存的塊的數量.

Key_read_requests 請求從緩存讀入一個鍵值的次數.

Key_reads 從磁盤物理讀入一個鍵值的次數.

Key_write_requests 請求將一個關鍵字塊寫入緩存次數.

Key_writes 將一個鍵值塊物理寫入磁盤的次數.

Max_used_connections 同時使用的鏈接的最大數目.

Not_flushed_key_blocks 在鍵緩存中已經改變可是還沒被清空到磁盤上的鍵塊.

Not_flushed_delayed_rows 在INSERT DELAY隊列中等待寫入的行的數量.

Open_tables 打開表的數量.

Open_files 打開文件的數量.

Open_streams 打開流的數量(主要用於日誌記載)

Opened_tables 已經打開的表的數量.

Questions 發往服務器的查詢的數量.

Slow_queries 要花超過long_query_time時間的查詢數量.

Threads_connected 當前打開的鏈接的數量.

Threads_running 不在睡眠的線程數量.

Uptime 服務器工做了多少秒.

相關文章
相關標籤/搜索