Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。

iostat常见用法:

$iostat -d -k 1 10 #查看TPS和吞吐量信息
$iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
$iostat -c 1 10 #查看cpu状态
参数

-d 表示,显示设备(磁盘)使用状态;
-k某些使用block为单位的列强制使用Kilobytes为单位,同样可以使用-m。
-x获得更多统计信息,如avgrq-sz avgqu-sz await svctm %util。
-c获取cpu部分状态值。
1 10表示,数据显示每隔1秒刷新一次,共显示10次。

使用iostat 命令查看r/s(读请求),w/s(写请求),avgrq-sz(请求队列平均长度),await(IO等待), svctm(服务毫秒数,不包括排队时间)
r/s ,w/s是每秒读/写请求的次数。
util是设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对,比如设备有写缓存,当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。有时候可能会出现大于100%的情况,这多半是计算时四舍五入引起的。
svctm是平均每次请求的服务时间。
await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。

单磁盘:
(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时 svctm=1000/(r/s+w/s),假设IOPS是1000,则svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。

多磁盘:
计算设备服务的并发请求数:
concurrency = (r/s+w/s)*(svctm/1000)=(avgqu-sz*svctm)/await
理解:
1.处理完(r+w)/s的时间=(r+w)/s*(svctm/1000,单位转化为秒),然后处理单位1s,相当于一秒中处理了这么多的请求,如果结果大于1一定是有并发的,不然怎么处理的过来呢?
2.处理完队列里的请求需要avgqu-sz*svctm毫秒,及实际需要等待的时间,但是只用了await时间等待,所以考虑是否有并发?如果大于1,一定有的。

vmstat常见用法:

vmstat -S M 1 3
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

虚拟内存运行原理

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。

在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。

分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。

当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

字段说明:
Procs(进程):
r: 运行队列中进程数量,等待CPU的调度
b: 等待IO的进程数量,出于不可中断的休眠(通常意味着等待IO, 例如磁盘/网络/用户输入等)
Memory(内存):
swpd: 使用虚拟内存大小(多少块被交换到了磁盘)
free: 可用内存大小
buff: 用作缓冲的内存大小(输出)
cache: 用作缓存的内存大小(写入)
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间)
wa: 等待IO时间

一个重要的提示:内存、交换区以及I/O统计的是块数而不是字节。在GNU/Linux,块大小默认是1024字节。

cpu密集型服务器通常在us列会有很高的值,也可能表现在sy列,超过20%就足以令人不安了。
一般不用担心上下文切换,除非每秒超过100 000次或者更多,当操作系统停止一个进程而运行另一个进程时,就会产生上下文切换。如果执行了一个非覆盖扫描索引,就会先从索引中读取元素,然后根据索引再从磁盘上读取页面,如果页面不在操作系统缓存中,就需要从磁盘进行物理读取,将会导致上下文切换中断进程处理,直到I/O完成。
io密集型工作负载下,CPU花费大量时间在等待I/O请求,意味着vmstat会显示很多处理器在不可中断休眠(b列)状态,并且wa这一列的值会很高。

【Linux】系统之vmstat&iostat的更多相关文章

  1. linux学习笔记28--监控命令vmstat,iostat, lsof

    linux的监控包括多个方面,常用的是进程,内存,I/O,磁盘空间这三个方面. vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程. ...

  2. kill,killall,top,free,vmstat,iostat,watch命令

    kill命令 Linux 中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以 使用Ctrl+C键,但是,对 ...

  3. linux常用命令:iostat 命令

    Linux系统中的 iostat 是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会 汇报出CPU使用情况 ...

  4. Linux命令详解----iostat

    Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.在一个以前看到系统监控工具,总在想那些监控工具的代理,如何收集系统性能信息,io性能 ...

  5. Linux监控工具介绍系列——iostat

    文章转自:https://www.cnblogs.com/ghj1976/p/5691857.html Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iost ...

  6. Linux性能分析 vmstat输出

    vmstat输出     1.linux系统下vmstat输出   vmstat的输出分为以下几种模式:   (1).VM MODE (普通选项) (2).DISK MODE(-d选项) (3).DI ...

  7. LINUX系统VMSTAT命令详解

    linux系统vmstat命令详解 [转自 https://www.cnblogs.com/wensiyang0916/p/6514820.html] vmstat 1    1表示每秒采集一次vms ...

  8. top(topas),vmstat,iostat在linux和AIX操作系统下显示情况

    top(topas),vmstat,iostat在linux和AIX操作系统下显示情况 分类: Linux基础 2013-08-09 17:26 1093人阅读 评论(0) 收藏 举报 详细列出各命令 ...

  9. centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课

    centos Linux系统日常管理1  cpuinfo cpu核数   命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...

随机推荐

  1. 转载:为什么要对URI进行编码

            为什么需要Url编码,通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义 ...

  2. Codeforces Round #372 (Div. 2) A B C 水 暴力/模拟 构造

    A. Crazy Computer time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  3. sgu548 Dragons and Princesses   贪心+优先队列

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=548 题目意思: 有一个骑士,要经过n个房间,开始在第一个房间,每个房间里面有龙或者 ...

  4. 【转】 WebService到底是什么?

    WebService到底是什么? http://blog.csdn.net/wooshn/article/details/8069087/

  5. leetcode 124. Binary Tree Maximum Path Sum ----- java

    Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...

  6. Python Tornado

    按照http://www.tornadoweb.cn/所提供的方法下载安装后编写如下程序: import tornado.ioloop import tornado.web class MainHan ...

  7. Java中将16进制字符串转换成汉字

    技术交流群:233513714 /** * 将16进制字符串转换成汉字 * @param str * @return */ public static String deUnicode(String ...

  8. /bin/rm: Argument list too long解決方法

    rm.cp.mv是unix下面常用到的檔案處理指令,當我們需要刪除大量的log檔案,如果檔案數太多就會出現此訊息[/bin/rm: Argument list too long]解決方式如下: 例如要 ...

  9. IIS管理器的快捷方式在哪里?

    两种重新创建IIS快捷方式的方法,希望对大家有所帮助 1.首先需要明白它本来就是个快捷方式,所以可以重新创建一个新的快捷方式:右击桌面>>新建>>快捷方式.弹出创建快捷方式向导 ...

  10. SVG 箭头线绘制

    SVG并没有提供原生的Arrow标签,这就需要自己的组合了,通过marker标签和path标签可以完美的模仿出箭头线,无论需要多少个箭头线,只需引用同一个marker即可: <svg id=&q ...