linux下实现监控进程网络带宽

嗯,最近都在网易游戏实习,所以貌似有段时间没有上来写点东西了。。。来网易游戏实习最主要的目的其实就是想知道在游戏公司里面工作都是些什么内容,毕竟自己以前也没有接触过游戏公司。。还比较的好奇。。。

以前可能觉得游戏公司各种高大上吧,做的工作各种有意思。。现在看来应该也不是这样子的,毕竟大多数时间应该还是在写游戏的逻辑代码了。。。

挺奇怪的。。。感觉虽然在游戏公司实习,但是做的事情还是自己的老本行。。。因为要用python开发一个服务器的监控系统,而且有提出要监控某个指定进程所占用的网络带宽的情况。。。嗯。。找来找去python没有现成的东西来做这件事情。。而且本身可以用的东西都比较少。。。

不过倒是找到了类似的东西。。。nethogs。。。一个专门用于linux下监控各个进程的网络带宽的程序。。。

所以就直接看了下他的代码实现。。。代码不是很多吧。。。c++写的。。。而且很简单。。。这里就不具体的说这部分的代码了。。。直接来说一下功能实现的原理吧。。。。

嗯,比较重要的一个目录:/proc

嗯,其实它是一个伪目录吧,因为它并不存在于实实在在的文件系统当中,而是一个运行时创建的目录,而且保存的信息也都是一些运行时的信息,例如进程信息,网络连接信息什么的。。。

好,现在假设我们有一个进程,它的PID 是 7140,那么我们可以进入如下目录:

/proc/7140/fd

其实这里看名字就大概能够猜到这个目录下保存的都是什么数据吧:当前进程所打开的文件描述符。。。如下图:

嗯,这个应该很熟悉吧。。。稍微了解一点linux下面编程的就应该知道,在程序中,我们的socket,或者打开文件都是对应着一个文件描述符,那么上述的目录中就保存了我们程序运行中文件描述符的情况。。然后这些其实又都是链接,最终连接到一个inode上面。。。在这里可以看到我们两个socket都对应着23045以及23046这两个inode。。。。

那么我们如何在找到上述这两个socket的具体的信息呢。。。?

嗯,在终端输入如下命令:cat /proc/net/tcp

我们可以得到的输出如下图:

这里就是当前本机所建立的所有的tcp的信息。。。ip地址,端口啥的。。。最后我们还可以看到一个项目:inode。。。也就是这个链接它所关联的inode。。。

到这里就应该能够将前面所看到的进程的文件描述符与它具体的链接信息对应起来了吧。。。

好啦。。。通过上面的过程呢。。我们可以获取一个进程它所建立的所有的连接的信息了。。。

那么接下来一步就是如何来计算它的网络流量情况了。。。

嗯,这里nethogs 采用的方法是利用libcap来抓包,然后对网络包进行分析,从而来计算每一个连接它的网络流量情况。。。(嗯,好多代码都是直接采用的nethogs的源代码)

嗯,这里就不具体的来列出实现的代码了。。

用c++以及libcap为python写了一个linux下面的扩展库。。。代码传到了github上面。。。地址如下:

https://github.com/2225377fjs/processNet

点击打开链接

linux下实现监控进程网络带宽

时间: 2024-12-22 08:50:11

linux下实现监控进程网络带宽的相关文章

linux下的守护进程

Linux下的常驻进程的作用不可忽略,但这里面的问题也不能忽略,怎么启动进程,怎么结束进程,怎么在进程挂掉之后重启进程都要设计的合理.下面看一个shell控制的php常驻进程的例子. 不废话,直接捞干货,上代码,通过代码来讲解更容易理解: #!/bin/sh #filename test.sh #绝对定位该文件的位置,不随执行目录而变化 cd $(cd "$(dirname "$0")";pwd) readonly path=$(pwd)/ file=$1; Run

Linux下杀僵尸进程办法

1) 检查当前僵尸进程信息 # ps -ef | grep defunct | grep -v grep | wc -l 175 # top | head -2 top - 15:05:54 up 97 days, 23:49, 4 users, load average: 0.66, 0.45, 0.39 Tasks: 829 total, 1 running, 479 sleeping, 174 stopped, 175 zombie # ps -ef | grep defunct | gr

linux下服务器守护进程的安装

一.在服务器上安装rstatd守护进程安装步骤:1. 从网上下载rstatd2. 将该文件放到/home/user目录下3. chmod 777 rpc.rstatd----改变该文件读写的权限,拥有所有权限.4. chmod 777 configure ---同上5. ./configure ---配置6. make ---编译7. make install ---安装8. rpc.rstatd ---启动rstatd进程二.在lr中配置从LR里面add measurement, 填写linu

linux 下查看一个进程运行路径

在linux下查看进程大家都会想到用 ps -ef|grep XXX 可是看到的不是全路径,怎么看全路径呢? 每个进程启动之后在 /proc下面有一个于pid对应的路径 例如:ps -ef|grep python 显示:oracle    4431  4366  0 18:56 pts/2    00:00:00 python Server.py 4431就是进程号 到/proc/4431下,ls -l 会看到(需要root权限): 总用量 0 -r--r--r--    1 oracle  

Linux下分析某个进程CPU占用率高的原因

  Linux下分析某个进程CPU占用率高的原因 通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用  1.top 查到占用cpu高的进程pid 2.查看该pid的线程:top -H -p 9532 3.查看这个线程所有系统调用:strace -p 10017 不停循环输出Connection timed out,让开发查看问题 原文地址:https://www.cnblogs.com/chenjw-note/p/8370679.html

linux下如何杀掉进程

1.linux下如何杀掉进程: 1)找到包名所占用的端口: ps aux | grep cbs_portal-1.0.1.jar(包名) 2)杀掉进程: kill 10942(端口号) PS: --color=auto 表示默认显示匹配到的字符串.也可以设置其他颜色,没有这个参数当然是默认的颜色了.(不用删除) ps -aux 显示所有包含其他使用者的行程 如图: 原文地址:https://www.cnblogs.com/wendyw/p/11458417.html

linux shell脚本监控进程是否存在

用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货:    #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]thenecho "start process....."elseecho "runing....."fi #####processString 表示进程特征字符串,能够查询到唯一进程的特征字符串0表示存在的$? -ne 0 不存在,$? -eq 0 存在 定时执行:

Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六)

日期 内核版本 架构 作者 GitHub CSDN 2016-05-29 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 前言 Linux下有3个特殊的进程,idle进程(PID=0), init进程(PID=1)和kthreadd(PID=2) * idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产

Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)

日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 前言 Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) * idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_t