linux c统计进程网络读写,linux网络分析、性能分析、文本格式化、文件读写操作之利器(mtr、top、jq、sponge)...

好的工具能够让我们工作更加高效,结合工作中的情况,今天分享下linux下比较好用的几个工具。

网络分析工具

mtr

mtr是网络链路检测判断问题非常好用的工具,集成了tracert和ping这两个命令的功能,动态的输出检测结果。mtr 默认发送icmp数据包进行链路探测,会对链路上的相关节点做持续探测并给出相应的统计信息,mtr 能避免节点波动对测试结果的影响

其中中间线路丢包严重但是目标地址不丢包,可能是因为某些主机路由对icmp协议不做处理或者只分配固定限额的资源处理,所以是正常情况。因为icmp协议请求消耗cpu资源,为了节省开销,cpu只分配固定资源处理icmp请求

root@master1:~# mtr 114.114.114.114

1462f88f42260c3635d2eba290fa991c.png

输出结果说明

第一列(host):节点ip和域名

第二列(Loss%):节点丢包率,通常最后的目标丢包才算是真正的丢包

第三列(Snt):发送数据包的数量

第四列(Last):最后一次的探测延迟值

第五列(Avg):探测延迟的平均值

第六列(Best):探测延迟的最小值,即最优值

第七列(Wrst):探测延迟的最大值,即最差值

第八列(StDev):标准偏差

可选参数说明

-h(--help):提供帮助信息

-v(--version):显示版本

-c(--count):设置ping的数量限制值,达到该值后程序退出

-r(--report):以报告模式输出

-p(--split):将每次追踪的结果分别列出来

-s(--psize):指定ping数据包的大小

-n(--no-dns):不对ip地址做域名解析

-a(--address):设置发送包的ip地址,主机有多个ip时使用

-i(--interval):设置icmp返回之间的间隔,默认是1s

-4:使用ipv4协议

-6:使用ipv6协议

运行时交互式选项

?或h:显示帮助菜单

d:切换显示模式

n:启用或禁用dns域名解析

u:切换使用icpm或udp数据包进行探测

eg:

设置ping的数量为20,包大小为1024字节,以报告模式输出,检查百度的连通性

776154930f465f14047f589a09e76860.png

性能分析工具

top

通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。可以有效的发现系统的缺陷出在哪里,是内存不够、CPU处理能力不够还是IO读写问题等。

root@master1:~# top

b783bbbe8a6eaed0abdb43c4d526a300.png

输出结果说明

第一行:系统当前时间、系统运行时间、当前登录用户数、系统负载(1分钟、5分钟、15分钟的平均值)

第二行:tasks为任务进程,total进程总数,ruuning正在运行的进程数,sleeping睡眠的进程数,stopped停止运行的进程数,zombie僵尸进程数

第三行:cpu使用情况,us(user)用户空间占用cpu时间百分比,sy(system)内核空间占用cpu时间百分比,ni(nice)运行低优先级进程的cpu时间百分比,id(idle)空闲cpu时间百分比,wa(iowait)等待io占用cpu时间百分比,hi(hard interrupt)硬件硬中断占用cpu百分比,si(soft interrupt)软件软中断占用cpu百分比,st(steal)当前系统运行在虚拟机中的时候,被其他虚拟机占用的cpu时间百分比

整体的cpu使用率=1-id。当us很高时,证明cpu时间主要消耗在用户代码,需要优化用户代码。sy很高时,说明cpu时间都消耗在内核,要么是频繁的系统调用,要么是频繁的cpu切换(进程切换/线程切换)。wa很高时,说明有进程在进程频繁的IO操作,有可能是磁盘IO,也有可能是网络IO。si很高时,说明cpu时间消耗在处理软中断,网络收发包会触发系统软中断,所以大量的网络小包会导致软中断的频繁触发,典型的SYN Floor会导致si很高。

第四行:内存使用情况,total物理内存总大小,free空闲内存总量,used已经使用的内存量,buff表示用于读写磁盘缓存的内存,cache表示用于读写文件缓存的内存。avail表示可用的内存大小

