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()
python cpu_single cpu0
python cpu_single cpu1