• 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

  • 相关阅读:
    前端--HTML
    并发函数--线程
    并发编程--进程
    一个好用的网站,各种在线
    django Models与数据库关系
    流文件下载
    小白都能秒懂的各数据库在Django的配置
    关于django 内建缓存 信号 及自定义json的配置
    django批量创建数据
    关于drf的组件
  • 原文地址:https://www.cnblogs.com/linu/p/10374767.html
Copyright © 2020-2023  润新知