linux下实现监控进程网络带宽
嗯,近期都在网易游戏实习,所以貌似有段时间没有上来写点东西了。。。
来网易游戏实习最基本的目的事实上就是想知道在游戏公司里面工作都是些什么内容,毕竟自己曾经也没有接触过游戏公司。。
还比較的好奇。。
。
曾经可能认为游戏公司各种高大上吧。做的工作各种有意思。
。如今看来应该也不是这样子的,毕竟大多数时间应该还是在写游戏的逻辑代码了。。
。
挺奇怪的。
。
。感觉尽管在游戏公司实习。可是做的事情还是自己的老本行。
。。由于要用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下实现监控进程网络带宽的更多相关文章
- windows和linux下关闭Tomcat进程
windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...
- Linux下查看某个进程打开的文件数-losf工具常用参数介绍
Linux下查看某个进程打开的文件数-losf工具常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在linux操作系统中,一切皆文件.通过文件不仅仅可以访问常规数据,还 ...
- Linux下分析某个进程CPU占用率高的原因
Linux下分析某个进程CPU占用率高的原因 通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用 1.top 查到占用cpu高的进程pid 2.查看该pid的线程 ...
- 解决linux下tomcat停止进程任存在问题
解决linux下tomcat停止进程任存在问题 在Linux下(之所以强调linux下,是因为在windows下正常),执行tomcat ./shutdown.sh 后,虽然tomcat服务不能正常访 ...
- windows和linux下杀死Tomcat进程,解决端口占用
windows和linux下解决Tomcat进程 windows下启动Tomcat报错,8080端口号被占用,报错信息如下 两种解决方法,一种是关闭了这个端口号,另外一种是修改Tomcat下的serv ...
- linux下1号进程的前世(kthread_init)今生(init)
参考: 1. Linux下1号进程的前世(kernel_init)今生(init进程)----Linux进程的管理与调度(六) 2. linux挂载根文件系统过程 3. BusyBox init工作 ...
- linux下脚本监控网络流量
linux下脚本监控网络流量 学习了:https://blog.csdn.net/chenghuikai/article/details/48437479 学习了:http://www.jb51.ne ...
- [转帖]linux下网络监控神器"iptraf-ng"
linux下网络监控神器"iptraf-ng" https://www.cnblogs.com/dupengfei/articles/iptraf-ng.html 优点:监控的网络 ...
- linux下查看当前进程以及杀死进程
###linux下查看当前进程以及杀死进程 查看进程 ps命令查找与进程相关的PID号: ps a :显示现行终端机下的所有程序,包括其他用户的程序. ps -A :显示所有程序. ps c :列出程 ...
随机推荐
- chkconfig---检查设置系统服务
chkconfig命令 chkconfig命令检查.设置系统的各种服务.这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务 ...
- using the easy connect naming method 简单连接測试
一直都不明确sqlnet.ora中的NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)是什么意思.今天看到一篇文档,就是登陆选用的方式.做一个測试: tnsname ...
- Leetcode47: Palindrome Linked List
Given a singly linked list, determine if it is a palindrome. 推断一个链表是不是回文的,一个比較简单的办法是把链表每一个结点的值存在vect ...
- LeetCode 136 Single Number(仅仅出现一次的数字)
翻译 给定一个整型数组,除了某个元素外其余元素均出现两次. 找出这个仅仅出现一次的元素. 备注: 你的算法应该是一个线性时间复杂度. 你能够不用额外空间来实现它吗? 原文 Given an array ...
- Objective-C基础笔记(9)Foundation常用类NSArray
NSArray用来存储对象的有序列表,它是不可变的 NSArray不能存储C语言中的基本数据类型,如int.float.enum.struct,也不能存储nil,nil代表数组元素的结束 // // ...
- BZOJ3282: Tree (LCT模板)
Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和 ...
- 洛谷——P1073 最优贸易 ([NOIP2009] )
https://www.luogu.org/problem/show?pid=1073 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多 ...
- 洛谷 P1100 高低位交换
P1100 高低位交换 题目描述 给出一个小于2^32的正整数.这个数可以用一个32位的二进制数表示(不足32位用0补足).我们称这个二进制数的前16位为“高位”,后16位为“低位”.将它的高低位交换 ...
- 【SonicUI】关于字体高亮的问题。。
m_pSonicString[1]->Format(_T("/c=%x, a='http://hi.csdn.net/', linkh=0xFF00F0, font, font_hei ...
- ie为什么那么垃圾(不是ie垃圾,是ie用的人太多了,很多在用低版本)
ie为什么那么垃圾(不是ie垃圾,是ie用的人太多了,很多在用低版本) 一.总结 1.我们觉得ie差的原因:我们拿老的ie和最新的其它浏览器做比较了,两者相差了很多年.比较微软几十年才发布了11个ie ...