top命令详解

lscpu

一、top命令详解

1)执行命令top

[root@game ~]# top
top - 14:22:33 up 26 days, 20:41,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 213 total,   1 running, 212 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.8%us,  0.4%sy,  0.0%ni, 98.7%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65971728k total, 27257084k used, 38714644k free,   640724k buffers
Swap:        0k total,        0k used,        0k free, 13768284k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                         
14608 root      20   0 8753m 2.3g  14m S  8.0  3.6 443:18.07 java

各个参数解释

第一行:主要查看负载情况
    14:22:33   当前时间
    26 days, 20:41        系统运行了多久时间,这个时间内没有重启过
    2 users,    当前有2个用户登录进来
    load average: 0.00, 0.00, 0.00        后面的三个数分别是1分钟、5分钟、15分钟的负载情况
    load average  数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑 CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
    
第二行:查看任务情况
    系统现在共有213个进程,其中处于运行中的有1个,212个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行:cpu状态
    0.8% us 用户空间占用CPU的百分比。
    0.4% sy 内核空间占用CPU的百分比。
    0.0% ni 改变过优先级的进程占用CPU的百分比
    98.7% id 空闲CPU百分比
    0.1% wa IO等待占用CPU的百分比
    0.0% hi 硬中断(Hardware IRQ)占用CPU的百分比
    0.0% si 软中断(Software Interrupts)占用CPU的百分比
    
第四行:内存状态
    65971728k total 物理内存总量(63GB)
    27257084k used 使用中的内存总量(26GB)
    38714644k free 空闲内存总量(37G)
    640724k buffers 缓存的内存量 (600M)

第五行:swap交换分区
    0k total 交换区总量(0GB)
    0k used 使用的交换区总量(0GB)
    0k free 空闲交换区总量(0GB)
    4217456k cached 缓冲的交换区总量(13GB)
    
第七行以下:各进程(任务)的状态监控
    PID 进程id
    USER 进程所有者
    PR 进程优先级
    NI nice值。负值表示高优先级,正值表示低优先级
    VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR 共享内存大小,单位kb
    S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU 上次更新到现在的CPU时间占用百分比
    %MEM 进程使用的物理内存百分比
    TIME+ 进程使用的CPU时间总计,单位1/100秒
    COMMAND 进程名称(命令名/命令行)

2)各个cpu核数查看,按1

3)各个进场默认是按照cpu的用量进行排序的

  查看最高内存占用者: 敲击键盘b(打开/关闭加亮效果)

4)敲击键盘x(打开/关闭排序列的加亮效果)

  通过shift + >或shift + <可以向右或左改变排序列

二、top命令的另一种编排

1) 按了top后,敲f 。查看对应字段的详细解释

2)回车返回top查看界面

 三、top命令外,其他命令的补充

监控java线程数:
ps -eLf | grep java | wc -l
监控网络客户连接数:
netstat -n | grep tcp | grep 侦听端口 | wc -l
上面两个命令,可改动grep的参数,来达到更细致的监控要求。

在Linux系统一切都是文件的思想贯彻指导下,所有进程的运行状态都可以用文件来获取。系统根目录/proc中,每一个数字子目录的名字都是运行中的进程的PID,
进入任一个进程目录,可通过其中文件或目录来观察进程的各项运行指标,例如task目录就是用来描述进程中线程的,因此也可以通过下面的方法获取某进程中运行中的线程数量(PID指的是进程ID): ls
/proc/PID/task | wc -l 在linux中还有一个命令pmap,来输出进程内存的状况,可以用来分析线程堆栈: pmap PID

 四、查看单个cpu的使用情况

1)命令。cat /proc/stat

