linux c统计进程网络读写,linux网络分析、性能分析、文本格式化、文件读写操作之利器(mtr、top、jq、sponge)...
好的工具能夠讓我們工作更加高效,結合工作中的情況,今天分享下linux下比較好用的幾個工具。
網(wǎng)絡分析工具
mtr
mtr是網(wǎng)絡鏈路檢測判斷問題非常好用的工具,集成了tracert和ping這兩個命令的功能,動態(tài)的輸出檢測結果。mtr 默認發(fā)送icmp數(shù)據(jù)包進行鏈路探測,會對鏈路上的相關節(jié)點做持續(xù)探測并給出相應的統(tǒng)計信息,mtr 能避免節(jié)點波動對測試結果的影響
其中中間線路丟包嚴重但是目標地址不丟包,可能是因為某些主機路由對icmp協(xié)議不做處理或者只分配固定限額的資源處理,所以是正常情況。因為icmp協(xié)議請求消耗cpu資源,為了節(jié)省開銷,cpu只分配固定資源處理icmp請求
root@master1:~# mtr 114.114.114.114
輸出結果說明
第一列(host):節(jié)點ip和域名
第二列(Loss%):節(jié)點丟包率,通常最后的目標丟包才算是真正的丟包
第三列(Snt):發(fā)送數(shù)據(jù)包的數(shù)量
第四列(Last):最后一次的探測延遲值
第五列(Avg):探測延遲的平均值
第六列(Best):探測延遲的最小值,即最優(yōu)值
第七列(Wrst):探測延遲的最大值,即最差值
第八列(StDev):標準偏差
可選參數(shù)說明
-h(--help):提供幫助信息
-v(--version):顯示版本
-c(--count):設置ping的數(shù)量限制值,達到該值后程序退出
-r(--report):以報告模式輸出
-p(--split):將每次追蹤的結果分別列出來
-s(--psize):指定ping數(shù)據(jù)包的大小
-n(--no-dns):不對ip地址做域名解析
-a(--address):設置發(fā)送包的ip地址,主機有多個ip時使用
-i(--interval):設置icmp返回之間的間隔,默認是1s
-4:使用ipv4協(xié)議
-6:使用ipv6協(xié)議
運行時交互式選項
?或h:顯示幫助菜單
d:切換顯示模式
n:啟用或禁用dns域名解析
u:切換使用icpm或udp數(shù)據(jù)包進行探測
eg:
設置ping的數(shù)量為20,包大小為1024字節(jié),以報告模式輸出,檢查百度的連通性
性能分析工具
top
通過top命令查看系統(tǒng)的CPU、內(nèi)存、運行時間、交換分區(qū)、執(zhí)行的線程等信息??梢杂行У陌l(fā)現(xiàn)系統(tǒng)的缺陷出在哪里,是內(nèi)存不夠、CPU處理能力不夠還是IO讀寫問題等。
root@master1:~# top
輸出結果說明
第一行:系統(tǒng)當前時間、系統(tǒng)運行時間、當前登錄用戶數(shù)、系統(tǒng)負載(1分鐘、5分鐘、15分鐘的平均值)
第二行:tasks為任務進程,total進程總數(shù),ruuning正在運行的進程數(shù),sleeping睡眠的進程數(shù),stopped停止運行的進程數(shù),zombie僵尸進程數(shù)
第三行:cpu使用情況,us(user)用戶空間占用cpu時間百分比,sy(system)內(nèi)核空間占用cpu時間百分比,ni(nice)運行低優(yōu)先級進程的cpu時間百分比,id(idle)空閑cpu時間百分比,wa(iowait)等待io占用cpu時間百分比,hi(hard interrupt)硬件硬中斷占用cpu百分比,si(soft interrupt)軟件軟中斷占用cpu百分比,st(steal)當前系統(tǒng)運行在虛擬機中的時候,被其他虛擬機占用的cpu時間百分比
整體的cpu使用率=1-id。當us很高時,證明cpu時間主要消耗在用戶代碼,需要優(yōu)化用戶代碼。sy很高時,說明cpu時間都消耗在內(nèi)核,要么是頻繁的系統(tǒng)調(diào)用,要么是頻繁的cpu切換(進程切換/線程切換)。wa很高時,說明有進程在進程頻繁的IO操作,有可能是磁盤IO,也有可能是網(wǎng)絡IO。si很高時,說明cpu時間消耗在處理軟中斷,網(wǎng)絡收發(fā)包會觸發(fā)系統(tǒng)軟中斷,所以大量的網(wǎng)絡小包會導致軟中斷的頻繁觸發(fā),典型的SYN Floor會導致si很高。
第四行:內(nèi)存使用情況,total物理內(nèi)存總大小,free空閑內(nèi)存總量,used已經(jīng)使用的內(nèi)存量,buff表示用于讀寫磁盤緩存的內(nèi)存,cache表示用于讀寫文件緩存的內(nèi)存。avail表示可用的內(nèi)存大小
第五行:虛擬內(nèi)存信息, total表示能用的swap總量,swap free表示剩余,used表示已經(jīng)使用的。
swap原理是把一塊磁盤空間或者一個本地文件當成內(nèi)存來使用,稱為交換分區(qū)
第六行:具體的每個進程狀態(tài),PID進程id,USER進程所有者的用戶名,PR進程調(diào)度優(yōu)先級,NI進程nice值(優(yōu)先級),越小的值代表越高的優(yōu)先級,VIRT進程使用的虛擬內(nèi)存,RES進程使用的物理內(nèi)存(不包括共享內(nèi)存),SHR 進程使用的共享內(nèi)存大小,S進程狀態(tài)(D:不可中斷的睡眠狀態(tài),R:運行,S:睡眠,T:跟蹤/停止,Z:僵尸進程),%CPU 進程使用的cpu占用百分比,%MEM 進程使用的內(nèi)存占用百分比,TIME+ 進程啟動后到現(xiàn)在所用的全部cpu時間,COMMAND 進程的啟動命令(默認只顯示二進制,-c參數(shù)能夠顯示命令行和啟動參數(shù))
可選參數(shù)說明
-b 批處理模式操作
-d 指定每兩次屏幕信息刷新之間的時間間隔
-p 通過指定監(jiān)控進程ID來僅僅監(jiān)控某個進程的狀態(tài)
-q 使top沒有任何延遲的進行刷新,如果調(diào)用程序有超級用戶權限,那么top將以盡可能高的優(yōu)先級運行
-S 指定累積模式
-s 使top命令在安全模式中運行,這將去除交互命令所帶來的潛在危險。
-i 使top不顯示任何閑置或者僵死進程
-c 顯示整個命令行而不只是顯示命令名
運行時交互式選項
h或者? 顯示快捷鍵幫助
q 退出程序
1 展開多核cpu顯示
m 切換顯示內(nèi)存信息
M 根據(jù)內(nèi)存使用大小排序
P 根據(jù)CPU使用率進行排序(默認排序)
c 切換顯示命令名稱和完整命令行
k 終止一個進程
i 忽略閑置和僵死進程
r 重新安排一個進程的優(yōu)先級別,系統(tǒng)提示用戶輸入需要改變的進程PID以及需要設置的進程優(yōu)先級
S 切換到累計模式
s 更改刷新間隔時間,單位秒,默認是5s
f或者F 從當前顯示中添加或者刪除項目
o或者O 改變顯示項目的順序
l切換顯示平均負載和啟動時間信息
t 切換顯示進程和CPU狀態(tài)信息
T 根據(jù)時間/累計時間進行排序
w 將當前設置寫入~/.toprc文件中
格式化工具
jq
jq可以對json數(shù)據(jù)進行分片、過濾、映射和轉換,可以讓linux命令和shell腳本在處理json數(shù)據(jù)時變得得心應手。
默認linux系統(tǒng)是不帶jq命令的,首先需要安裝
root@master1:~# apt-get install -y jq
有如下json格式的文件
root@master1:~# cat test.txt
[{"address":{"province":"hubei","city":"wuhan"},"site":"www.hubei.com"},{"address":{"province":"hunan","city":"changsha"},"site":"www.hunan.com"},{"address":{"province":"zhejiang","city":"hangzhou"},"site":"www.zhejiang.com"}]
現(xiàn)在格式化輸出test.txt
或者如下格式化
根據(jù)索引查看元素
如查看第一個元素
注意:用jq處理的文件必須首先是符合json格式的,否則用jq格式化會報錯,jq格式化不會改變原文件排版格式
文件操作工具
sponge
sponge是一個修改文件比較好用的工具,支持在文件寫入前讀取所有輸入,所以在讀取文件后再次向同一文件寫入時比較有用
例如有如下文件
root@master1:~# cat ceshi.txt
windowns
linux
c language
python language
go language
hello world
現(xiàn)在我們需要將該文件按照首字母順序排列后重新保存到該文件
root@master1:~# sort ceshi.txt
c language
go language
hello world
linux
python language
windowns
可能你會想到如下重定向
但是你會發(fā)現(xiàn)這樣重定向后源文件為空了,當然這不是我們希望看到的。
現(xiàn)在我們重新將內(nèi)容寫入文件
root@master1:~# cat ceshi.txt
windowns
linux
c language
python language
go language
hello world
這時你可能又會想到通過臨時文件的方式重定向
當然通過臨時文件的方式可以滿足我們的需求
因為sponge可以在文件寫入前讀取所有輸入,所以通過sponge可以很好的解決我們的需求
linux默認是沒有sponge命令的,首先需要安裝
root@master1:~# apt-get install -y moreutils
上面介紹jq工具時,我們格式化輸出了test.txt,但是test.txt文件本身沒有改變,所以現(xiàn)在我們可以將jq和sponge結合使用格式化文件test.txt
root@master1:~# cat test.txt
[{"address":{"province":"hubei","city":"wuhan"},"site":"www.hubei.com"},{"address":{"province":"hunan","city":"changsha"},"site":"www.hunan.com"},{"address":{"province":"zhejiang","city":"hangzhou"},"site":"www.zhejiang.com"}]
總結
以上是生活随笔為你收集整理的linux c统计进程网络读写,linux网络分析、性能分析、文本格式化、文件读写操作之利器(mtr、top、jq、sponge)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle exp 00006,Ora
- 下一篇: linux修改su的PAM配置文件,li