欢迎光临计算机基础知识学习乐园-电脑医生网!
当前位置:电脑医生主页Linux系统

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

http://www.dndoctor.net 时间:2014-06-16 13:23 来源:未知 作者:乜欣 点击:次 (编辑:乜欣)

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

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

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

挺奇怪的。。。感觉虽然在游戏公司实习,但是做的事情还是自己的老本行。。。因为要用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

相关文章
关于网站 | 网站声明 | 用户反馈 | 合作伙伴 | 联系站长 | 全讯网|
友情链接:狗狗网 |对联网| 微信下载手机版 | 阳谷信息港 | 电脑医生网 | 生物诊断网 | 麦词网 | 如皋信息网 | 足球比分 | 护士网 | 第一英语 | 四川大学论坛| 中南民族大学论坛| 华科论坛 |西邮论坛 |东北师范大学论坛 | 北理bbs|首经贸论坛 |安徽机电学生论坛 | 电子科技大学论坛|浙江师范大学 | 上海师范大学论坛 | 山东大学论坛 | 天津大学论坛
Copyright © 2011 www.dndoctor.net 版权所有
蜀ICP(备)1101113