linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation

CPU 负载¶

Linux通过``/proc/stat``和``/proc/uptime``导出各种信息,用户空间工具

如top(1)使用这些信息计算系统花费在某个特定状态的平均时间。

例如:

$ iostat

Linux 2.6.18.3-exp (linmac) 02/20/2007

avg-cpu: %user %nice %system %iowait %steal %idle10.01 0.00 2.92 5.44 0.00 81.63

这里系统认为在默认采样周期內有10.01%的时间工作在用户空间,2.92%的时

间用在系统空间,总体上有81.63%的时间是空闲的。

大多数情况下``/proc/stat``的信息几乎真实反映了系统信息,然而,由于内

核采集这些数据的方式/时间的特点,有时这些信息根本不可靠。

那么这些信息是如何被搜集的呢?每当时间中断触发时,内核查看此刻运行的

进程类型,并增加与此类型/状态进程对应的计数器的值。这种方法的问题是

在两次时间中断之间系统(进程)能够在多种状态之间切换多次,而计数器只

增加最后一种状态下的计数。

举例

假设系统有一个进程以如下方式周期性地占用cpu:

两个时钟中断之间的时间线

|-----------------------|

^ ^

|_ 开始运行 |

|_ 开始睡眠

(很快会被唤醒)

在上面的情况下,根据``/proc/stat``的信息(由于当系统处于空闲状态时,

时间中断经常会发生)系统的负载将会是0

大家能够想象内核的这种行为会发生在许多情况下,这将导致``/proc/stat``

中存在相当古怪的信息:

/* gcc -o hog smallhog.c */

#include

#include

#include

#include

#define HIST 10

static volatile sig_atomic_t stop;

static void sighandler (int signr)

{

(void) signr;

stop = 1;

}

static unsigned long hog (unsigned long niters)

{

stop = 0;

while (!stop && --niters);

return niters;

}

int main (void)

{

int i;

struct itimerval it = { .it_interval = { .tv_sec = 0, .tv_usec = 1 },

.it_value = { .tv_sec = 0, .tv_usec = 1 } };

sigset_t set;

unsigned long v[HIST];

double tmp = 0.0;

unsigned long n;

signal (SIGALRM, &sighandler);

setitimer (ITIMER_REAL, &it, NULL);

hog (ULONG_MAX);

for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog (ULONG_MAX);

for (i = 0; i < HIST; ++i) tmp += v[i];

tmp /= HIST;

n = tmp - (tmp / 3.0);

sigemptyset (&set);

sigaddset (&set, SIGALRM);

for (;;) {

hog (n);

sigwait (&set, &i);

}

return 0;

}

参考

谢谢

Con Kolivas, Pavel Machek

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA 中的Java Web项目的资源文件复制新增如何更新到部署包中?

文章目录resources目录下的文件复制新增webapp目录的文件复制新增IntelliJ IDEA 中的Java Web项目的资源文件如果复制新增&#xff0c;正常的重新部署、重启服务器、update resources&#xff0c;并不会更新到部署包中&#xff0c;必须要特殊处理才行。 resources目录下的文件…

apache.camel_Apache Camel 2.23发布

apache.camel昨天发布了Apache Camel 2.23 &#xff0c;其中最值得注意的新功能是对Spring Boot 2.1的支持&#xff0c;我们还改进了启动器组件以包括更多的元数据&#xff0c;并对改进的Spring Boot自动配置进行了优化。 此版本主要是一个大的错误修复版本和一些其他小的新增…

在linux上安装mysql5.6,在linux(Centos 7以上版本亲测)上安装mysql5.6

./scripts/mysql_install_db --usermysql --datadir/usr/local/mysql/data/mysql如果执行报错[rootdc1atmpapp12 mysql]# ./scripts/mysql_install_db --usermysql --datadir/usr/local/mysql/data/mysql FATAL ERROR: please install the following Perl modules before execu…

NewServlet ‘***Servlet‘ already exists inthis Web facet.

使用模板创建了一个 Servlet&#xff0c;创建 Servlet 时没有勾选“Create Java EE 6 annotated class”&#xff0c;再把该 Servlet 删除掉&#xff0c;再创建同名的 Servlet&#xff0c;IDEA 就会报错&#xff1a;NewServlet ‘***Servlet’ already exists in this Web face…

payara 创建 集群_Apache Payara:让我们加密

payara 创建 集群前一段时间&#xff0c;我写了一个小教程 &#xff0c;介绍如何生成“让我们加密SSL”证书并将其安装在Glassfish Java EE平台上。 这个技巧对我来说是一个奇迹&#xff0c;但是每三个月必须手动更新和重新安装证书变得很烦人。 我做了一些研究&#xff0c;并…

腾讯为什么不开发linux软件下载,你认为国产操作系统如何搭建生态?为什么腾讯不给Linux系统适配QQ?...

Linux的软件少主要是&#xff0c;十几二十年前&#xff0c;要在Linux上开发软件&#xff0c;要遵循开源协议&#xff0c;也就意味着你在上面开发个的公开应用都得开源&#xff0c;至少得公开一部分&#xff0c;所以很多商业闭源应用都绕过了Linux。现在随着Linux的分支越来越多…

Download Apache Commons BeanUtils

下载地址&#xff1a;https://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi

stripe pay_J2Pay –实施网关

