top状态细分,进程状态

(一)jiffies

全局变量jiffies记录自系统启动以来产生的节拍数,在系统启动时jiffies初始化为0,每次时钟中断时会增加jiffies的数值。也就是会说,每秒钟jiffies增加的数值就是系统的HZ数。

jiffies的类型为无符号长整型(unsigned long)

进程计算系统占用节拍和用户态占用节拍使用jiffies为单位。进程启动以来占用cpu的用户态和系统态的节拍数在pid/stat文件中表明,top工具就是直接读取/proc/<pid>/stat文件来计算进程的cpu使用百分比的。

(二)proc/<pid>/stat文件详解

pid:进程号(包含轻量级进程,就是线程)

comm:应用程序或者命令的名字

task_stat:R任务的状态,Running/Sleeping(TASK_INTERRUPTIBLE)/Disk sleep(TASK_UNINTERRUPTIBLE)/T/Zombie

ppid:父进程ID

pgid:线程组号

utime:用户态运行时间,单位为jiffies

stime:该进程在系统态运行时间,单位为jiffies

priority:任务的动态优先级

nice:任务的静态优先级

task_cpu:运行在那个cpu上

。。。。。还有很多项

实际上,proc下的stat文件就是内核中下面结构体的proc文件系统输出

typedef struct statstruct_proc {

  • int           pid;                      /** The process id. **/
  • char          exName [_POSIX_PATH_MAX]; /** The filename of the executable **/
  • char          state; /** 1 **/          /** R is running, S is sleeping,
  • D is sleeping in an uninterruptible wait,
  • Z is zombie, T is traced or stopped **/
  • unsigned      euid,                      /** effective user id **/
  • egid;                      /** effective group id */
  • int           ppid;                     /** The pid of the parent. **/
  • int           pgrp;                     /** The pgrp of the process. **/
  • int           session;                  /** The session id of the process. **/
  • int           tty;                      /** The tty the process uses **/
  • int           tpgid;                    /** (too long) **/
  • unsigned int  flags;                    /** The flags of the process. **/
  • unsigned int  minflt;                   /** The number of minor faults **/
  • unsigned int  cminflt;                  /** The number of minor faults with childs **/
  • unsigned int  majflt;                   /** The number of major faults **/
  • unsigned int  cmajflt;                  /** The number of major faults with childs **/
  • int           utime;                    /** user mode jiffies **/
  • int           stime;                    /** kernel mode jiffies **/
  • int       cutime;                   /** user mode jiffies with childs **/
  • int           cstime;                   /** kernel mode jiffies with childs **/
  • int           counter;                  /** process‘s next timeslice **/
  • int           priority;                 /** the standard nice value, plus fifteen **/
  • unsigned int  timeout;                  /** The time in jiffies of the next timeout **/
  • unsigned int  itrealvalue;              /** The time before the next SIGALRM is sent to the process **/
  • int           starttime; /** 20 **/     /** Time the process started after system boot **/
  • unsigned int  vsize;                    /** Virtual memory size **/
  • unsigned int  rss;                      /** Resident Set Size **/
  • unsigned int  rlim;                     /** Current limit in bytes on the rss **/
  • unsigned int  startcode;                /** The address above which program text can run **/
  • unsigned int  endcode;                  /** The address below which program text can run **/
  • unsigned int  startstack;               /** The address of the start of the stack **/
  • unsigned int  kstkesp;                  /** The current value of ESP **/
  • unsigned int  kstkeip;                 /** The current value of EIP **/
  • int       signal;                   /** The bitmap of pending signals **/
  • int           blocked; /** 30 **/       /** The bitmap of blocked signals **/
  • int           sigignore;                /** The bitmap of ignored signals **/
  • int           sigcatch;                 /** The bitmap of catched signals **/
  • unsigned int  wchan;  /** 33 **/        /** (too long) **/
  • int       sched,        /** scheduler **/
  • sched_priority;       /** scheduler priority **/
  • } procinfo;

(三)top工具源码简介

之前的项目中在top工具上增加patch,由于项目中的某些统计信息使用top的值计算进程的占用率,而在top第一次统计是会有不准确的情况。top计算实时cpu利用率的原理是,选取两个采样时间点A和B,A的utime+stime 减去B时间点的utime+stime,再除以AB时间点之间换算100%的总jiffes数。当在top中一直不断在键盘输入时,这样重复的打断会导致AB时间点相隔非常短,只有一个jiffes,除数非常小导致计算出来的cpu占用率大于100%。

