經常使用命令[]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 最下面配置環境變量 |
|
|
因素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的負載。 |
一、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查看該進程的執行狀況,分析是否有異常,是否須要調整。
因素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.; 限制服務器上每一個用戶的可用資源; 停掉不須要的服務; 增長內存; |
因素 |
指標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; |
因素factor |
指標metrics |
描述 |
備註 |
監測monitor |
Network
|
收、發送的包數 |
|
|
|
收、發送的字節數 |
|
|
||
每秒衝突數 |
|
|
||
掉包的數量 |
|
|
||
Overruns |
|
|
||
Errors |
|
|
||
查看網絡流量 |
watch –n 1 「/sbin/ifconfig eth0|grep bytes」
|
外網: tx 發送[transport] rx 接收[receive] 內網相反。 |
||
date;ifconfig eth0 顯示當前日期下網卡網絡狀況
|
||||
簡單解決方法 |
||||
調整網絡配置; 換網卡、加更快的網卡。 修改ipv4 tcp的內核參數; |
使用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
Use the monitoring tools to to narrow down the bottleneck to the subsystem level.
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 |
最後一次寫入到如今,被修改過的頁面數。 |
||||
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 |
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請求的平均扇區數。 |
|
||
等待 |
awaitr_await w_await |
平均每次設備i/o等待和操做的時間。 |
||
svctm |
平均每次設備io操做時間(接近await表示等待越少) |
|||
Avgqu-sz |
平均io隊列長度。 |
|
||
%util |
設備繁忙程度(80%很忙) |
|
strace |
被進程調用的系統調用的執行狀況,定位異常的具體位置。 先使用top命令定位異常的進程 |
|
strace –T –p [pid] 顯示每次調用所耗時間 |
|
|
strace –c –p [pid] strace –c find/etc –name xxx (strace –c <command>)
統計每一系統調用的內核執行時間、次數和出錯次數等 |
|
|
|
|
|
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 |
詳細的進程信息 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 :顯示正在運行的全部進程 : |
注:一點一點的調,調了用同一方式來衡量性能改變狀況
修改各項配置相關信息前,要備份。記錄每次修改,尤爲是會影響其餘方面的修改。
不要在生產環境調
調優完成後,繼續監測其它指標,直到達到性能目標
調優後再評估性能狀況,和基準對比。
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#虛擬內存
解除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 服務器工做了多少秒.