[root@test ~]# cat /proc/stat 
cpu  51572 54 113910 176232618 49926 0 3756 0 0 0
cpu0 9957 6 16148 44099296 11140 0 887 0 0 0
cpu1 10881 20 36113 44085051 11687 0 171 0 0 0
cpu2 15436 8 34950 43982911 19456 0 2124 0 0 0
cpu3 15297 18 26697 44065359 7641 0 573 0 0 0
intr 48880387 20 345 0 0 0 0 0 0 1 0 0 0 2238 0 0 431581 2 78709 60 953140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42259 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 58122892
btime 1549687379
processes 36646
procs_running 1
procs_blocked 0
softirq 17149265 1 7819784 88485 1162655 288772 0 64870 5802632 0 1922066

内容详解

[root@test ~]# cat /proc/stat 
     user   nice  system     idle        iowait  irq   softirq
cpu  51572     54       113910   176232618    49926    0    3756  0 0 0
cpu0 9957     6       16148    44099296     11140    0    887   0 0 0
cpu1 10881  20       36113    44085051     11687    0    171   0 0 0
cpu2 15436  8     34950    43982911     19456    0    2124  0 0 0
cpu3 15297  18    26697    44065359     7641 0     573   0 0 0
intr 48880387 20 345 0 0 0 0 0 0 1 0 0 0 2238 0 0 431581 2 78709 60 953140 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42259
ctxt 58122892
btime 1549687379
processes 36646
procs_running 1
procs_blocked 0
softirq 17149265 1 7819784 88485 1162655 288772 0 64870 5802632 0 1922066

每行每个参数的意思为(以第一行为例,单位:jiffies,1jiffies=0.01秒):
user(51572):从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。
nice(54):从系统启动开始累计到当前时刻。
system(113910):从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。
idle(176232618):从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间。
iowait(49926):从系统启动开始累计到当前时刻,硬盘IO等待时间。
irq(0):从系统启动开始累计到当前时刻,硬中断时间。
softirq(3756):从系统启动开始累计到当前时刻,软中断时间。
CPU时间=user+nice+system+idle+iowait+irq+softirq。

 单核cpu的计算方式

计算方法:
1、 采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:
(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

2、 计算总的Cpu时间片totalCpuTime
    a) 把第一次的所有cpu使用情况求和,得到s1;
    b) 把第二次的所有cpu使用情况求和,得到s2;
    c) s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;
3、计算空闲时间idle
    idle对应第四列的数据,用第二次的第四列 - 第一次的第四列即可
    idle=第二次的第四列 - 第一次的第四列

6、计算cpu使用率
    pcpu =100* (total-idle)/total

编辑python脚本:Python单核脚本使用率计算

注意:首次执行需要执行:

cat /proc/stat > /root/tmp_stat
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re, subprocess
import sys


def cpu(path):
    cpu_dict = {}
    with open(path, mode='r', encoding='utf-8') as f:
        count = -1
        for line in f:
            if re.findall('Acpu', line):
                line = line.split(' ')
                if line[0] != 'cpu':
                    line = line[1:-1]
                    key = 'cpu'
                    sum = 0
                    count += 1
                    key = key + str(count)
                    for i in line:
                        sum += int(i)
                    # print(int(line[4]))
                    cpu_dict[key] = {'idle': int(line[3]), 'cpu': int(sum)}
    return cpu_dict


def comond():
    subprocess.Popen('cat /proc/stat > /root/tmp_stat',
                     shell=True,
                     stdout=subprocess.PIPE,  # 正确结果
                     stderr=subprocess.PIPE  # 错误结果
                     )


if __name__ == '__main__':
    a = cpu('/root/tmp_stat')
    b = cpu('/proc/stat')
    cpu = sys.argv[1]
    total = b[cpu]['cpu'] - a[cpu]['cpu']
    idle = b[cpu]['idle'] - a[cpu]['idle']
    pcpu = 100 * (total - idle) / total
    print(pcpu)
    comond()
cpu_single.py

 python cpu_single cpu0  

 python cpu_single cpu1

原文地址:https://www.cnblogs.com/linu/p/10374767.html