linux中查看虚拟内存和虚拟机多开cpu占用高率的命令是什么

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(3701)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Linux下实用的查看内存和多核CPU状态命令',
blogAbstract:']作者:
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}首先,让我们看下虚拟内存:
第一层理解
1.&&&&&&&&&每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构
2.&&&&&&&一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪些地址有数据,哪些地址无数据,哪些可读,哪些可写,都可以通过这个链表记录
3.&&&&&&&每个进程已经分配的内存空间,都与对应的磁盘空间映射
计算机明明没有那么多内存(n个进程的话就需要n*4G)内存
建立一个进程,就要把磁盘上的程序文件拷贝到进程对应的内存中去,对于一个程序对应的多个进程这种情况,浪费内存!
第二层理解
1.&&&&&&&&&每个进程的4G内存空间只是虚拟内存空间,每次访问内存空间的某个地址,都需要把地址翻译为实际物理内存地址
2.&&&&&&&&&所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上。
3.&&&&&&&&&进程要知道哪些内存地址上的数据在物理内存上,哪些不在,还有在物理内存上的哪里,需要用页表来记录
4.&&&&&&&&&页表的每一个表项分两部分,第一部分记录此页是否在物理内存上,第二部分记录物理内存页的地址(如果在的话)
5.&&&&&&&&&当进程访问某个虚拟地址,去看页表,如果发现对应的数据不在物理内存中,则缺页异常
6.&&&&&&&&&缺页异常的处理过程,就是把进程需要的数据从磁盘上拷贝到物理内存中,如果内存已经满了,没有空地方了,那就找一个页覆盖,当然如果被覆盖的页曾经被修改过,需要将此页写回磁盘
1.既然每个进程的内存空间都是一致而且固定的,所以链接器在链接可执行文件时,可以设定内存地址,而不用去管这些数据最终实际的内存地址,这是有独立内存空间的好处
2.当不同的进程使用同样的代码时,比如库文件中的代码,物理内存中可以只存储一份这样的代码,不同的进程只需要把自己的虚拟内存映射过去就可以了,节省内存
3.在程序需要分配连续的内存空间的时候,只需要在虚拟内存空间分配连续空间,而不需要实际物理内存的连续空间,可以利用碎片。
另外,事实上,在每个进程创建加载时,内核只是为进程&创建&了虚拟内存的布局,具体就是初始化进程控制表中内存相关的链表,实际上并不立即就把虚拟内存对应位置的程序数据和代码(比如.text .data段)拷贝到物理内存中,只是建立好虚拟内存和磁盘文件之间的映射就好(叫做存储器映射),等到运行到对应的程序时,才会通过缺页异常,来拷贝数据。还有进程运行过程中,要动态分配内存,比如malloc时,也只是分配了虚拟内存,即为这块虚拟内存对应的页表项做相应设置,当进程真正访问到此数据时,才引发缺页异常。
补充理解:
虚拟存储器涉及三个概念: 虚拟存储空间,磁盘空间,内存空间
可以认为虚拟空间都被映射到了磁盘空间中,(事实上也是按需要映射到磁盘空间上,通过mmap),并且由页表记录映射位置,当访问到某个地址的时候,通过页表中的有效位,可以得知此数据是否在内存中,如果不是,则通过缺页异常,将磁盘对应的数据拷贝到内存中,如果没有空闲内存,则选择牺牲页面,替换其他页面。
mmap是用来建立从虚拟空间到磁盘空间的映射的,可以将一个虚拟空间地址映射到一个磁盘文件上,当不设置这个地址时,则由系统自动设置,函数返回对应的内存地址(虚拟地址),当访问这个地址的时候,就需要把磁盘上的内容拷贝到内存了,然后就可以读或者写,最后通过manmap可以将内存上的数据换回到磁盘,也就是解除虚拟空间和内存空间的映射,这也是一种读写磁盘文件的方法,也是一种进程共享数据的方法 共享内存
接下来我们来讨论下物理内存:
在内核态申请内存比在用户态申请内存要更为直接,它没有采用用户态那种延迟分配内存技术。内核认为一旦有内核函数申请内存,那么就必须立刻满足该申请内存的请求,并且这个请求一定是正确合理的。相反,对于用户态申请内存的请求,内核总是尽量延后分配物理内存,用户进程总是先获得一个虚拟内存区的使用权,最终通过缺页异常获得一块真正的物理内存。
1.物理内存的内核映射
IA32架构中内核虚拟地址空间只有1GB大小(从3GB到4GB),因此可以直接将1GB大小的物理内存(即常规内存)映射到内核地址空间,但超出1GB大小的物理内存(即高端内存)就不能映射到内核空间。为此,内核采取了下面的方法使得内核可以使用所有的物理内存。
&&&&&& 1).高端内存不能全部映射到内核空间,也就是说这些物理内存没有对应的线性地址。不过,内核为每个物理页框都分配了对应的页框描述符,所有的页框描述符都保存在mem_map数组中,因此每个页框描述符的线性地址都是固定存在的。内核此时可以使用alloc_pages()和alloc_page()来分配高端内存,因为这些函数返回页框描述符的线性地址。
&&&&&& 2).内核地址空间的后128MB专门用于映射高端内存,否则,没有线性地址的高端内存不能被内核所访问。这些高端内存的内核映射显然是暂时映射的,否则也只能映射128MB的高端内存。当内核需要访问高端内存时就临时在这个区域进行地址映射,使用完毕之后再用来进行其他高端内存的映射。由于要进行高端内存的内核映射,因此直接能够映射的物理内存大小只有896MB,该值保存在high_memory中。内核地址空间的线性地址区间如下图所示:
&从图中可以看出,内核采用了三种机制将高端内存映射到内核空间:永久内核映射,固定映射和vmalloc机制。
2.物理内存管理机制基于物理内存在内核空间中的映射原理,物理内存的管理方式也有所不同。内核中物理内存的管理机制主要有伙伴算法,slab高速缓存和vmalloc机制。其中伙伴算法和slab高速缓存都在物理内存映射区分配物理内存,而vmalloc机制则在高端内存映射区分配物理内存。伙伴算法伙伴算法负责大块连续物理内存的分配和释放,以页框为基本单位。该机制可以避免外部碎片。per-CPU页框高速缓存内核经常请求和释放单个页框,该缓存包含预先分配的页框,用于满足本地CPU发出的单一页框请求。slab缓存slab缓存负责小块物理内存的分配,并且它也作为高速缓存,主要针对内核中经常分配并释放的对象。vmalloc机制vmalloc机制使得内核通过连续的线性地址来访问非连续的物理页框,这样可以最大限度的使用高端物理内存。
3.物理内存的分配内核发出内存申请的请求时,根据内核函数调用接口将启用不同的内存分配器。&&&&&&&3.1 分区页框分配器分区页框分配器 (zoned page frame allocator) ,处理对连续页框的内存分配请求。分区页框管理器分为两大部分:前端的管理区分配器和伙伴系统,如下图:
&管理区分配器负责搜索一个能满足请求页框块大小的管理区。在每个管理区中,具体的页框分配工作由伙伴系统负责。为了达到更好的系统性能,单个页框的申请工作直接通过per-CPU页框高速缓存完成。该分配器通过几个函数和宏来请求页框,它们之间的封装关系如下图所示。
&这些函数和宏将核心的分配函数__alloc_pages_nodemask()封装,形成满足不同分配需求的分配函数。其中,alloc_pages()系列函数返回物理内存首页框描述符,__get_free_pages()系列函数返回内存的线性地址。&&&&&&&3.2 slab分配器slab 分配器最初是为了解决物理内存的内部碎片而提出的,它将内核中常用的数据结构看做对象。slab分配器为每一种对象建立高速缓存。内核对该对象的分配和释放均是在这块高速缓存中操作。一种对象的slab分配器结构图如下:
&可以看到每种对象的高速缓存是由若干个slab组成,每个slab是由若干个页框组成的。虽然slab分配器可以分配比单个页框更小的内存块,但它所需的所有内存都是通过伙伴算法分配的。slab高速缓存分专用缓存和通用缓存。专用缓存是对特定的对象,比如为内存描述符创建高速缓存。通用缓存则是针对一般情况,适合分配任意大小的物理内存,其接口即为kmalloc()。&&&&&&&3.3 非连续内存区内存的分配内核通过vmalloc()来申请非连续的物理内存,若申请成功,该函数返回连续内存区的起始地址,否则,返回NULL。vmalloc()和kmalloc()申请的内存有所不同,kmalloc()所申请内存的线性地址与物理地址都是连续的,而vmalloc()所申请的内存线性地址连续而物理地址则是离散的,两个地址之间通过内核页表进行映射。vmalloc()的工作方式理解起来很简单:&&&&&&& 1).寻找一个新的连续线性地址空间;&&& &&& 2).依次分配一组非连续的页框;&& &&&& 3).为线性地址空间和非连续页框建立映射关系,即修改内核页表;vmalloc()的内存分配原理与用户态的内存分配相似,都是通过连续的虚拟内存来访问离散的物理内存,并且虚拟地址和物理地址之间是通过页表进行连接的,通过这种方式可以有效的使用物理内存。但是应该注意的是,vmalloc()申请物理内存时是立即分配的,因为内核认为这种内存分配请求是正当而且紧急的;相反,用户态有内存请求时,内核总是尽可能的延后,毕竟用户态跟内核态不在一个特权级。
阅读(...) 评论()linux(15)
cat&/proc/meminfo&
cat /proc/cpuinfo
========================================================================================&
top的基本视图,我们来结合这个视图讲解各个数据的含义。
&&&&第一行:&&&&10:01:23&—&当前系统时间&&&&126&days,&14:29&—&系统已经运行了126天14小时29分钟(在这期间没有重启过)&&&&2&users&—&当前有2个用户登录系统&&&&load&average:&1.15,&1.42,&1.44&—&load&average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load&average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。&&&&第二行:&&&&Tasks&—&任务(进程),系统现在共有183个进程,其中处于运行中的有1个,182个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。&&&&第三行:cpu状态&&&&6.7%&us&—&用户空间占用CPU的百分比。&&&&0.4%&sy&—&内核空间占用CPU的百分比。&&&&0.0%&ni&—&改变过优先级的进程占用CPU的百分比&&&&92.9%&id&—&空闲CPU百分比&&&&0.0%&wa&—&IO等待占用CPU的百分比&&&&0.0%&hi&—&硬中断(Hardware&IRQ)占用CPU的百分比&&&&0.0%&si&—&软中断(Software&Interrupts)占用CPU的百分比在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间,需要充充电了。&&&&第四行:内存状态&&&&8306544k&total&—&物理内存总量(8GB)&&&&7775876k&used&—&使用中的内存总量(7.7GB)&&&&530668k&free&—&空闲内存总量(530M)&&&&79236k&buffers&—&缓存的内存量&(79M)&&&&第五行:swap交换分区&&&&2031608k&total&—&交换区总量(2GB)&&&&2556k&used&—&使用的交换区总量(2.5M)&&&&2029052k&free&—&空闲交换区总量(2GB)&&&&4231276k&cached&—&缓冲的交换区总量(4GB)
计算可用内存数,这里有个近似的计算公式:第四行的free&+&第四行的buffers&+&第五行的cached,按这个公式此台服务器的可用内存:;71276&=&4.7GB。对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。&&&&第六行是空行&&&&第七行以下:各进程(任务)的状态监控&&&&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&—&进程名称(命令名/命令行)多U多核CPU监控在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
==============================================================
一般我们查看系统性能主要是在以下几个方面
1.用户使用CPU情况 展现为 %user
2.系统使用CPU情况 展现为 %sys
3.wio或iowait&&&&&展现为 %iowait 进程由于等待磁盘IO而使CPU处于空闲状态的比率
4.CPU的空闲率
5.CPU上下文的交换的比率,也有说明为CPU上下文的切换。即内存和寄存器中数据的切换
6.nice 这个还不是很明白是啥意思
7.real-time 还是未知
8.运行队列的长度
9.平均负载
二 常用命令
三命令详解
1. mpstat -P ALL 5&&&&//需要注意的P和ALL一定要大写
17时22分24秒&&CPU&&&%user&&&%nice&&&&%sys %iowait&&&&%irq&&&%soft&&%steal&&&%idle&&&&intr/s
17时22分29秒&&all&&&&0.30&&&&0.00&&&&0.10&&&&0.67&&&&0.02&&&&0.07&&&&0.00&&&98.83&&&&821.40
17时22分29秒&&&&0&&&&1.00&&&&0.00&&&&0.60&&&&1.00&&&&0.20&&&&0.60&&&&0.00&&&96.60&&&&560.00
17时22分29秒&&&&1&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&100.20&&&&&&0.00
17时22分29秒&&&&2&&&&0.60&&&&0.00&&&&0.20&&&&0.20&&&&0.00&&&&0.20&&&&0.00&&&99.00&&&&250.20
17时22分29秒&&&&3&&&&0.00&&&&0.00&&&&0.00&&&&4.00&&&&0.00&&&&0.00&&&&0.00&&&96.00&&&&&11.20
17时22分29秒&&&&4&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&100.20&&&&&&0.00
17时22分29秒&&&&5&&&&0.80&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&99.20&&&&&&0.00
17时22分29秒&&&&6&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&100.00&&&&&&0.00
17时22分29秒&&&&7&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&&&0.00&&100.00&&&&&&0.00
上面信息我们可以看出,有8个CPU。
%user :在internal时间段里,即为用户态的CPU时间,及登录用户所消耗的CPU时间比。
%sys&&:在internal时间段里,负进程消耗的CPU时间,占所有CPU的百分比
%nice :优先进程占用时间
%iowait:在internal时间段里,所有未等待磁盘IO操作进程占CPU的百分比
%irq&&: 这个还是未知
%soft : 在internal时间段里,软中断时间(%) softirq/total*100
%idle : 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%)
intr/s: 在internal时间段里,每秒CPU接收的中断的次数&
2. top&&//直接敲TOP即可。
//系统当前时间、启动时间、当前登录数、平均负载 1、5、15分钟负载值
top - 19:43:46 up 4 days, 10:46,&&7 users,&&load average: 0.25, 0.37, 0.38&&&&
//进程总数、运行进程数、休眠进程数、终止进程数、僵死进程数&&&&
Tasks: 222 total,&&&1 running, 221 sleeping,&&&0 stopped,&&&0 zombie
//用户占用、系统占用、优先线程占用、闲置线程占用、
Cpu(s):&&0.3%us,&&0.1%sy,&&0.0%ni, 98.5%id,&&1.0%wa,&&0.0%hi,&&0.1%si,&&0.0%st
//内存状态(总内存、已用内存、闲置内存、缓存使用内容)
Mem:&&&8183648k total,&&8124052k used,&&&&59596k free,&&&115072k buffers
//交换内存(总交换内存、已用内存、闲置内存、高速缓存容量)
Swap:&&2104472k total,&&1369376k used,&&&735096k free,&&1462236k cached
&&PID USER&&&&&&PR&&NI&&VIRT&&RES&&SHR S %CPU %MEM&&&&TIME+&&COMMAND
&&&&1 root&&&&&&16&&&0&&&784&&&72&&&40 S&&&&0&&0.0&&&0:06.28 init
&&&&2 root&&&&&&RT&&&0&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.08 migration/0
&&&&3 root&&&&&&34&&19&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.01 ksoftirqd/0
&&&&4 root&&&&&&RT&&&0&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.29 migration/1
&&&&5 root&&&&&&34&&19&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.00 ksoftirqd/1
&&&&6 root&&&&&&RT&&&0&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.21 migration/2
&&&&7 root&&&&&&34&&19&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.05 ksoftirqd/2
&&&&8 root&&&&&&RT&&&0&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.08 migration/3
&&&&9 root&&&&&&34&&19&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.01 ksoftirqd/3
&&&10 root&&&&&&10&&-5&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.02 events/0
&&&11 root&&&&&&10&&-5&&&&&0&&&&0&&&&0 S&&&&0&&0.0&&&0:00.00 events/1&
参数详解:top命令式将系统最敏感的参数信息列出来。
PR&&&:系统进程的分配的处理时间,若是16,则表示分配了16*10毫秒的时间长度来处理该线程。数值越大,代表处理时间越长。
NI&&&:该进程的优先级
RES&&:该进程占用的物理内存的总数量,单位是KB。&
SHR(SHARE) :该进程使用共享内存的数量。单位是KB
S(STAT) :该线程的状态&
&&&&&&&&S:代表休眠状态;
&&&&&&&&D:代表不可中断的休眠状态;
&&&&&&&&R:代表运行状态;
&&&&&&&&Z:代表僵死状态;
&&&&&&&&T:代表停止或跟踪状态。&
%CPU :该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比
%MEM :该进程占用的物理内存占总内存的百分比。
TIME+:该线程启动以来,占CPU的时间
top -d 3&&&&//每三秒刷新一次数据 默认是每5秒刷新一次数据
Ctrl+L&&&&&&//擦除并且重写屏幕。
概念详解:
load average:
&&&可以理解为每秒钟CPU等待运行的进程个数.
&&&在Linux系统中,sar -q、uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?
&&&系统平均负载被定义为在特定时间间隔内运行队列中的平均任务数。如果一个进程满足以下条件则其就会位于运行队列中:
&&&&&- 它没有在等待I/O操作的结果
&&&&&- 它没有主动进入等待状态(也就是没有调用'wait')
&&&&&- 没有被停止(例如:等待终止)&&
# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。
平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上 78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是同时发出的,那么平均等待时间可以这样计算:
平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + ... + 请求总数-1) / 请求总数
应用到上面的例子: 平均等待时间 = 5ms * (1+2+...+28)/29 = 70ms,和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。
每秒发出的 I/O 请求很多 (约 29 个),平均队列却不长 (只有 2 个 左右),这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。
一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里 I/O 系统无事可做,所有 29 个 I/O 请求都在142毫秒之内处理掉了。
delta(ruse+wuse)/delta(io) = await = 78.21 =& delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8,表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而 iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有 bug,avgqu-sz 值应为 2.23,而不是 22.35。&
procs -----------memory---------- ---swap-- -----io---- -system-- -----cpu------
r&&b&&&swpd&&&free&&&buff&&cache&&&si&&&so&&&&bi&&&&bo&&&in&&&cs us sy id wa st
1&&1 1385712&& 1429992&&3&&&&4&&&&14&&&&50&&&14&&&&2 10&&2 88&&1&&0
1&&0 1385712&& 1430976&&0&&&&0&&&&&3&&&104 &&2 81&&3&&0
0&&0 1385712&& 1433008&&0&&&&0&&&&&1&&72 18&&1 77&&4&&0
0&&0 1385712&& 1434036&&0&&&&0&&&&&1&&&&29&&730 3686&&9&&1 90&&1&&0
参数详解:
r:当前系统中等待CPU的进程数(所有的CPU),若是改值连续都大于CPU的个数,表明有多数进程在等待CPU进行处理。若是该值大于CPU个数4倍的话,那么表明该服务器缺少CPU,或者CPU的处理速度过慢
in :cpu每秒产生的中断数
cs :每秒产生的上下文切换
us:用户占用的CPU时间百分比,同mpstat 的%user,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速(比如PHP/PERL)
sy:系统占用的CPU时间百分比,同mpstat 的%sys。内核进程消耗的CPU时间百分比(sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因)
id:CPU处于空闲状态时间百分比,如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.&
wa:IO等待消耗的CPU时间百分比,wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
us+sy+id = 100%
vmstat -n 3 //每三秒获取一次数据
vmstat 4 5&&//间隔4次输出5次数据
概念详解:
&&上下文切换:CPU的切换就是将轮到该时间片的进程,将该进程中的数据从内容中刷到CPU的寄存器中,同时将原寄存器中的数据刷到内存中保存。
sar [options] [-A] [-o file] t [n]
t 和 n两个参数指定了采样间隔和采样次数 
- o 较日志记录到某个文件中
sar 5 6 //每5秒采用一次,共采样6次。
Linux 2.6.18-53.el5PAE (localhost.localdomain)&&03/28/2009
07:40:17 PM&&&&&&&CPU&&&&&%user&&&&&%nice&&&%system&&&%iowait&&&&%steal&&&&&%idle
07:40:19 PM&&&&&&&all&&&&&12.44&&&&&&0.00&&&&6.97&&&&&&&1.74&&&&&&0.00&&&&&&&78.86
07:40:21 PM&&&&&&&all&&&&&26.75&&&&&&0.00&&&&12.50&&&&&&16.00&&&&&0.00&&&&&&&44.75
07:40:23 PM&&&&&&&all&&&&&16.96&&&&&&0.00&&&&7.98&&&&&&&0.00&&&&&&0.00&&&&&&&75.06
参数详解:
大部分的参数同mpstat top等命令。
%idle :等同于vmstat 中的id .就是空闲CPU百分比.如果该值高,表明CPU较空闲,但是处理速度还是很慢,则表明CPU在等待内存分配,应该加大服务器的内存。若是该值持续低于10%,表明CPU处理能力较弱,需要增加CPU。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
5.iostat 主要是为了查看磁盘IO
Linux 2.6.16.46-0.12-smp (iread-85)&&&&&03/29/2010
avg-cpu:&&%user&&&%nice %system %iowait&&%steal&&&%idle
&&&&&&&&&&&9.47&&&&0.00&&&&1.59&&&&1.27&&&&0.00&&&86.67
Device:&&&&&&&&&&&&tps&&&Blk_read/s&&&Blk_wrtn/s&&&Blk_read&&&Blk_wrtn
sda&&&&&&&&&&&&&&15.46&&&&&&&114.45&&&&&&&401.22&&&&&
参数详解:
avg-cpu中参数不做过多解释,详细可见其他命令,类似。
rrqm/s:&&&每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:&&&&&&&&&&&每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:&&&&&&&&&每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:&&&&每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s:&&&&&每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:&&&&每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz:平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:&&&&平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:&&&&&一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:92068次
积分:1993
积分:1993
排名:第17252名
原创:92篇
转载:26篇
评论:65条
文章:51篇
阅读:48067
(2)(3)(1)(9)(9)(16)(1)(1)(6)(3)(9)(3)(38)(16)(1)

我要回帖

更多关于 开vm虚拟机 cpu占用高 的文章

 

随机推荐