我们加上一个patch,使得top内核进程占用率大于100%时,显示100%。

时间: 2024-08-02 10:49:36

top状态细分,进程状态的相关文章

ios开发之手势动作状态细分state,同一视图添加两个手势

1.比如拖拽一个视图,形成类似scrollView的翻页形式 在拖拽的方法里判断拖拽的状态state属性,根据状态不同执行自己需要的效果. 2.同一视图添加两个手势,需要使用手势的代理方法.允许此操作.(可看手势演讲稿) 版权声明:本文为博主原创文章,未经博主允许不得转载.

笔记8(日常运维w、vmstat、top、sar、nload、free、ps、netstat、tcptump、Linux防火墙)

w查看系统负载 date 查看当前系统的时间 w出来的,第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载.第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等.其实,在这些信息当中,我们最应该关注的应该是第一行中的 'load average:' 后面的三个数值. 第一个数值表示1分钟内系统的平均负载值:第二个数值表示5分钟内系统的平均负载值:第三个数值表示15分钟系统的平均负载值.这个值的意义是,单位时间段内CPU活动进程数

Linux查看系统状态命令

Linux查看系统状态命令     iostat iostat 命令详细地显示了存储子系统方面的情况.你通常用iostat来监控存储子系统总体上运行状况如何,并且在用户注意到服务器运行缓慢之前提早发现输入/输出缓慢的问题.相信我,你应该在用户发现这些问题之前先发现这些问题! meminfo和free meminfo为你详细显示了内存方面的情况.你通常可以使用另一个程序,比如cat和grep,来访问meminfo的信息.比如说,cat /proc/meminfo为你详细显示了服务器的内存在任何一个

Linux 中top命令的解读

top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器. top用于动态监控进程所占系统资源,每隔3秒变一次.这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面.top命令打印出了很多信息,包括系统负载(loadaverage).进程数(Tasks).cpu使用情况.内存使用情况以及交换分区使用情况. 命令内容详解: 第一行: top - 04:25:26  当前系统时间 up 3 min,  

Linux系统日常管理1 w,vmstat,top,sar,free,ps监控命令

一. w, uptime 命令w, uptime [[email protected] ~]# w  04:02:31 up 1 day,  8:25,  1 user,  load average: 0.00, 0.00, 0.00 USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHAT root     pts/0    192.168.21.103   23:38    0.00s  0

Linux 查看进程资源--ps、top命令

1,ps命令 ps能够给出当前系统中进程的快照.它能捕获系统在某一事件的进程状态 命令参数:         a                                      显示所有进程        -a                                      显示同一终端下的所有程序        -A                                     显示所有进程         c                           

top工具

top 显示进程所占系统资源 能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top命令打印出了很多信息,包括系统负载(loadaverage).进程数(Tasks).cpu使用情况.内存使用情况以及交换分区使用情况. 其实上面这些内容可以通过w,vmstat命令来查看,所以用top重点查看的还是下面的进程使用系统资源详细状况. 这个命令用于动态监控进程所占系统资源,每隔3秒变一次. top 重点用来查看进程使用系统资源详细状况. ~]# top top - 16:

Linux监控命令整理(top,free,vmstat,iostat,mpstat,sar,netstat)

1.1 top 1.1.1 命令说明 Top 命令能够实时监控系统的运行状态,并且可以按照cpu.内存和执行时间进行排序 1.1.2 参数说明 命令行启动参数: 用法: top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...] -b : 批次模式运行.通常用作来将top的输出的结果传送给其他程式或储存成文件 -c : 显示执行任务的命令行 -d : 设定延迟时间 -h : 帮助 -H : 显示线

linux监控系统的状态

1.命令w的第一行和uptime或者用upload2.system load averages 表示单位时间短内活动的进程数3.查看cpu的个数和核数processor.physical id 4.vmstat5.vmstat 1 10 查看cpu信息cat /proc/cpuinfoproc显示进程的相关信息 r:表示允许和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了. b:表示等待资源的进程数,比如等待I/O.内存等.该数值如果长时间大于11,则需要关注一下