cpu的计算

ps cpu的定义

man page中给出的定义:

cpu utilization of the process in "##.#" format. Currently, it is the CPU time used divided by the time the process has been running (cputime/realtime ratio), expressed as a percentage. It will not add up to 100% unless you are lucky. (alias pcpu).

  • cputime:进程生命周期中使用cpu的时间
  • realtime:进程生命周期
  • %cpu = cputime/realtime*100, 不可能达到100%

top cpu的定义

man page 定义:

The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if 'Irix mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the total number of CPUs. You toggle 'Irix/Solaris' modes with the 'I' interactive command.

默认情况下是3s刷新一次屏幕,也就是3s内的cpu使用情况。

ps是从进程启动就开始计算,是平均的占用率;而top是从上次刷新开始算的,一般几秒钟一刷,可以认为是即时的。而且top默认cpu的占用率的和并不是100%,而是核数x100%,所以有时会有一个进程占用超过100%的情况。

top命令中的%CPU字段表示:在一个固定的间隔时间内,某个进程使用的CPU时间占总CPU时间(即这段间隔时间)的比值。[在Window操作系统下的资源管理器中的CPU字段含义也是如此]

手动计算top命令中的%CPU字段

  • 利用ps

    确定一个间隔时间,在间隔时间的开始处,执行ps命令,获取某个进程在开始处已经使用的CPU时间;在间隔时间的结束处,执行ps命令,获取某个进程在结束处已经使用的CPU时间。

    间隔时间内进程使用的CPU时间=结束处使用的CPU时间-开始处使用的CPU时间

    %CPU=间隔时间内进程使用的CPU时间*100/CPU总时间(即间隔时间长度)
  • 利用/proc下的数据

    ps命令的数据来自于/proc目录下的文件,因而如果直接使用/proc下的数据也是可以实现“手动计算top命令中的%CPU字段”的目标的

进程proc参数定义

$ cat /proc/28433/stat
28433
(happy-agent)
S
1 ppid
28395 pgrp
28395 session
0 tty
-1 tpgid
4202496
80653
91801047
0
0
96 utime
94 ctime
2932 uctime
4477 sctime
20
0
10
0
2219421267 start time
181817344 1887 18446744073709551615 1 1 0 0 0 0 0 3 2143420156 18446744073709551615 0 0 17 31 0 0 0
0
0

其中,第14,15,16.17, 21个参含义如下:

  • utime=1587 该任务在用户态运行的时间,单位为jiffies

  • stime=1 该任务在核心态运行的时间,单位为jiffies

  • cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies

    (子进程用户态消耗的时间)

  • cstime=0 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies

    (子进程内核态消耗的时间)

  • start_time 进程的启动时间(相对于系统开机时刻), 单位为jiffies

ps 命令中的time字段表示占用cpu时间,

$ ps –p 1222 –otime

这个时间是如何计算的呢?

通过与/proc/pid/stat中数据的比对,可以得出ps的cpu时间

time=utime + systime

则ps的%CPU=time/进程生命周期。

使用proc数据计算进程CPU百分比

计算公式

%CPU=cpu_time/interval

cpu_time的计算

通常,进程占用cpu时间cpu_time有两种方式:

一种方式

utime+stime+uctime+sctime

这个4个参数可以通过如下方式得到:

$ cat /proc/28433/stat | cut -d" " -f 14,15,16,17
498 402 12752 19498

cpu_time = (utime+stime+uctime+sctime)/HZ

另一种方式

只考虑进程自身的使用时间,不考虑子进程的使用时间。

utime+stime

cpu_time = (utime+stime)/HZ

HZ的计算

HZ表示1s 振动次数(滴答数)。

可使用命令返回每秒钟的滴答数HZ

$ getconf CLK_TCK

总滴答数除以HZ就是,就是以秒为单位的时间

时间间隔interval的计算

可以使用开机启动时间计算间隔:

interval = uptime1 – uptime2

而系统启动时间,单位就是秒

$ cat /proc/uptime  | cut -d" " -f 1
22289498.57

参考

/proc/pid/stat各字段含义

https://www.linuxidc.com/Linux/2010-12/30589.htm

如何获取进程已经运行的时间

http://smilejay.com/2012/05/get_process_time/

ps 和top命令的cpu

https://unix.stackexchange.com/questions/58539/top-and-ps-not-showing-the-same-cpu-result