第五行:虚拟内存信息, total表示能用的swap总量,swap free表示剩余,used表示已经使用的。

swap原理是把一块磁盘空间或者一个本地文件当成内存来使用,称为交换分区

第六行:具体的每个进程状态,PID进程id,USER进程所有者的用户名,PR进程调度优先级,NI进程nice值(优先级),越小的值代表越高的优先级,VIRT进程使用的虚拟内存,RES进程使用的物理内存(不包括共享内存),SHR 进程使用的共享内存大小,S进程状态(D:不可中断的睡眠状态,R:运行,S:睡眠,T:跟踪/停止,Z:僵尸进程),%CPU 进程使用的cpu占用百分比,%MEM 进程使用的内存占用百分比,TIME+ 进程启动后到现在所用的全部cpu时间,COMMAND 进程的启动命令(默认只显示二进制,-c参数能够显示命令行和启动参数)

可选参数说明

-b 批处理模式操作

-d 指定每两次屏幕信息刷新之间的时间间隔

-p 通过指定监控进程ID来仅仅监控某个进程的状态

-q 使top没有任何延迟的进行刷新,如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行

-S 指定累积模式

-s 使top命令在安全模式中运行,这将去除交互命令所带来的潜在危险。

-i 使top不显示任何闲置或者僵死进程

-c 显示整个命令行而不只是显示命令名

运行时交互式选项

h或者? 显示快捷键帮助

q 退出程序

1 展开多核cpu显示

m 切换显示内存信息

M 根据内存使用大小排序

P 根据CPU使用率进行排序(默认排序)

c 切换显示命令名称和完整命令行

k 终止一个进程

i 忽略闲置和僵死进程

r 重新安排一个进程的优先级别,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级

S 切换到累计模式

s 更改刷新间隔时间,单位秒,默认是5s

f或者F 从当前显示中添加或者删除项目

o或者O 改变显示项目的顺序

l切换显示平均负载和启动时间信息

t 切换显示进程和CPU状态信息

T 根据时间/累计时间进行排序

w 将当前设置写入~/.toprc文件中

格式化工具

jq

jq可以对json数据进行分片、过滤、映射和转换,可以让linux命令和shell脚本在处理json数据时变得得心应手。

默认linux系统是不带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"}]

现在格式化输出test.txt

02aef61ce03b4c4aa4531e105702fc9a.png

或者如下格式化

186e26ef51a2d1e273fd01801daa08b2.png

根据索引查看元素

如查看第一个元素

53a140ecee96a8d2e5f85a8fbe543821.png

注意:用jq处理的文件必须首先是符合json格式的,否则用jq格式化会报错,jq格式化不会改变原文件排版格式

文件操作工具

sponge

sponge是一个修改文件比较好用的工具,支持在文件写入前读取所有输入,所以在读取文件后再次向同一文件写入时比较有用

例如有如下文件

root@master1:~# cat ceshi.txt

windowns

linux

c language

python language

go language

hello world

现在我们需要将该文件按照首字母顺序排列后重新保存到该文件

root@master1:~# sort ceshi.txt

c language

go language

hello world

linux

python language

windowns

可能你会想到如下重定向

d6a846ce291a31c88d52e5dc89fa6ef9.png

但是你会发现这样重定向后源文件为空了,当然这不是我们希望看到的。

现在我们重新将内容写入文件

root@master1:~# cat ceshi.txt

windowns

linux

c language

python language

go language

hello world

这时你可能又会想到通过临时文件的方式重定向

01a564edc5ca5e2c57152d1dfd5d8f03.png

当然通过临时文件的方式可以满足我们的需求

因为sponge可以在文件写入前读取所有输入,所以通过sponge可以很好的解决我们的需求

linux默认是没有sponge命令的,首先需要安装

root@master1:~# apt-get install -y moreutils

8711d4d1355c0924e5edd39c53175a8f.png

上面介绍jq工具时,我们格式化输出了test.txt,但是test.txt文件本身没有改变,所以现在我们可以将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"}]

5593f7eb48ff5197e6cfe060f1faa381.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值