引言:大多数的服务都是跑在Linux上的,Linux现在也已经到了一个很广泛的应用,但是仍然会有很多问题出现,我们就来讨论下我们性能监控的指标,性能监控无非就是从I/O,内存,CPU,TCP连接数,网络,进程或者线程来出发,使用到的命令有iostat,vmstat,sar,mpstat,netstat,ss,iftop,free,pstree/ps,pidstat,top,(uptime)下面来进一步深入下吧.

   一,磁盘I/O(iostat)

   我们的机器上有很多的数据是存储在磁盘上的,我们读取的很多数据都是要和磁盘交互的,但是磁盘同时又是一个低速设备,很多时候会发生阻塞,所以磁盘I/O的监控很重要。我们使用iostat来诊断磁盘的情况。

tps:该设备每秒的传输次数,表示每秒多少个I/O请求

Blk_read/s:每秒从设备读取到的数据量

Blk_wrtn/s:1116.www.qixoo.qixoo.com每秒向设备写入的数据量

Blk_read:读取的总数据量

Blk_wrtn:写入的总数据量

%user:代表用户态进程使用CPU的负载

%nice:代表优先级进程使用的CPU负载

%system:代表内核态进程使用的CPU负载

%iowait:代表CPU等待I/O时,CPU的负载

%steal:代表被偷走的CPU负载情况,这个在虚拟化技术中会用到

%idle:代表空闲的所占用的CPU负载情况

iostat还有一个常用的参数选项-x,表示扩展的信息

rrqm/s:每秒这个设备相关的读取请求有多少被Merge(多个I/O合并的操作)了

wrqm/s:每秒这个设备相关的写入请求有多少被Merge了

r/s:每秒发送到设备的读请求数

w/s:每秒发送到设备的写请求数

rsec/s:每秒读取设备扇区的次数

wsec/s:每秒写入设备扇区的次数

avgrq-sz:平均请求扇区的大小

avgqu-sz:平均请求队列的长度

await:每一个I/O请求的处理的平均时间(等待时间)

r_await:每一个读I/O请求的处理的平均时间

w_await:每一个写I/O请求的处理的平均时间

svctm:表示平均每次I/O操作的服务时间。如果svctm值和await值很接近,则表示I/O几乎没有等待,如果await的值远高于svctm的值,则表示I/O队列等待太长

%util:在统计的时间内总共有多少的时间用于处理I/O操作,即被消耗的CPU的百分比。例如统计时间间隔是1s,那么这个设备有0.65s在处理I/O,有0.35s处于空闲。那么这个设备的%util=0.65/1=65%,一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)

 

   二,内存(free)

   在Linux系统中我们查看内存使用情况。使用free命令来查看

   

第一行的信息(我们可以认为从操作系统层面看待)

total:总物理内存大小

used:已经分配的大小

free:没有被分配的大小

shared:共享内存的大小,主要用于IPC通信

buffers:用于块设备的缓冲

cached:用于文件内容缓冲,也就是缓存

"缓存"就是在内存中划分一块区域,作为进程和硬盘之间的缓冲区,进程将数据写入缓存中,当那些数据需要读取的时候,就直接去"高速路"缓存中读取,而不会去"土路"硬盘中读取,这样大大的加快性能

这里buffer实际上是存储了我们数据的元数据(包括目录名字,文件大小,文件存储块,修改时间,权限等),而cache则存放了我们最近读取过的文件。

第三行信息(我们可以认为从应用程序层面看待)

这里的-/+ buffers/cache分别为 -buffers/cache  和  +buffers/cache  两部分

-buffers/cache = used(第一行)-buffers-cached   实际上是当前程序上"真实使用"的"物理内存"

+buffers/cache = buffers+cached      意思就是暂时"借给"系统作为"缓冲区"使用的内存大小

used=(+buffers/cached)+(-buffers/cached)

所以从应用程序层面看,可用内存=free memory+buffers+cached

详细信息我们可以通过下面这种方式查看.

  ~ cat /proc/meminfo

MemTotal:        1020128 kB

MemFree:          670772 kB

Buffers:           97780 kB

Cached:           100980 kB

SwapCached:            0 kB

Active:           164988 kB

Inactive:         117296 kB

Active(anon):      83536 kB

Inactive(anon):      160 kB

Active(file):      81452 kB

Inactive(file):   117136 kB

Unevictable:           0 kB

Mlocked:               0 kB

SwapTotal:             0 kB

SwapFree:              0 kB

Dirty:                92 kB

Writeback:             0 kB

AnonPages:         83504 kB

Mapped:            17500 kB

Shmem:               172 kB

