嗯,近期都在网易游戏实习,所以貌似有段时间没有上来写点东西了。。。

来网易游戏实习最基本的目的事实上就是想知道在游戏公司里面工作都是些什么内容,毕竟自己曾经也没有接触过游戏公司。。

还比較的好奇。。

曾经可能认为游戏公司各种高大上吧。做的工作各种有意思。

。如今看来应该也不是这样子的,毕竟大多数时间应该还是在写游戏的逻辑代码了。。

挺奇怪的。

。感觉尽管在游戏公司实习。可是做的事情还是自己的老本行。

。。由于要用python开发一个server的监控系统。并且有提出要监控某个指定进程所占用的网络带宽的情况。

。。嗯。

找来找去python没有现成的东西来做这件事情。

。并且本身能够用的东西都比較少。

。。

只是倒是找到了类似的东西。

。。nethogs。

一个专门用于linux下监控各个进程的网络带宽的程序。

。。

所以就直接看了下他的代码实现。

。代码不是非常多吧。。

。c++写的。

。。并且非常easy。。。这里就不详细的说这部分的代码了。。。直接来说一下功能实现的原理吧。。

。。

嗯,比較重要的一个文件夹:/proc

嗯。事实上它是一个伪文件夹吧,由于它并不存在于实实在在的文件系统其中。而是一个执行时创建的文件夹。并且保存的信息也都是一些执行时的信息,比如进程信息,网络连接信息什么的。。。

好,如今如果我们有一个进程,它的PID 是 7140。那么我们能够进入例如以下文件夹:

/proc/7140/fd

事实上这里看名字就大概可以猜到这个文件夹下保存的都是什么数据吧:当前进程所打开的文件描写叙述符。。。例如以下图:

嗯。这个应该非常熟悉吧。。。略微了解一点linux以下编程的就应该知道,在程序中,我们的socket,或者打开文件都是相应着一个文件描写叙述符。那么上述的文件夹中就保存了我们程序执行中文件描写叙述符的情况。。然后这些事实上又都是链接,终于连接到一个inode上面。。。在这里能够看到我们两个socket都相应着23045以及23046这两个inode。

。。

那么我们怎样在找到上述这两个socket的详细的信息呢。。。

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

我们能够得到的输出例如以下图:

这里就是当前本机所建立的全部的tcp的信息。

。。

ip地址,port啥的。。

。最后我们还能够看到一个项目:inode。

。。也就是这个链接它所关联的inode。。。

到这里就应该可以将前面所示进程的文件描写叙述符与它详细的链接信息相应起来了吧。。。

好啦。。。通过上面的过程呢。。

我们能够获取一个进程它所建立的全部的连接的信息了。

。。

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

。。

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

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

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

。地址例如以下:

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

点击打开链接

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

  1. windows和linux下关闭Tomcat进程

    windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

  2. Linux下查看某个进程打开的文件数-losf工具常用参数介绍

    Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...

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

      Linux下分析某个进程CPU占用率高的原因 通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用  1.top 查到占用cpu高的进程pid 2.查看该pid的线程 ...

  4. 解决linux下tomcat停止进程任存在问题

    解决linux下tomcat停止进程任存在问题 在Linux下(之所以强调linux下,是因为在windows下正常),执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访 ...

  5. windows和linux下杀死Tomcat进程,解决端口占用

    windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...

  6. linux下1号进程的前世(kthread_init)今生(init)

    参考: 1.  Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六) 2. linux挂载根文件系统过程 3. BusyBox init工作 ...

  7. linux下脚本监控网络流量

    linux下脚本监控网络流量 学习了:https://blog.csdn.net/chenghuikai/article/details/48437479 学习了:http://www.jb51.ne ...

  8. [转帖]linux下网络监控神器"iptraf-ng"

    linux下网络监控神器"iptraf-ng" https://www.cnblogs.com/dupengfei/articles/iptraf-ng.html 优点:监控的网络 ...

  9. linux下查看当前进程以及杀死进程

    ###linux下查看当前进程以及杀死进程 查看进程 ps命令查找与进程相关的PID号: ps a :显示现行终端机下的所有程序,包括其他用户的程序. ps -A :显示所有程序. ps c :列出程 ...

随机推荐

  1. Log4Net 用法记录

    https://www.cnblogs.com/lzrabbit/archive/2012/03/23/2413180.html https://blog.csdn.net/guyswj/articl ...

  2. 小米开源文件管理器MiCodeFileExplorer-源码研究(4)-文件操作工具类FileOperationHelper

    文件操作是非常通用的,注释都写在源代码中了,不多说~需要特别说明的是,任务的异步执行和IOperationProgressListener.拷贝和删除等操作,是比较费时的,采用了异步执行的方式~ An ...

  3. Web开发中,使用表格来展示每个角色对应的权限

    通过表格这种方式,来展示角色和权限之间的关系,挺好的.还有很多场景,都可以用这种方式. 角色权限表 权限 系统管理员 文章管理员 相册管理员 留言管理员 个人信息管理 查看个人信息 √ √ √ √ 编 ...

  4. 【习题 8-1 UVA - 1149】Bin Packing

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个背包只能装两个东西. 而且每个东西都要被装进去. 那么我们随意考虑某个物品.(不必要求顺序 这个物品肯定要放进某个背包里面的. ...

  5. 负载均衡器&http正向代理

    透明的负载均衡器&http正向代理 * master-workers架构,http正向代理由独立的dns请求以及缓冲进程  * 使用epoll(ET)模式,採用全异步方式(双缓存,实现双向同一 ...

  6. STM32之CAN通讯接收过滤器过滤分析

    一.前言 学习了CAN通讯,底层的东东CAN控制器已经帮你处理完成,也就是CAN通讯协议已经做好,你按协议格式往对应的位扔数据发送就好,所以使用CAN通讯,我们只需要去关心制定发送的数据间的协议,也就 ...

  7. listctrl调整表头高度

    CListCtrl派生类下CMyListCtrl.h class CMyListCtrl :public CListCtrl { public: // 设置表头高度 void SetHeadHeigh ...

  8. 【例题 8-3 UVA - 1152】4 Values whose Sum is 0

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然中间相遇. 自己写了个hash处理一下冲突就可以了. [代码] /* 1.Shoud it use long long ? 2. ...

  9. amazeui学习笔记一(开始使用2)--布局示例layouts

    amazeui学习笔记一(开始使用2)--布局示例layouts 一.总结 1.样例分析(不要忘记,优先分析这个布局示例):有教你页面怎么布局的,实例中可以分析一波 2.响应式:对应meta标签中的v ...

  10. Spark应用程序部署工具Spark Submit

    不多说,直接上干货!  spark-submit在哪个位置 [spark@master ~]$ cd $SPARK_HOME/bin [spark@master bin]$ pwd /usr/loca ...