cpu占用率

http://www.samirchen.com/linux-cpu-performance/

https://stackoverflow.com/questions/16726779/how-do-i-get-the-total-cpu-usage-of-an-application-from-proc-pid-stat

https://segmentfault.com/a/1190000008567845

ps 和 top 的cpu的区别的更多相关文章

  1. ps和top的区别,以及各参数意思

    这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息  命令:ps aux或者ps lax [root@L ...

  2. Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式最占cpu的进程

    Linux 用 ps 與 top 指令找出最耗費 CPU 與記憶體資源的程式 2016/12/220 Comments  ######### ps -eo pid,ppid,%mem,%cpu,cmd ...

  3. Linux命令:ps,netstat,top

    ps ps用于查看当前运行的进程.如果想查看动态的进程信息,可以使用top命令.查看详细命令帮助使用man ps. ps最常用的选项组合就是ps aux: # ps aux USER PID %CPU ...

  4. linux包之procps之ps与top

    概述 阅读man ps页,与man top页,最权威与标准,也清楚 有时候系统管理员可能只关心现在系统中运行着哪些程序,而不想知道有哪些进程在运行.由于一个应用程序可能需要启动多个进程.所以在同等情况 ...

  5. Linux运维平台工具:pstree、ps、top、htop、free、vmstat、dstat、kill、killall

    1.pstree命令 查看进程树,centos7下统一由systemd进行管理 [root@ELK-chaofeng systemd]# pstree systemd─┬─AliYunDun───*[ ...

  6. Linux 进程管理 ps、top、pstree命令

    ps命令:查看系统中正在运行的进程 ps 是用来静态地查看系统中正在运行的进程的命令.不过这个命令有些特殊,它的部分选项不能加入"-",比如命令"ps aux" ...

  7. linux学习笔记27--监控命令ps和top,free

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  8. Linux 下的任务管理 —— ps、top

    ps:report a snapshot of the current processes. ps 命令支持三种使用的语法格式 UNIX 风格,选项可以组合在一起,并且选项前必须有"-&qu ...

  9. ps与top命令简单介绍

    Linux中ps与top命令 这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息  命令:ps aux或 ...

随机推荐

  1. python scrapy解码方法和时间格式转换

    import scrapy from datetime import datetime class BianSpider(scrapy.Spider): name = 'bian' # allowed ...

  2. 广播多路访问链路上的OSPF

    实验要求:配置OSPF 拓扑如下: 配置如下: R1 enableconfigure terminal interface l0ip address 192.168.10.1 255.255.255. ...

  3. HTTP Security Header Not Detected未检测到HTTP安全标头

    遇到此安全问题,只需修改Web.config文件. 如: 未处理之前配置代码如下: <httpProtocol> <customHeaders> <add name=&q ...

  4. Linux more命令详解

    more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回( ...

  5. ::before和::after伪元素

    伪元素的意思就是,元素不是在DOM中生成的,而是在浏览器渲染CSS的时候画上去的,所以在浏览器查看元素上是看不到伪元素的HTML结构的. before 和 after 顾名思义就是附着在元素前后的伪元 ...

  6. nginx安装,配置,并可以放静态文件教程

    简单介绍一下:nginx是一个高性能的HTTP和反向代理的服务器.能有处理最高5,0000的并发量,是新兴的一个代理服务器.中国大陆使用nginx网站用户有:百度.京东.新浪.网易.腾讯.淘宝等. 安 ...

  7. FZU软工第十一次作业-软件产品案例分析

    目录 前言: 第一部分.调研,评测: 1.1.初次感觉: 1.2.企业号bug: 1.3.你觉得为什么这个产品组的人没有发现这些bug: 1.4.假设你们团队需要开发这套系统,需要注意哪些方面: 2. ...

  8. How to do distributed locking

    How to do distributed locking 怎样做可靠的分布式锁,Redlock 真的可行么? 本文是对 Martin Kleppmann 的文章 How to do distribu ...

  9. json(传输格式)、异步加载、时间线

    xml:过去传输的数据格式 json:现在的传输数据格式,属性名加双引号来区别,其实也是对象,传输的是个字符串,其实就是json 前端JSON.stringfy(obj) 然后传给后台 后台传回来的j ...

  10. Python下载与安装配置

    最近想学习Python那就开始吧 首先就是下载安装了 Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:https://www.python.org/ 你 ...