Linux评估 CPU使用情况
评价参数
1)CPU utilization:最直观最重要的就是CPU的使用率。如果长期超过80%,则表明CPU遇到了瓶颈;
2)User time: 用户进程使用的CPU;该数值越高越好,表明越多的CPU用在了用户实际的工作上;
3)System time: 内核使用的CPU,包括了硬中断、软中断使用的CPU;该数值越低越好,太高表明在网络和驱动层遇到瓶颈;
4)Waiting: CPU花在等待IO操作上的时间;该数值很高,表明IO子系统遇到瓶颈;
5)Idel time: CPU空闲的时间;
6)Load average: 在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数;在Linux中,进程分为三种状态:一种是阻塞的进程blocked process,一种是可运行的进程runnableprocess,另外就是正在运行的进程runningprocess。当进程阻塞时,进程会等待I/O设备的数据或者系统调用。进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行running one和准备好运行runnableone的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5,load average就是一定时间内的load数量均值;
7)Context Switch: 上下文切换。
top 命令 查看CPU 信息
第一行:
top - :: up min, users, load average: 0.10, 0.07, 0.14
分别表示的是:当前系统时间;up 25 min表示已经系统已经运行25分钟; 4 users:表示系统中有4个登录用户;load average: 分别表示最近 1 分钟, 5 分钟, 15分钟 CPU的负载的平均值。
这一行最重要的就是 load average。
第二行:
Tasks: total, running, sleeping , stopped, zombie
分别表示系统中的进程数:总共92个进程, 1个在运行,91个在sleep,0个stopped, 0个僵尸。
第三行:
Cpu(s): 0.0%us, 1.7 %sy, 0.0%ni, 97.7%id, 0.0%wa, 0.3%hi, 0.3%si, 0.0%st
这一行提供了关于CPU使用率的最重要的信息,分别表示 users time, system time, nice time, idle time, wait time, hard interrupte time, soft interrupted time, steal time; 其中最终要的是:users time, system time, wait time ,idle time 等等。nice time 表示用于调准进程nice level所花的时间。
第四行:
Mem: total, used ,free, buffers
提供的是关于内存的信息,因为Linux会尽量的来使用内存来进行缓存,所以这些信息没有多大的价值,free数值小,并不代表存在内存瓶颈。
第五行:
Swap: total, used, free ,cached
提供的是关于swap分区的使用情况,这些信息也没有太大的价值,因为Linux的使用内存的机制决定的。used值很大并不代表存在内存瓶颈。
剩下是关于每个进程使用的资源的情况,进程的各种信息,按照使用CPU的多少排序,每个字段的含义如下:
PID: 表示进程ID;
USER: 表示运行进程的用户;
PR:表示进程优先级;
NI:表示进程nice值,默认为0;
VIRT:The total amount of virtual memory used by the task.进程占用的虚拟内存大小,包括了swap out的内存page。
RES: Resident size (kb).The non-swapped physical memory a task is using. 进程使用的常驻内存大小,没有包括swap out的内存。
SHR:Shared Mem size (kb).The amount of shared memory used by a task. It simply reflects memory that could be potentially shared with other processes. 其实应该就是使用 shmget() 系统调用分配的共享内存,可以在多个进程之间共享访问。
S: 表示进程处于哪种状态:R: Running; S: sleeping; T: stoped; D: interrupted; Z:zomobie;
%CPU: 进程占用的CPU;
%MEM:进程占用的内存;
%TIME+: 进程运行时间;
COMMAND: 进程运行命令;
上面的 top 命令默认是以 进程为单位来显示的,我们也可以以线程为单位来显示: top -H
可以看到以线程为单位是,Tasks totol数量明显增加了,有92增加到了 134。
如果仅仅想查看 CPU 的 load average,使用uptime命令就行了:
[root@localhost ~]# uptime :: up :, users, load average: 0.00, 0.02, 0.00
vmstat 查看CPU 信息
上面各个字段的含义:
FIELD DESCRIPTION FOR VM MODE Procs r: The number of processes waiting for run time. b: The number of processes in uninterruptible sleep. Memory swpd: the amount of virtual memory used. free: the amount of idle memory. buff: the amount of memory used as buffers. cache: the amount of memory used as cache. inact: the amount of inactive memory. (-a option) active: the amount of active memory. (-a option) Swap si: Amount of memory swapped in from disk (/s). so: Amount of memory swapped to disk (/s). IO bi: Blocks received from a block device (blocks/s). bo: Blocks sent to a block device (blocks/s). System in: The number of interrupts per second, including the clock. cs: The number of context switches per second. CPU These are percentages of total CPU time. us: Time spent running non-kernel code. (user time, including nice time) sy: Time spent running kernel code. (system time) id: Time spent idle. Prior to Linux , this includes IO-wait time. wa: Time spent waiting , included in idle. st: Time stolen , unknown.
和CPU相关的信息有 user time, system time, idle time, wait time, steal time;
另外提供了关于中断和上下文切换的信息。System 中的in,表示每秒的中断数,cs表示每秒的上下文切换数;
其它的字段是关于内存和磁盘的。
iostat 命令查看 CPU 信息
[root@localhost ~]# iostat Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.27 0.02 4.74 0.28 0.00 94.69 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn scd0 sda [root@localhost ~]# iostat -c Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.26 0.02 4.72 0.27 0.00 94.72
提供了cpu的平均使用率。
ps 命令查看某个进程和某个线程的 CPU 信息
[root@localhost ~]# pidof mysqld [root@localhost ~]# ps -mp -o THREAD,pmem,rss,vsz,tid,pid USER %CPU PRI SCNT WCHAN USER SYSTEM %MEM RSS VSZ TID PID mysql - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - - mysql - - - - - - - -
先获得 mysqld 的基础PID 2412,
然后查看其线程的信息:ps -mp 2412-o THREAD,pmem,rss,vsz,tid,pid ( -p 指定进程PID, -o 指定输出格式,参见man ps)
第一列就是关于线程CPU的信息。另外我们也可以查出是占有的CPU很高的线程的tid。
关于ps我们一般使用 ps -elf , 如果想查看线程,可以 ps -elLf,其中的L表示 Leight weight process轻量级进程。
进程分析是终极利器——pidstat
pidstat是进程分析的终极利器,利用它可以分析进程(包括进程中所有每个线程)的各种信息:
cpu使用(默认就是cpu, -u 也是cpu), 内存使用(-r 包括page fault),IO情况(-d),进程切换(-w),
pidstat 可以使用 -p xxx 指定进程pid,单独分析一个进程及其所有线程;也可以是所有进程 -p ALL,或者是所有活动进程(默认是所有活动进程):
默认是所有活动进程的 CPU信息:
[root@localhost ~]# pidstat Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM PID %usr %system %guest %CPU CPU Command :: AM init :: AM kthreadd :: AM ksoftirqd/ :: AM watchdog/ :: AM events/
所有进程包括非活动进程,默认是CPU信息:
[root@localhost ~]# pidstat -p ALL Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM PID %usr %system %guest %CPU CPU Command :: AM init :: AM kthreadd :: AM migration/ :: AM ksoftirqd/ :: AM stopper/
[root@localhost ~]# pidstat -p ALL | wc -l [root@localhost ~]# ps -elf| wc -l
可以看到 上面两个结果统计系统所有进程数目是一致的。差了2,是因为结果头信息不同导致的。
查看 IO 信息(分别以进程角度和线程角度):
进程角度:
[root@localhost ~]# pidof mysqld [root@localhost ~]# pidstat -p -d Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM PID kB_rd/s kB_wr/s kB_ccwr/s Command :: AM 0.00 0.00 0.00 mysqld :: AM 0.00 0.00 0.00 mysqld Average: 0.00 0.00 0.00 mysqld
线程角度:
[root@localhost ~]# pidstat -p -d -t Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM TGID TID kB_rd/s kB_wr/s kB_ccwr/s Command :: AM - 0.00 0.00 0.00 mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld :: AM - 0.00 0.00 0.00 |__mysqld
查看 内存 信息(分别以进程角度和线程角度):
[root@localhost ~]# pidof mysqld [root@localhost ~]# pidstat -p -r Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM PID minflt/s majflt/s VSZ RSS %MEM Command :: AM 42.18 mysqld :: AM 42.18 mysqld Average: 42.18 mysqld [root@localhost ~]# pidstat -p -r -t Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM TGID TID minflt/s majflt/s VSZ RSS %MEM Command :: AM - 42.18 mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld :: AM - 42.18 |__mysqld
查看进程切换信息(分别以进程角度和线程角度):
[root@localhost ~]# pidstat -p -w Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM PID cswch/s nvcswch/s Command :: AM 0.00 0.00 mysqld :: AM 0.00 0.00 mysqld Average: 0.00 0.00 mysqld [root@localhost ~]# pidstat -p -w -t Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM TGID TID cswch/s nvcswch/s Command :: AM - 0.00 0.00 mysqld :: AM - 0.00 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 1.98 0.00 |__mysqld :: AM - 0.99 0.00 |__mysqld :: AM - 0.99 0.00 |__mysqld :: AM - 0.00 0.00 |__mysqld :: AM - 0.99 0.00 |__mysqld :: AM - 0.00 0.00 |__mysqld :: AM - 0.99 0.00 |__mysqld :: AM - 0.00 0.00 |__mysqld :: AM - 0.00 0.00 |__mysqld :: AM - 0.00 0.00 |__mysqld :: AM - 0.00 0.00 |__mysqld
同时,我们也可以将线程 tid 作为一个进程的 pid 来进行分析,因为本质上,线程是特殊的进程,但是他还是进程:
先查一个进程的所有线程:
[root@localhost ~]# pidof mysqld [root@localhost ~]# pidstat -p -t Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM TGID TID %usr %system %guest %CPU CPU Command :: AM - mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld :: AM - |__mysqld
然后将她的线程 tid=1408 作为一个进程(pid)来分析:
[root@localhost ~]# pidstat -p Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM PID %usr %system %guest %CPU CPU Command :: AM mysqld
mpstat(multi processor stat) 命令查看多核CPU中每个CPU核心的信息
[root@localhost ~]# mpstat Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle :: PM all 0.26 0.02 4.30 0.27 0.26 0.15 0.00 0.00 94.74
这里因为虚拟机中的单核CPU,所以只显示all,没有显示其它核心的CPU使用情况。
sar -P {n, ALL}
查看某个CPU或者所有CPU基本信息,sar -q 查看cpu队列,任务队列,以及负载:
[root@localhost ~]# sar -P Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM LINUX RESTART :: AM CPU %user %nice %system %iowait %steal %idle :: AM 0.12 0.00 0.67 0.00 0.00 99.21 :: AM 0.02 0.00 0.49 0.01 0.00 99.49 :: AM 0.02 0.00 0.64 0.00 0.00 99.34 :: AM 0.03 0.00 0.49 0.02 0.00 99.46 :: AM 0.08 0.00 1.65 0.00 0.00 98.27 :: AM 0.14 0.00 1.36 0.05 0.00 98.44 Average: 0.07 0.00 0.88 0.01 0.00 99.04 [root@localhost ~]# sar -P ALL Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM LINUX RESTART :: AM CPU %user %nice %system %iowait %steal %idle :: AM all 0.12 0.00 0.67 0.00 0.00 99.21 :: AM 0.12 0.00 0.67 0.00 0.00 99.21
sar -P 0 表示 0 号CPU, sar -P ALL 表示所有CPU。
[root@localhost ~]# sar -q Linux -.el6.i686 (localhost.localdomain) // _i686_ ( CPU) :: AM LINUX RESTART :: AM runq-sz plist-sz ldavg- ldavg- ldavg- :: AM 0.00 0.01 0.06 :: AM 0.00 0.00 0.01 :: AM 0.00 0.00 0.00 :: AM 0.07 0.02 0.00 :: AM 0.00 0.00 0.00 :: AM 0.05 0.01 0.00 Average: 0.02 0.01 0.01
runq-sz: Run queue length (number of tasks waiting for run time). cpu上等待执行的任务队列
plist-sz: Number of tasks in the task list. 系统中的任务/进程队列
ldavg-1 ldavg-5 ldavg-15 就是 uptime 命令中的值含义一样,过去1分钟,5分钟,15分钟的平均负载。
上面的 plist-ze = 102, 我们查看一下系统中的进程(线程)的数量:
[root@localhost ~]# ps -elf | wc -l [root@localhost ~]# ps -elLf | wc -l
Linux评估 CPU使用情况的更多相关文章
- linux 监控CPU 内存情况
htop
- 全面了解 Linux 服务器 - 1. 查看 Linux 服务器的 CPU 详细情况
1. 查看 Linux 服务器的 CPU 详细情况 判断依据: 具有相同的 core id 的 CPU 是同意个 core 超线程. 具有相同的 physical id 的 CPU 是同一个 CPU ...
- 编程获取linux的CPU使用的内存使用情况
Linux可用下top.ps命令检查当前的cpu.mem用法.下面简单的例子: 一.采用ps查看资源消耗的过程 ps -aux 当您查看进程信息,第三列是CPU入住. [root@localhost ...
- Linux查看CPU和内存使用情况 【转】
Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...
- Linux服务器CPU、内存、磁盘空间、负载情况查看python脚本
[本文出自天外归云的博客园] 网上搜,东拼西凑,组装了一个可以查Linux服务器CPU使用率.内存使用率.磁盘空间占用率.负载情况的python脚本. 脚本内容如下: # -*- coding:utf ...
- C/C++获取Linux系统CPU和内存及硬盘使用情况
需求分析: 不使用Top df free 等命令,利用C/C++获取Linux系统CPU和内存及硬盘使用情况 实现: //通过获取/proc/stat (CPU)和/proc/meminfo(内存 ...
- linux的cpu性能评估
linux的cpu性能评估 参考自:自学it网,http://www.zixue.it/. (1)利用vmstat命令监控系统CPU[test@localhost ~]$ vmstat 2 3 #每2 ...
- Linux查看CPU和内存情况
本文简单介绍在Linux上查看CPU和内存情况和一款系统资源查看工具htop. 查看CPU情况 以下是个人工作会经常使用到的服务器的信息. 查看所有CPU信息 可以通过如下命令查看所有CPU信息: # ...
- Linux查看CPU和内存使用情况总结
Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内 ...
随机推荐
- 在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。
//在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. // 例如: 当输入a = {8,4,1,6,7,4,9,6,4}, // a = {1,7,9,8,4,6,4 ...
- nginx 安装配置+清缓存模块安装
经过一段时间的使用,发现 nginx 在并发与负载能力方面确实优于 apache,现在已经将大部分站点从 apache 转到了 nginx 了.以下是 nginx 的一些简单的安装配置.环境操作系统: ...
- XML 的解析方法
四种XML解析方法: (1)Dom生成和解析XML文档 *解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构. * 优点:整个文档树在内存中,便 ...
- Why does typeof array with objects return “Object” and not “Array”?
https://stackoverflow.com/questions/4775722/check-if-object-is-an-array One of the weird behaviour a ...
- psd文件中截取固定大小的图片
1.选择需要操作的图层 使用选框工具, 设置固定大小和固定大小的值,在图层上拉取选区 2.使用移动工具 使用垂直.水平居中 使选择的icon在选区块中间 3.再选择好块区域调整好位置后 使用截取工具 ...
- Spring初学之spring的事务管理xml
所有的java类都是用的上一篇文章:Spring初学之spring的事务管理 不同的是,这时xml配置事务,所以就要把java类中的那些关于spring的注解都删掉,然后在xml中配置,Applica ...
- Python显示百分比
print(format(a/b,'.2%')) 显示两位小数的百分比显示
- 10.0.4_CentOS_120g
对应 VMware Workstation 版本为:“10.0.4 build-2249910”
- Compaction介绍
Compaction介绍 Compaction是buffer->flush->merge的Log-Structured Merge-Tree模型的关键操作,主要起到如下几个作用: 1)合并 ...
- dp1--乘积最大
dp1--乘积最大 一.心得 1.用excel填数组很方便 2. dp就是填表 找状态就是缩小规模 找状态转移方程就是 找状态的最后一次关系 二.题目 8782:乘积最大 查看 提交 统计 提问 总时 ...