Linux後臺開發工具箱
https://download.csdn.net/download/aquester/10847097
目錄
4.17. dstat可取代vmstat/iostat/netstat/ifstat的工具 8
4.18. MultiTail類似tail的同時監控多個文件工具 9
7.1. valgrind和qcachegrind記憶體分析工具 12
12. process_monitor.sh程序監控重啟工具 26
13.2. 批量上傳檔案工具:mooon_upload 28
1. 前言
本文是個大雜燴,內容為日常點滴的日積月累,持續更新當中,可關注部落格(https://blog.csdn.net/Aquester或http://aquester.blog.chinaunix.net),檢視最新版本。文中的內容,可幫忙開發提升分析和定位各類問題,比如找出導致IO負載高的程序等,以及一些簡單的運維工作等。
2. 指令碼類工具
2.1. sed命令-字串文字操作
如需直接修改檔案方式替換,只需sed後帶引數“-i”。
1) 單引號替換(特殊字元需要使用反斜線”\”進行轉義)
sed 's/原字串/替換字串/' |
2) 雙引號替換(如要替換的包含了“/”,則可使用“|”做分隔符)
sed "s/原字串包含'/替換字串包含'/" |
3) 問號替換
sed 's?原字串?替換字串?' |
4) 同時多個替換
不同替換間使用分號分開。
2.2. sed和awk使用外部變數
x=MM sed 's/AB/'$x'/g' filename 或 sed 's/AB/'"$x"'/g' filename
sed 's/'"$val"'//' filename
awk '{ print "'$x'" }' filename |
2.3. awk給外部變數賦值
假設將值存在檔案t中,檔案t內容如下,只有一行:
a b c |
需要將a、b和c分別賦給外部變數x、y和z,則指令碼可寫成如下:
eval $(awk '{ printf("x=%s\ny=%s\nz=%s",$1,$2,$3); }' ./t) echo $x echo $y echo $z |
請注意printf函式中的換行符\n是必須的,起關鍵作用的是eval命令,它在很多場景有特別的用處。
3. 裝置類工具
3.1. 檢視網絡卡型號
lspci | grep -i ethernet |
3.2. dmidecode檢視所有硬體資訊工具
3.3. lscpu檢視cpu工具
3.4. lspci檢視主機板工具
使用示例:
lspci -vvv lspci -vvv -t |
3.5. lsscsi檢視SCSI卡工具
4. 系統類工具
4.1. sar系統綜合工具
全稱“System Activity Reporter”,即系統活動情況報告,最為全面的系統性能分析工具之一,也可用來檢視網路流量。
4.2. vmstat系統級記憶體監測工具
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 1397364 3553340 775800 22420964 0 0 0 41 0 0 6 10 84 0 0 |
4.3. iostat系統級磁碟IO監測工具
$ iostat Linux 3.10.1-1-XXX-0041 (UN) 2018年12月12日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle 6.13 0.01 10.00 0.02 0.00 83.84
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sdb 0.11 0.11 3.66 3818251 131342429 sda 6.06 1.54 158.24 55370852 5672335360 dm-0 0.00 0.03 0.02 1126394 833860 dm-5 0.00 0.00 0.00 45657 5116 dm-6 0.00 0.00 0.00 45657 5116 dm-1 0.00 0.00 0.00 45658 5110 dm-2 0.00 0.00 0.00 45658 5116 dm-3 0.00 0.00 0.00 46478 5216 dm-4 0.00 0.00 0.00 43486 3369 dm-7 0.00 0.00 0.00 43269 3361 |
4.4. iotop程序級磁碟IO監測工具
4.5. top和htop
htop為top的加強版本。
4.6. 定時檢視CPU
mpstat -P ALL 1 mpstat -I SUM 1 |
示例(每秒顯示一次):
mpstat -P ALL 1 |
4.7. 檢視系統中斷
cat /proc/interrupts |
4.8. 檢視網絡卡中斷
grep eth1 /proc/interrupts |awk '{print $NF}' |
4.9. 檢視中斷親和性
cat /proc/irq/74/smp_affinity # 以中斷74為例 |
4.10. lsof
全稱“List Open Files”,可用來檢視程序打開了哪些檔案,也可用來檢視一個檔案被哪些程序打開了,或者一個埠是哪個程序開啟的等。
1) 檢視埠被誰佔用
lsof -i:port,如:lsof -i:80 |
2) 顯示開啟檔案abc.txt的程序
lsof abc.txt |
3) 顯示abc程序現在開啟的檔案
lsof -c abc |
4) 顯示目錄下被程序開啟的檔案
lsof +d /usr/local/ |
5) 顯示使用fd為4的程序
lsof -d 4 |
6) 以UID,列出開啟的檔案
lsof -u username |
7) 看程序號為12的程序打開了哪些檔案
lsof -p 12 |
8) 反覆執行,重新整理頻率為2秒
lsof -i:10888 -r 2 |
ls +r 死迴圈執行,直到沒有結果,如已沒有程式佔用埠號10888。
4.11. fuser
和lsof有些類似的功能,可檢視檔案、檔案系統或套接字被哪些程序打開了。
4.12. free檢視記憶體工具
4.13. screen、byobu和tmux分屏工具
4.14. dtach
用來模擬screen的detach的功能的小工具:http://dtach.sourceforge.net/。
4.15. slabtop檢視核心slab快取工具
4.16. dmesg檢測和控制核心環緩衝工具
4.17. dstat可取代vmstat/iostat/netstat/ifstat的工具
1) 示例1:
$ dstat You did not select any stats, using -cdngy by default. ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 4 6 89 0 0 0| 746B 118k| 0 0 | 0 18B| 850 5461 8 9 82 0 0 0| 0 92k| 111k 71k| 0 0 |6888 15k 17 39 44 0 0 0| 0 96k| 107k 62k| 0 0 |7392 19k 2 3 94 0 0 0| 0 484k| 124k 171k| 0 0 |6855 13k |
2) 示例2:
# dstat -l -m -r -c --top-io --top-mem --top-cpu ---load-avg--- ------memory-usage----- --io/total- ----total-cpu-usage---- ----most-expensive---- --most-expensive- -most-expensive- 1m 5m 15m | used buff cach free| read writ|usr sys idl wai hiq siq| i/o process | memory process | cpu process 0.14 0.14 0.14|2710M 407M 6067M 117G|0.01 3.34 | 0 0 100 0 0 0|process_mon 960k 639B|redis-server 412M|report_proxy 0.0 0.13 0.14 0.14|2710M 407M 6067M 117G| 0 0 | 0 0 100 0 0 0|redis-serve 13k 9360B|redis-server 412M|report_proxy 0.1 0.13 0.14 0.14|2710M 407M 6067M 117G| 0 0 | 0 0 99 0 0 0|process_mon2027k 1986B|redis-server 412M|report_proxy 0.0 0.13 0.14 0.14|2710M 407M 6067M 117G| 0 0 | 0 0 100 0 0 0|sap1002 30k 624B|redis-server 412M|report_proxy 0.1 0.13 0.14 0.14|2710M 407M 6067M 117G| 0 9.00 | 0 0 99 0 0 0|process_mon2024k 1986B|redis-server 412M|report_proxy 0.1 0.13 0.14 0.14|2715M 407M 6067M 117G| 0 28.0 | 0 1 99 0 0 0|redis-serve 38k 4339k|redis-server 412M|report_proxy 0.1 0.68 0.25 0.18|2723M 407M 6067M 117G| 0 5.00 | 1 1 98 0 0 0|crond 13M 180k|redis-server 412M|report_proxy 0.1 |
4.18. MultiTail類似tail的同時監控多個文件工具
4.19. Monitorix系統和網路監控工具
4.20. collectl全能效能監控工具
可以互動式地執行或作為一個守護程序或同時二者兼備地執行,可替代ps、top、iotop和vmstat等,可以作為一個服務來監控遠端機或者整個伺服器叢集。可使用yum或apt-get安裝,官網:http://collectl.sourceforge.net/。
1) 示例1:
collectl
#<--------CPU--------><-----------Disks-----------><-----------Network----------> #cpu sys inter ctxsw KBRead Reads KBWrit Writes netKBi pkt-in netKBo pkt-out 37 37 382 188 0 0 27144 254 45 68 3 21 25 25 366 180 20 4 31280 296 0 1 0 0 25 25 368 183 0 0 31720 275 2 20 0 1 |
2) 示例2:
collectl -sjmf -oT
# <-------Int--------><-----------Memory-----------><------NFS Totals------> #Time Cpu0 Cpu1 Cpu2 Cpu3 Free Buff Cach Inac Slab Map Reads Writes Meta Comm 08:36:52 1001 66 0 0 2G 201M 609M 363M 219M 106M 0 0 5 0 08:36:53 999 1657 0 0 2G 201M 1G 918M 252M 106M 0 12622 0 2 08:36:54 1001 7488 0 0 1G 201M 1G 1G 286M 106M 0 20147 0 2 |
3) 示例3:
collectl -sn --verbose -oT
# NETWORK SUMMARY (/sec) # KBIn PktIn SizeIn MultI CmpI ErrIn KBOut PktOut SizeO CmpO ErrOut 08:46:35 3255 41000 81 0 0 0 112015 78837 1454 0 0 08:46:36 0 9 70 0 0 0 29 25 1174 0 0 08:46:37 0 2 70 0 0 0 0 2 134 0 0 |
4) 示例4:
collectl -sJ -oTm
# Int Cpu0 Cpu1 Cpu2 Cpu3 Type Device(s) 08:52:32.002 225 0 4 0 0 IO-APIC-level ioc0 08:52:32.002 000 1000 0 0 0 IO-APIC-edge timer 08:52:32.002 014 0 0 18 0 IO-APIC-edge ide0 08:52:32.002 090 0 0 0 15461 IO-APIC-level eth1 |
4.21. percona工具包
簡稱PT(Percona Toolkit),可用來監控MySQL、MongoDB等。
1) 查詢程式執行聚合的GDB堆疊跟蹤,先進性堆疊跟蹤,然後將跟蹤資訊彙總:
pt-pmp -p pid |
2) 格式化explain出來的執行計劃按照tree方式輸出,方便閱讀:
pt-visual-explain |
3) 從log檔案中讀取插敘語句,並用explain分析他們是如何利用索引,完成分析之後會生成一份關於索引沒有被查詢使用過的報告:
pt-index-usage |
5. 磁碟工具
5.1. sfdisk分割槽工具
示例:列出所有分割槽
# sfdisk -l |
5.2. fdisk分割槽工具
示例:列出所有分割槽
# fdisk -l |
5.3. cfdisk分割槽工具
具有互動式操作介面的磁碟分割槽工具,引數-P表示顯示分割槽表的內容,附加引數“s”會依照磁區的順序顯示相關資訊。
5.4. parted分割槽工具
一個由GNU開發的功能強大的磁碟分割槽和分割槽大小調整工具。
5.5. gparted分割槽工具
parted的圖形化版本。
5.6. SCSI工具
1) dmesg |grep SCSI
2) lsscsi
5.7. RAID工具
1) dmesg |grep -i raid
2) 檢視軟RAID:cat /proc/mdstat
5.8. hdparm磁碟效能測試工具
使用示例:hdparm -t /dev/sda。
5.9. mount掛載磁碟工具
檔案/etc/fstab的內容和mount輸出是一致的。
5.10. mkfs建立檔案系統工具
掛載一塊磁碟之前,需要先建立好檔案系統。
5.11. df檢視磁碟容量工具
5.12. du統計目錄和檔案大小工具
6. 程序類工具
6.1. pwdx命令-檢視工作目錄
根據程序ID,檢視指定程序的當前工作目錄(注意不是程式檔案所在目錄),格式:pwdx pid,如pwdx 1。
6.2. pidof命令-檢視程序ID
根據程序名,檢視程序的ID,格式:pidof 程序名,如:pidof init。
6.3. nice和ionice優先順序調整工具
nice是程序的CPU優先順序檢視和調整工具,ionice是程序的IO優先順序檢視和調整工具。
6.4. pstack檢視呼叫棧工具
根據程序ID,檢視指定程序呼叫棧的工具,格式:pstack pid。
6.5. 檢視可執行程式和共享庫工具
1) objdump
2) nm 經常用來檢視共享庫是否包含了某個符號
3) ldd 檢視依賴關係工具
4) strings 列出符號
5) strip 刪除符號表工具
6) readelf
7. 效能類工具
7.1. valgrind和qcachegrind記憶體分析工具
開源的記憶體分析和效能分析工具。qcachegrind是一個valgrind輔助工具,視覺化方式檢視valgrind效能分析結果。
7.2. perf效能分析工具
Linux自帶的功能強大的效能分析工具,可結合火焰圖。使用方式,如:perf top -p pid。自帶了生成SVG格式的圖形化工具timechart。
7.3. 壓力測試工具:ab、tsung、siege
8. 網路類工具
8.1. netstat和ss命令
ss是一個可以替代netstat的網路連線檢視工具(socket statistics)。
示例1:檢視TCP監聽
netstat -lpnt |
示例1:檢視TCP連線
netstat -lpna |
8.2. ifconfig和ip命令
ip是一個可以替代ifconfig和route等的網路管理工具,為iproute2套件中的一員,而ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了。
1) 示例1:設定一個IP
ip addr add 192.168.31.13/24 dev eth1 |
2) 示例2:檢視設定的IP是否生效
ip addr show eth1 |
3) 示例3:刪除IP
ip addr del 192.168.31.13/24 dev eth1 |
4) 示例4:檢視路由表
ip route show |
8.3. tcpdump網路抓包工具
引數“-s”指定顯示多少位元組的包內容。
1) 顯示包的內容:
tcpdump -i eth1 -n -vv -x -e -s 600 # 僅二進位制 tcpdump -i eth1 -n -vv -X -e -s 600 # 二進位制和文字 |
2) 抓包儲存到檔案供Wireshark分析:
tcpdump -i eth1 -n -vv -X -e -s 600 -w x.cap |
3) 抓取192.168.31.1的80埠的包:
tcpdump -i eth1 host 192.168.31.1 and port 80 |
4) 抓取目標IP為192.168.31.1和目標埠為80埠的包:
tcpdump -i eth1 dst host 192.168.31.1 and dst port 80 |
5) 監聽指定網絡卡
tcpdump -i eth1 |
6) 監聽指定UDP埠
tcpdump udp port 10888 |
7) 監聽指定TCP埠
tcpdump tcp port 80 |
8) 監聽A和B或A和C間的通訊
tcpdump host A and \(B or C \) # tcpdump host 127.0.0.1 and \(127.0.0.1 or 110.240.110.18 \) |
9) 監聽A的所有通訊,但不包括A和B的
tcpdump ip A and not B |
10) 監聽A發出的所有包
tcpdump -i eth1 src host A |
11) 監聽所有傳送到B的包
tcpdump -i eth1 dst host B |
12) 監聽A收到或發出的所有http包
tcpdump tcp port 80 and host A |
13) 列出tcpdump能夠監聽的網絡卡
tcpdump -D |
14) 監聽所有網絡卡,要求2.2或更高版本核心
tcpdump -i any |
15) 詳細顯示捕獲的資訊
tcpdump -v |
更詳細可以使用“tcpdump -vv”和“tcpdump -vvv”。
16) 以十六進位制和ASCII方式列印包,除了連線層頭
tcpdump -v -X |
17) 以十六進位制和ASCII方式列印包,包括連線層頭
tcpdump -v -XX |
18) 限制捕獲100個包
tcpdump -c 100 |
19) 將記錄寫入檔案
tcpdump -w filename.log |
20) 使用IP代替域名
tcpdump -n |
21) 捕獲每個包的100位元組而不是預設的68位元組
tcpdump -s 500 |
如果要捕獲所有位元組則為:tcpdump -s 0。
22) 捕獲所有廣播或多播包
tcpdump -n "broadcast or multicast" |
23) 捕獲所有icmp和arp包
tcpdump -v "icmp or arp" |
24) 捕獲arp包
tcpdump -v arp |
25) 捕獲目標地址是192.168.0.1,埠是80或443的包
tcpdump -n "dst host 192.168.0.1 and (dst port 80 or dst port 443)" |
26) 捕獲目標埠號在1-1023間的UDP包
tcpdump -n udp dst portrange 1-1023 |
27) 捕獲目標埠號為23的包