stripe pay介绍 如果您使用任何网关&#xff0c;您都可以在我们的库中实现该网关并支持开源世界&#xff0c;我们将非常高兴地欢迎贡献者。 您可以在这里找到我们的github存储库 在开始实现网关之前&#xff0c;您应该首先看到其他一些类。 以下是简要定义的类。 HTTP客户端…

linux l文件共享,llinux服务器文件共享的一种简单的方法

如果Centos虚拟机没有安装文件共享功能&#xff0c;那么客户端与服务器文件共享会产生一些困扰&#xff1b;这里有一个小的方法&#xff0c;可以快速实现linux服务器与windows共享&#xff1b;这里以CentOS 6.4 版本为例&#xff1b;通过xshell链接到服务器上&#xff1b;要在l…

BeanUtils的学习

BeanUtils 用于将数据封装成 JavaBean。 什么是 JavaBean 一种标准的 Java 类 要求&#xff1a; 1.类必须被public修饰 2.必须提供空参的构造器 3.成员变量必须使用private修饰 4.提供公共setter和getter方法 功能&#xff1a; JavaBean用于封装数据 主要的方法 popular&a…

java方法可选参数_Java可选参数

java方法可选参数在Java类中设计方法时&#xff0c;某些参数对于其执行而言可能是可选的。 无论是在DTO&#xff0c;胖模型域对象还是简单的无状态服务类中&#xff0c;可选方法参数都是常见的。 从本文中&#xff0c; 您将学习如何在Java中处理可选参数 。 我们将专注于常规方…

linux清空串口接收buff,openwrt解除console对串口的占用

console对串口的占用openwrt会将串口配置成console便于用户控制&#xff0c;以本人使用的WNDR4300为例打开盒子后可以看到一个串口被引出&#xff0c;开机后能够打印bootloder以及linux的启动日志。在启动到一定阶段之后可以作为console登陆有时候希望自己的程序占用串口来发送…

Druid Spring JDBC Servlet 实现登录功能

Druid 数据库连接池的实现技术 Spring JDBC 需要使用数据库连接池&#xff0c;Spring JDBC 提供非常好用的查询数据、插入数据、更新数据的API 开发步骤&#xff1a; 1.数据库的设计&#xff08;创建数据库、数据表&#xff09; 2.创建 Java EE 项目 3.导入相关的 jar 包 comm…

世界是沙粒还是宇宙_看到一个沙粒世界:再一次你好世界

世界是沙粒还是宇宙“看到一个沙粒中的世界”&#xff0c;我们很可能会看到最简单的“ Hello World”中的世界&#xff0c;所以我们开始吧&#xff0c;再一次向世界问好。 我猜所有的Java课程&#xff0c;教程都是从这个著名的Hello World程序开始的&#xff0c;这是我可以在没…

电脑word在哪_到底哪个PDF转Word最好用?

今天的内容很简单&#xff0c;就聊一个很基本的问题&#xff1a;PDF格式转换。而PDF转换中最具有代表性以及最常用的&#xff0c;莫过于PDF转Word了。那咱们今天就从PDF转Word着手&#xff0c;找出最好用的PDF转Word神器。特别提醒&#xff0c;这是一篇将近2000字长文。不想看过…

linux视音频解码教程,音视频编解码:NVIDIA Jetson Linux Multimedia API(总结)

音视频编解码&#xff1a;NVIDIA Jetson Linux Multimedia API(总结)2020年12月02日| 萬仟网IT编程| 我要评论一、官网链接官网链接&#xff1a;https://docs.nvidia.com/jetson/l4t-multimedia/index.html二、环境我这边用的是jetson nano&#xff0c;刷机是JetPack4.4版本。j…

IntelliJ IDEA for Mac下载、安装、使用TunnelliJ插件(一种TCP/IP Monitor)

文章目录下载和安装 TunnelliJ使用 TunnelliJIntelliJ IDEA 要使用类似于 Eclipse 的 TCP/IP Monitor&#xff0c;需要下载第三方插件&#xff0c;推荐使用 TunnelliJ 插件。下载和安装 TunnelliJ 或者按快捷键 ⇧ ⌘ A&#xff0c;搜索 plugins 也能打开插件管理界面&#…

干支纪年法简便算法_民间玄学:那些年我理解的何谓“天干”,“地支”,“干支”...

文/天泽子在我很小的时候&#xff0c;大概6岁左右&#xff0c;父亲带着我跟这一方面的知识开始接触&#xff0c;那个时候的我不明白天干&#xff0c;地支是什么&#xff1f;父亲的小学文化程度&#xff0c;只对我说“天干分别为&#xff1a;甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(d…

corda_吞吐量-Corda的故事

corda我最近启动了一个针对特定用例的Corda性能的项目。 该项目的结果使我们在170多个节点的网络上一天之内处理了1.15亿个请求。 此外&#xff0c;Corda每秒能够处理6300个请求&#xff0c;确认满足了网络的最高要求。 迄今为止&#xff0c;这是迄今为止已部署的最大的Corda网…

linux webapi测试,Webapi管理和性能测试工具WebBenchmark

WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具&#xff0c;在传统工具中一般管理工具缺乏性能压测能力或有性能测试的缺少管理功能&#xff1b;WebBenchmark的设计目标是就管理和性能压测能力同时具备。接下来介绍一下工具的功能和使用&#xff1a…