Slab:              46696 kB

SReclaimable:      28652 kB

SUnreclaim:        18044 kB

KernelStack:        1744 kB

PageTables:         2636 kB

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:      510064 kB

Committed_AS:     343800 kB

VmallocTotal:   34359738367 kB

VmallocUsed:        7112 kB

VmallocChunk:   34359727304 kB

HardwareCorrupted:     0 kB

AnonHugePages:     36864 kB

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

DirectMap4k:        8184 kB

DirectMap2M:     1040384 kB

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137022.htm

Linux上性能异常定位以及性能监控的更多相关文章

  1. jstack来分析linux服务器上Java应用服务性能异常

    使用jdk自带的jstack来分析linux服务器上应用服务性能异常: 1.top查找出哪个进程消耗的系统资源情况 [op1@jira ~]$ top top - 19:23:43 up 22 day ...

  2. 优化系统资源ulimit《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化系统资源ulimit<高性能Linux服务器构建实战:运维监控.性能调优与集群应用> 假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10 ...

  3. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》

    优化Linux内核参数/etc/sysctl.conf  sysctl  <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...

  4. [转]提高 Linux 上 socket 性能,加速网络应用程序的 4 种方法

    原文链接:http://www.ibm.com/developerworks/cn/linux/l-hisock.html 使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在 ...

  5. 提高 Linux 上 socket 性能

      http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化   1 引言    随着In ...

  6. 提高Linux上socket性能

    在 开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求.利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序.本文内容包括对于 Soc ...

  7. Linux运维不可不知的性能监控和调试工具

    Linux运维不可不知的性能监控和调试工具 1 nagios Nagios是一个开源监控解决方案,我觉得他可以监控一切 ,可以看一下我以前的文章:NAGIOS 2 ps #用来查看程序的运行情况 ps ...

  8. 提高 Linux 上 socket 性能 加速网络应用程序的 4 种方法

    使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信.与其他 API 一样,您可以通过一些方法使用 Soc ...

  9. mysql-5.7.xx在lcentos7下的安装以及mysql在windows以及linux上的性能差异

    前言: 在centos上安装mysql,整整折腾了将近一天,因为是第一次安装,的确是踩了不少坑,这里详细记录下来,方便各位有同样需求的小伙伴参考. 该选择什么版本? mysql5.7有很多小版本,但是 ...

随机推荐

  1. C#微信开发小白成长教程一(公众平台的工作原理与调试环境部署,附视频)

    黑夜给了我黑色的眼睛,我决定录视频到天明.半年前的现在,我还在苦逼着加着班,半年后的今天我依旧苦逼着加着班.不过现在的是为自己加班,作为一个资深程序小白,一个月前我光荣的成了一个不称职的资本家,不称职 ...

  2. 将DBF文件导入Sqlserver数据库

    项目中的问题:用户选择N个dbf文件导入sql2005数据库,由于每年dbf表结构都在变化,所以在sql2005中根本就不存在,需要每年根据dbf的结构自动建表.(文章来自http://blog.cs ...

  3. 网游中的网络编程系列1:UDP vs. TCP

    原文:UDP vs. TCP,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网 ...

  4. SQL Server output子句用法 output inserted.id 获取刚插入数据的id

    --插入数据,并返回刚刚插入的数据id INSERT INTO [soloreztest] ([name]) output inserted.id VALUES ('solorez') --执行结果: ...

  5. [HDOJ5439]Aggregated Counting(乱搞)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5439 题意:按规则构造一个数列a a(1)=1 a(2)=2 a(2)=2 -------> 写两个 ...

  6. mutex与semaphore的区别

    网摘1:Mutex 的发音是 /mjuteks/ ,其含义为互斥(体),这个词是Mutual Exclude的缩写.Mutex在计算机中是互斥也就是排他持有的一种方式,和信号量-Semaphore有可 ...

  7. Adobe Flash builder 4.6破解教程(以win764bit为例)

    首先安装软件至默认路径: C:\Program Files(X86)\Adobe下 然后: 1.C:\Program Files (x86)\Adobe\Adobe Flash Builder 4.6 ...

  8. nginx中获取真实ip

    nginx反向代理配置时,一般会添加下面的配置: proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;  ...

  9. Criteria查询之sqlRestriction()的理解

    sqlRestriction()的理解 在Criteria查询中 使用sqlRestriction()方法来提供SQL语法作限定查询,作为where字句 查看官方给的例子,如下 List cats = ...

  10. 天气预报API获取

    1.citycode: http://mobile.weather.com.cn/js/citylist.xml http://files.cnblogs.com/files/ys-wuhan/cit ...