給系統(tǒng)定位問題的時(shí)候州邢,知識儡陨、經(jīng)驗(yàn)是關(guān)鍵基礎(chǔ),數(shù)據(jù)是依據(jù)量淌,工具是運(yùn)用知識處理數(shù)據(jù)的手段骗村。這里說的數(shù)據(jù)包括:cpu、網(wǎng)絡(luò)呀枢、內(nèi)存胚股、磁盤、運(yùn)行日志裙秋、異常堆棧琅拌、 GC 日志、線程快照 ( threaddump/javacore 文件)摘刑、堆轉(zhuǎn)儲快照( heapdump/hprof 文件)等进宝。經(jīng)常使用適當(dāng)?shù)奶摂M機(jī)監(jiān)控和分析的工具可以加快我們分析數(shù)據(jù)、定位解決問題的速度泣侮。
1即彪、系統(tǒng)工具
1.1紧唱、top
top命令用于顯示所有運(yùn)行和活躍的實(shí)時(shí)進(jìn)程并定期更新它活尊。它顯示了cpu使用率,內(nèi)存使用率漏益,交換內(nèi)存蛹锰,緩存大小,緩沖區(qū)大小绰疤,進(jìn)程pid铜犬,用戶,命令等等。它也展示了運(yùn)行進(jìn)程的高cpu利用率和內(nèi)存利用率癣猾。top命令對系統(tǒng)管理員監(jiān)視和在需要的時(shí)候采取正確的行動是非常的重要敛劝。
top命令使用方法:
格式:top [-] [d] [p] [q] [c] [C] [S] [s] [n]
參數(shù)說明:
- d:指定每兩次屏幕信息刷新之間的時(shí)間間隔。當(dāng)然用戶可以使用s交互命令來改變之纷宇。
- p:通過指定監(jiān)控進(jìn)程ID來僅僅監(jiān)控某個(gè)進(jìn)程的狀態(tài)夸盟。
- q:該選項(xiàng)將使top沒有任何延遲的進(jìn)行刷新。如果調(diào)用程序有超級用戶權(quán)限像捶,那么top將以盡可能高的優(yōu)先級運(yùn)行上陕。
- S:指定累計(jì)模式。
- s:使top命令在安全模式中運(yùn)行拓春。這將去除交互命令所帶來的潛在危險(xiǎn)释簿。
- i:使top不顯示任何閑置或者僵死進(jìn)程。
- c:顯示整個(gè)命令行而不只是顯示命令名硼莽。
top的內(nèi)部命令:
s – 改變畫面更新頻率
l – 關(guān)閉或開啟第一部分第一行 top 信息的表示
t – 關(guān)閉或開啟第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m – 關(guān)閉或開啟第一部分第四行 Mem 和 第五行 Swap 信息的表示
N – 以 PID 的大小的順序排列表示進(jìn)程列表
P – 以 CPU 占用率大小的順序排列進(jìn)程列表
M – 以內(nèi)存占用率大小的順序排列進(jìn)程列表
h – 顯示幫助
n – 設(shè)置在進(jìn)程列表所顯示進(jìn)程的數(shù)量
q – 退出 top
s – 改變畫面更新周期
示例1:
https://www.cnblogs.com/sunshuhai/p/6250514.html
https://www.cnblogs.com/zk47/p/4261288.html
https://www.cnblogs.com/zhoug2020/p/6336453.html
1.2庶溶、htop
htop 是Linux系統(tǒng)中的一個(gè)互動的進(jìn)程查看器,一個(gè)文本模式的應(yīng)用程序(在控制臺或者X終端中)沉删,需要ncurses渐尿。與Linux傳統(tǒng)的top相比,htop更加人性化矾瑰。它可讓用戶交互式操作砖茸,支持顏色主題,可橫向或縱向滾動瀏覽進(jìn)程列表殴穴,并支持鼠標(biāo)操作凉夯。
htop相比較top的優(yōu)勢:
可以橫向或縱向滾動瀏覽進(jìn)程列表,以便看到所有的進(jìn)程和完整的命令行采幌。
在啟動上比top 更快劲够。
殺進(jìn)程時(shí)不需要輸入進(jìn)程號。
htop 支持鼠標(biāo)選中操作(反應(yīng)不太快)休傍。
top 已不再維護(hù)征绎。
示例1:
示例2:
https://www.cnblogs.com/zangfans/p/8595000.html
https://blog.csdn.net/u011327981/article/details/78201208
https://www.sogou.com/link?url=hedJjaC291NVm6BbIVBZ6EkewZMrPH_RI_FFzAicPRHyNSHDNjHtute0NqN3DoLN0ztd7q5nl6o.
1.2、vmstat
vmstat 統(tǒng)計(jì)虛擬內(nèi)存信息磨取,可以對操作系統(tǒng)的proc人柿、memory、CPU忙厌、IO等信息進(jìn)行統(tǒng)計(jì)以呈現(xiàn)給用戶凫岖。
vmstat語法:
- vmstat [-a] [-n] [delay [ count]]
- vmstat [-f] [-s] [-m]
- vmstat [-S unit]
- vmstat [-d]
- vmstat [-p disk_partition]
- vmstat [-V]
參數(shù)說明:
- [ -a ] 顯示 活動(active)和 非活動(inactive)的內(nèi)存。
- [ -n ] 只顯示頭信息逢净,不周期性顯示哥放。這里沒有測試出-n的作用歼指,貌似有和沒有,結(jié)果都一樣甥雕。
- [ -f ] 顯示自開機(jī)以來forks的總數(shù)踩身,包括fork、vfork和clone system calls社露,總數(shù)和tasks創(chuàng)建的數(shù)量是一致的惰赋。
- [ -s ]顯示各種事件計(jì)數(shù)器表和內(nèi)存統(tǒng)計(jì)信息,這顯示不重復(fù)呵哨。
- [ -m ]顯示slabinfo赁濒,好像是緩存相關(guān)的,對這個(gè)完全不懂孟害【苎祝可以對比一下/proc/slabinfo的內(nèi)容。
- [ -V ]顯示版本信息挨务。
- [ -d ]顯示磁盤數(shù)據(jù)(disk statistics)
- [ -D ]顯示磁盤統(tǒng)計(jì)表(disk table)
- [ -S 單位 ]
k:1000
K:1024 (默認(rèn)為K)
m:1000000
M:1048576
比較:k和K
- [ -p 分區(qū) ]顯示磁盤分區(qū)數(shù)據(jù)(disk partition statistics )
- [ delay [ count ] ] delay是間隔击你,count顯示多少次信息』驯可以和上面的某些參數(shù)結(jié)合使用丁侄。
示例1:
示例2:
https://www.cnblogs.com/chenwenbiao/archive/2011/10/26/2224733.html
https://blog.csdn.net/frankarmstrong/article/details/54313727
http://blog.chinaunix.net/uid-25505925-id-191966.html
https://www.cnblogs.com/tommyli/p/3746187.html
1.3、tcpdump
tcpdump是一個(gè)用于截取網(wǎng)絡(luò)分組朝巫,并輸出分組內(nèi)容的工具鸿摇。tcpdump憑借強(qiáng)大的功能和靈活的截取策略,使其成為類UNIX系統(tǒng)下用于網(wǎng)絡(luò)分析和問題排查的首選工具劈猿。 tcpdump提供了源代碼拙吉,公開了接口,因此具備很強(qiáng)的可擴(kuò)展性揪荣,對于網(wǎng)絡(luò)維護(hù)和入侵者都是非常有用的工具筷黔。tcpdump存在于基本的Linux系統(tǒng)中,由于它需要將網(wǎng)絡(luò)界面設(shè)置為混雜模式仗颈,普通用戶不能正常執(zhí)行佛舱,但具備root權(quán)限的用戶可以直接執(zhí)行它來獲取網(wǎng)絡(luò)上的信息。因此系統(tǒng)中存在網(wǎng)絡(luò)分析工具主要不是對本機(jī)安全的威脅挨决,而是對網(wǎng)絡(luò)上的其他計(jì)算機(jī)的安全存在威脅请祖。
https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
https://www.sogou.com/link?url=DOb0bgH2eKh1ibpaMGjuy4yKaqZiSHtWC8ug8Cuw59om3Pojx-sH_OBXJDiYuRkTiYSK4ioE2I4.
https://www.cnblogs.com/maifengqiang/p/3863168.html
https://www.runoob.com/linux/linux-comm-tcpdump.html
1.4、netstat
Netstat是控制臺命令,是一個(gè)監(jiān)控TCP/IP網(wǎng)絡(luò)的非常有用的工具凰棉,它可以顯示路由表损拢、實(shí)際的網(wǎng)絡(luò)連接以及每一個(gè)網(wǎng)絡(luò)接口設(shè)備的狀態(tài)信息陌粹。Netstat用于顯示與IP撒犀、TCP、UDP和ICMP協(xié)議相關(guān)的統(tǒng)計(jì)數(shù)據(jù),一般用于檢驗(yàn)本機(jī)各端口的網(wǎng)絡(luò)連接情況或舞。
netstat常見參數(shù):
- -a (all) 顯示所有選項(xiàng)荆姆,默認(rèn)不顯示LISTEN相關(guān)。
- -t (tcp) 僅顯示tcp相關(guān)選項(xiàng)映凳。
- -u (udp) 僅顯示udp相關(guān)選項(xiàng)胆筒。
- -n 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化成數(shù)字诈豌。
- -l 僅列出有在 Listen (監(jiān)聽) 的服務(wù)狀態(tài)仆救。
- -p 顯示建立相關(guān)鏈接的程序名
- -r 顯示路由信息,路由表
- -e 顯示擴(kuò)展信息矫渔,例如uid等
- -s 按各個(gè)協(xié)議進(jìn)行統(tǒng)計(jì)
- -c 每隔一個(gè)固定時(shí)間彤蔽,執(zhí)行該netstat命令。
LISTEN和LISTENING的狀態(tài)只有用-a或者-l才能看到庙洼。
netstat網(wǎng)絡(luò)狀態(tài)詳解:
一個(gè)正常的TCP連接顿痪,都會有三個(gè)階段:1、TCP三次握手;2油够、數(shù)據(jù)傳送;3蚁袭、TCP四次揮手。
- SYN:(同步序列編號,Synchronize Sequence Numbers)該標(biāo)志僅在三次握手建立TCP連接時(shí)有效石咬。表示一個(gè)新的TCP連接請求揩悄。
- ACK:(確認(rèn)編號,Acknowledgement Number)是對TCP請求的確認(rèn)標(biāo)志,同時(shí)提示對端系統(tǒng)已經(jīng)成功接收所有數(shù)據(jù)。
- FIN:(結(jié)束標(biāo)志,FINish)用來結(jié)束一個(gè)TCP回話.但對應(yīng)端口仍處于開放狀態(tài),準(zhǔn)備接收后續(xù)數(shù)據(jù)鬼悠。
- LISTEN:首先服務(wù)端需要打開一個(gè)socket進(jìn)行監(jiān)聽虏束,狀態(tài)為LISTEN, The socket is listening for incoming connections. 偵聽來自遠(yuǎn)方TCP端口的連接請求 厦章。
- SYN_SENT:客戶端通過應(yīng)用程序調(diào)用connect進(jìn)行active open.于是客戶端tcp發(fā)送一個(gè)SYN以請求建立一個(gè)連接镇匀,之后狀態(tài)置為SYN_SENT,The socket is actively attempting to establish a connection. 在發(fā)送連接請求后等待匹配的連接請求袜啃。
- SYN_RECV:服務(wù)端應(yīng)發(fā)出ACK確認(rèn)客戶端的SYN汗侵,同時(shí)自己向客戶端發(fā)送一個(gè)SYN, 之后狀態(tài)置為SYN_RECV 群发,
- A connection request has been received from the network. 在收到和發(fā)送一個(gè)連接請求后等待對連接請求的確認(rèn) 晰韵。
- ESTABLISHED:代表一個(gè)打開的連接,雙方可以進(jìn)行或已經(jīng)在數(shù)據(jù)交互了熟妓, The socket has an established connection. 代表一個(gè)打開的連接雪猪,數(shù)據(jù)可以傳送給用戶。
- FIN_WAIT1:主動關(guān)閉(active close)端應(yīng)用程序調(diào)用close起愈,于是其TCP發(fā)出FIN請求主動關(guān)閉連接只恨,之后進(jìn)入FIN_WAIT1狀態(tài)译仗。 The socket is closed, and the connection is shutting down. 等待遠(yuǎn)程TCP的連接中斷請求,或先前的連接中斷請求的確認(rèn)官觅。
- CLOSE_WAIT:被動關(guān)閉(passive close)端TCP接到FIN后纵菌,就發(fā)出ACK以回應(yīng)FIN請求(它的接收也作為文件結(jié)束符傳遞給上層應(yīng)用程序),并進(jìn)入CLOSE_WAIT, The remote end has shut down, waiting for the socket to close. 等待從本地用戶發(fā)來的連接中斷請求 休涤。
- FIN_WAIT2:主動關(guān)閉端接到ACK后咱圆,就進(jìn)入了FIN-WAIT-2 , Connection is closed, and the socket is waiting for a shutdown from the remote end. 從遠(yuǎn)程TCP等待連接中斷請求功氨。
- LAST_ACK:被動關(guān)閉端一段時(shí)間后序苏,接收到文件結(jié)束符的應(yīng)用程序?qū)⒄{(diào)用CLOSE關(guān)閉連接。這導(dǎo)致它的TCP也發(fā)送一個(gè) FIN,等待對方的ACK.就進(jìn)入了LAST-ACK 捷凄, The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原來發(fā)向遠(yuǎn)程TCP的連接中斷請求的確認(rèn)杠览。
- TIME_WAIT:在主動關(guān)閉端接收到FIN后,TCP就發(fā)送ACK包纵势,并進(jìn)入TIME-WAIT狀態(tài)踱阿。 The socket is waiting after close to handle packets still in the network.等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請求的確認(rèn)。
- CLOSING:比較少見钦铁, Both sockets are shut down but we still don’t have all our data sent. 等待遠(yuǎn)程TCP對連接中斷的確認(rèn)软舌。
- CLOSED: 被動關(guān)閉端在接受到ACK包后,就進(jìn)入了closed的狀態(tài)牛曹。連接結(jié)束佛点, The socket is not being used. 沒有任何連接狀態(tài)。
- TIME_WAIT狀態(tài)的形成只發(fā)生在主動關(guān)閉連接的一方黎比。
- 主動關(guān)閉方在接收到被動關(guān)閉方的FIN請求后超营,發(fā)送成功給對方一個(gè)ACK后,將自己的狀態(tài)由FIN_WAIT2修改為TIME_WAIT,而必須再等2倍 的MSL(Maximum Segment Lifetime,MSL是一個(gè)數(shù)據(jù)報(bào)在internetwork中能存在的時(shí)間)時(shí)間之后雙方才能把狀態(tài) 都改為CLOSED以關(guān)閉連接阅虫。目前RHEL里保持TIME_WAIT狀態(tài)的時(shí)間為60秒演闭。