[C++]Linux之虚拟文件系统[/proc]中关于CPU/内存/网络/内核等的一些概要性说明
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神。也欢迎大家一起探讨,交流,以共同进步~ 0.0
1.Linux虚拟文件系统
首先要明白,这到底是干啥的。[以下,引用博文linux 计算内存使用率 :http://blog.csdn.net/u010807846/article/details/40919393的原话,可以作为参考性理解]
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的采集流程图。
其访问目录:/proc/*

2.深入概述
PROC:(/proc)读取proc文件系统,获取系统各种性能参数
CPU:
使用率:/proc/stat 或者 /proc/cpuinfo
用户模式(user),低优先级用户模式(nice),内核模式(system)和空闲的处理器时间(idle)
计算方法:
100*( user + nice + system / user + nice + system + idle)
备注:多核情况下某一进程cpu使用率是按cpu个数*100%计算的
总的cpu时间
totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest
单位:
jiffies
jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数.(C中clock_t和CLOCKS_PER_SEC与此有关)
在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间
例子:
user (38082) 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
nice (627) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
system (27594) 从系统启动开始累计到当前时刻,处于核心态的运行时间
idle (893908) 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait (12256) 从系统启动开始累计到当前时刻,IO等待时间(since 2.5.41)
irq (581) 从系统启动开始累计到当前时刻,硬中断时间(since 2.6.0-test4)
softirq (895) 从系统启动开始累计到当前时刻,软中断时间(since 2.6.0-test4)stealstolen(0)
内存:
使用情况:/proc/meminfo
当前内存使用量(cmem),内存总量(amem)
计算方法:100*(cmem / amem)
详情见博主另一博文:
Linux之计算内存利用率与辨析 :http://www.cnblogs.com/johnnyzen/p/8011309.html
网络负载:
使用情况:/proc/net/dev
从本机输出的数据包数(output),流入本机的数据包数(input)
计算方法:(output + input)/2
详情见博主另一博文:
Linux之读取计算机网络数据[/proc/net/dev] :http://www.cnblogs.com/johnnyzen/p/8007577.html
Linux之网络实时检测功能[C编程] :http://www.cnblogs.com/johnnyzen/p/8009053.html
其他(内核等):
/proc/sys
存放所有可读的文件的目录
/proc/sys/kernel
包含反通用内核行为的信息
/proc/sys/net
修改机器/网络的网络属性
实例:
允许IP转发:/proc/sys/net/ipv4/ip_forward
禁止ping:/proc/sys/net/ipv4/icmp_echo_ignore_all【1:实现配置;0:取消配置】
3.参考文献:
[操作系统课程设计]:https://max.book118.com/html/2017/0104/79942647.shtm
[操作系统课程设计报告]:https://wenku.baidu.com/view/1c083c4dc77da26924c5b0c7.html
[Linux平台Cpu使用率的计算]:http://www.blogjava.net/fjzag/articles/317773.html
[Linux系统下输出某进程内存占用信息的c程序实现]:https://www.cnblogs.com/bozhicheng/p/6216667.html
[关于proc和CPU计算与原理]:https://wenku.baidu.com/view/375b7311f01dc281e53af0c6.html
[C++]Linux之虚拟文件系统[/proc]中关于CPU/内存/网络/内核等的一些概要性说明的更多相关文章
- linux的虚拟文件系统VFS
虚拟文件系统(virtual file system),别名虚拟文件系统开关,是linux中的一个软件层,向用户空间提供文件系统操作接口. VFS包含的系统调用包括open(2).stat(2).re ...
- Linux 的虚拟文件系统(强烈推荐)
1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系 ...
- 从文件 I/O 看 Linux 的虚拟文件系统
1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系 ...
- Linux -- 如何减少IO过程中的CPU copy
四种I/O方式的对比 1. Buffered I/O read(file, tmp_buf, len); write(socket, tmp_buf, len); 上下文切换:4次 CPU copy: ...
- linux 查看CPU内存 网络 流量 磁盘 IO
使用vmstat命令来察看系统资源情况 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? Q: 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? A: 在命 ...
- jmeter监控linux cpu 内存 网络 IO
下载地址:http://jmeter-plugins.org/downloads/all/ PerfMon: 用来监控Server的CPU.I/O.Memory等情况 ServerAgent-2.2. ...
- 使用psutil库监控linux的系统资源和自定义进程的cpu 内存占用。
#coding=utf8 import time import psutil from pprint import pprint from logger_until import LoggerUnti ...
- 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解
http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...
- Linux虚拟文件系统
从文件 I/O 看 Linux 的虚拟文件系统 1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux ...
随机推荐
- c 结构体 & 函数指针模拟实现一个java class(类) 和方法
闲来无事,纯粹练习. student.h #ifndef STUDENT_H_INCLUDED #define STUDENT_H_INCLUDED #include <memory.h> ...
- R语言实现两文件对应行列字符替换(解决正负链统一的问题)
假设存在文件file1.xlsx,其内容如下: 存在文件file2.xlsx,其内容如下: 现在我想从第七列开始,将file2所有的字符替换成file1一样的,即第七.八.九.十列不需要改变,因为fi ...
- PHP ACCESS-CONTROL-ALLOW-ORIGIN ,设置跨域头
php里允许别的域名跨域访问,先解释下跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 所谓同源是指,域名,协议,端口均相同 ...
- Tomcat第一个站点介绍
背景 在讨论如何组织源码目录之前,很有必要对现有web站点的组织结构进行测试,特别是2.2版本的API,在服务器版本上是不同的,所以在2.2之后的版本中,所有的服务器版本都要求能够使用标准的压缩web ...
- (count 或直接枚举) 统计字符 hdu1860
统计字符(很水) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1860 Time Limit: 1000/1000 MS (Java/Others) ...
- C语言#和##操作符使用方法
1.#操作符 1:#操作符用于预处理阶段,将宏参数转换为字符串,只有宏定义中使用(#define) 使用方法: #define STRING(x) #x printf( ...
- 解决python安装错误问题
遇到的问题描述: An error occurred during the installation of assemblyA Microsoft.VC90. CRT, version=9-0.307 ...
- Jqgrid pager 关于“local” dataType 动态加载数据分页的研究(没好用的研究结果)
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...
- mysql同步复制异常的常见操作-传统复制方式
mysql同步复制异常的常见操作-传统复制方式 一.传统复制方式是基于非gtid的,常见的错误有1032和1062 1032是主键冲突,1062是从库中没有找到对应的记录. 可以查看出现错误的binl ...
- 设计模式---行为变化模式之命令模式(Command)
前提:行为变化模式 在组件的构建过程中,组建行为的变化经常导致组件本身剧烈的变化.“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件的变化,实现两者之间的松耦合. 类中非虚函数和静态函数方法 ...