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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

局域网(校园网)内服务之间通过ssh -L互相访问

一、前言 同一个局域网内有两台linux服务器A和B,B上有一个服务,可以通过curl传输数据访问,现在想从A上也通过curl访问B上的服务 二、两种情况 1. 如果B服务器上使用docker: 首先建立docker容器时,需要做端口映射 docker run …

ubantu 中配置Flash Player

1.Flash只能在Chrome中使用它的最新版本。 2.如果你使用的是Firefox浏览器,那么你需要更换浏览器才能使用最新版本的Flash。如果你使用的Chrome浏览器,你只需要将它升级到最新版本就可以了。 转载于:https://www.cnblogs.com/saturnlee/p/7502158.html

实施注释界面

对于Java开发人员来说,每天都需要使用注释。 如果没有别的,简单的Override注释应该响起。 创建注释要复杂一些。 在运行时通过反射使用“自制”注释或创建编译时调用的注释处理器也是一种复杂性。 但是我们很少“实现”注释接口。 暗中有人暗地里为我们做…

C++入门经典-例2.13-左移运算

1&#xff1a;代码如下&#xff1a; // 2.13.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include<iostream> using namespace std; void main() {int a0x40,b;ba<<1;//左移1位cout << b << endl;//以十进制输出 } View Cod…

linux修改su的PAM配置文件,linux pam安全认证模块su命令的安全隐患

PAM安全认证1、su命令的安全隐患默认情况下&#xff0c;任何用户都允许使用su命令&#xff0c;从而有机会反复尝试其他用户(如root)的登录密码&#xff0c;带来安全风险。为了增强sum命令的使用控制&#xff0c;可以借助PAM认证模块&#xff0c;只允许极个别用户使用su命令进行…

jwebsocket传图片_Java中带有JWebSocket的WebServerSocket

jwebsocket传图片首先&#xff0c;转到http://jwebsocket.org/下载2个软件包Server and Client。 如果要查看源代码&#xff0c;请下载源代码包。 服务器 解压缩服务器程序包。 转到“ conf”文件夹 选择“ jWebSocket.xml”文件打开 编辑“ jWebSocket.xml”文件&#xff…

i3能装Linux虚拟机,使用i3wm重新安装Ubuntu

过去几天&#xff0c;我一直在Kubuntu 14.04.1 LTS(Ubuntu衍生产品)上使用i3wm&#xff0c;但体验有些不同。由于Ubuntu使用LightDM Display Manager&#xff0c;因此您可以安装i3wm并尝试与当前的窗口管理器一起使用。只需在外壳中使用以下命令安装适当的软件包&#xff1a;su…

99. 恢复二叉搜索树

99. 恢复二叉搜索树题意在BST中存在两个元素被交换了&#xff0c;现在需要把这两个元素给交换回来变成BST。解题思路将其转为数组&#xff0c;并且排好序后重新赋值给树结点&#xff1b;使用变量pre来保存访问的前一个结点&#xff0c;因为是中序遍历&#xff0c;所以前面一个结…

用Hamcrest验证DateTime和日期

自从我开始涉足自动化测试和练习TDD以来&#xff0c;验证日期值很痛苦。 幸运的是&#xff0c;这里有一个不错的库&#xff0c;可用于遗留Date和新的Java 8 DateTime API &#xff0c;从而解决了这一难题。 如果您属于Java开发社区中较健康的部分&#xff0c;并且每天练习单元…

linux找回rm的文件夹,Linux rm 文件恢复

Linux下删除命令 rm 大家肯定是熟悉得不能再熟悉了&#xff0c;然后有时候却阴沟里翻船不小心删除了某些重要的文件&#xff0c;想死的心都有了。。。。现在我们就来看看被误删除的文件要如何恢复&#xff1f;Linux文件系统Linux的文件系统(如ext3、ext4)由三部分组成&#xff…

linux xargs命令,xargs 命令教程

xargs是 Unix 系统的一个很有用的命令&#xff0c;但是常常被忽视&#xff0c;很多人不了解它的用法。本文介绍如何使用这个命令。一、标准输入与管道命令Unix 命令都带有参数&#xff0c;有些命令可以接受"标准输入"(stdin)作为参数。$ cat /etc/passwd | grep root…

java 职责链模式_Java中的责任链模式

java 职责链模式当应有几个处理器来执行某项操作并为这些处理器定义特定顺序时&#xff0c;就需要采用责任链设计模式。 在运行时处理器顺序的可变性也很重要。模式的UML表示如下&#xff1a; 处理程序定义处理器对象的一般结构。 这里的“ HandleRequest”是抽象处理器方法。 …

ArcMap 导入Excel坐标数据

1 准备Excel坐标数据集合 2 ArcMap加入Excel数据 将excel文件放入arcmap工作区的物理路径下在工作区的根图层上点键&#xff0c;选择添加数据&#xff0c;找到excel文件并选择相应的工作薄完成后&#xff0c;excel工作薄即导入工作区左边的图层下。3 ArcMap加入图层文件 在S…

linux6如何分区,CentOS6.9安装 硬盘分区方案与分区步骤

Linux默认可分为3个分区&#xff0c;分别是boot分区、swap分区和根分区&#xff1a;1、swap&#xff1a;交换分区&#xff0c;实现虚拟内存&#xff0c;建议大小是物理内存的1~2倍。2、/boot&#xff1a;用来存放与系统启动有关的程序&#xff0c;比如启动引导装载程序等&#…

实施自定义JMeter采样器

随着我们采用不同的体系结构和实现方式&#xff0c;对通用压力测试工具的需求不断增长。 Apache Jmeter是进行负载测试时最著名的工具之一。 它支持许多协议&#xff0c;例如ftp http tcp&#xff0c;并且可以轻松地用于分布式测试。 Jmeter还为您提供了一种创建自定义采样器…

hdu 6194 后缀数组

题意&#xff1a;一个字符串&#xff0c;查询恰好出现k次的子串的数目 思路&#xff1a;后缀数组在height上进行操作。我们直接枚举长度为k的区间求min值&#xff0c;但是要注意的是直接这么算是会重复的&#xff0c;同时也可能超过k次&#xff0c;这样我们就需要把枚举的前一个…

linux grep命令 例子,14个grep命令使用例子

所有的类linux系统都会提供一个名为grep(global regular expression print&#xff0c;全局正则表达式输出)的搜索工具。grep命令在对一个或多个文件的内容进行基于模式的搜索的情况下是非常有用的。模式可以是单个字符、多个字符、单个单词、或者是一个句子。当命令匹配到执行…

JSP动作元素

https://www.w3cschool.cn/jsp/jsp-actions.html JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。 动作是第三种类型的语法元素&#xff0c;它们被转换成java代码来执行操作。如访问一个java对象或调用方法 利用JSP动作可以动态地插入文件、重用JavaBean组件…

c语言中的所有代码大全,C语言库函数代码大全

O类字母函数名: open 功 能:打开一个文件用于读或写 用 法: int open(char *pathname,int access[, int permiss]); 程序例: #include#include#include#include int main(void) { inthandle; char msg[] "Helloworld";if ((handle open("TEST.$$$", O_CRE…

依赖注入通俗解释_我如何向团队解释依赖注入

依赖注入通俗解释最近&#xff0c;我们公司开始开发一个新的基于Java的Web应用程序&#xff0c;经过一些评估过程&#xff0c;我们决定使用Spring。 但是许多团队成员并不了解Spring和Dependency Injection的原理。 因此&#xff0c;我被要求给出一个速成班&#xff0c;讲解什么…