分类

关于在linux系统中监控进程网络带宽程序

浏览量:359 日期:2014-06-10 10:10:15
内容介绍

  这是一篇关于在linux系统中监控进程网络带宽程序的教程,对这方面有需求的用户可以来学习下。

  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

相关阅读
手机版 | 电脑版
Copyright @ 2021 豆豆系统