Linux上性能异常定位以及性能监控
引言:大多数的服务都是跑在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上性能异常定位以及性能监控的更多相关文章
- jstack来分析linux服务器上Java应用服务性能异常
使用jdk自带的jstack来分析linux服务器上应用服务性能异常: 1.top查找出哪个进程消耗的系统资源情况 [op1@jira ~]$ top top - 19:23:43 up 22 day ...
- 优化系统资源ulimit《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
优化系统资源ulimit<高性能Linux服务器构建实战:运维监控.性能调优与集群应用> 假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10 ...
- 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
优化Linux内核参数/etc/sysctl.conf sysctl <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...
- [转]提高 Linux 上 socket 性能,加速网络应用程序的 4 种方法
原文链接:http://www.ibm.com/developerworks/cn/linux/l-hisock.html 使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在 ...
- 提高 Linux 上 socket 性能
http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化 1 引言 随着In ...
- 提高Linux上socket性能
在 开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求.利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序.本文内容包括对于 Soc ...
- Linux运维不可不知的性能监控和调试工具
Linux运维不可不知的性能监控和调试工具 1 nagios Nagios是一个开源监控解决方案,我觉得他可以监控一切 ,可以看一下我以前的文章:NAGIOS 2 ps #用来查看程序的运行情况 ps ...
- 提高 Linux 上 socket 性能 加速网络应用程序的 4 种方法
使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信.与其他 API 一样,您可以通过一些方法使用 Soc ...
- mysql-5.7.xx在lcentos7下的安装以及mysql在windows以及linux上的性能差异
前言: 在centos上安装mysql,整整折腾了将近一天,因为是第一次安装,的确是踩了不少坑,这里详细记录下来,方便各位有同样需求的小伙伴参考. 该选择什么版本? mysql5.7有很多小版本,但是 ...
随机推荐
- [MCSM]随机搜索和EM算法
1. 概述 本节将介绍两类问题的不同解决方案.其一是通过随机的搜索算法对某一函数的取值进行比较,求取最大/最小值的过程:其二则和积分类似,是使得某一函数被最优化,这一部分内容的代表算法是EM算法.(书 ...
- php缓存技术(减少数据库服务器压力)
静态缓存(保存在磁盘上的静态文件,用PHP生成数据放入静态文件中) a) php操作缓存 i. 生成缓存 ii. 获取缓存 iii. 删除缓存 判断目录是否存在:is_dir() dirname ...
- 维克里拍卖 Vickrey auction
https://en.wikipedia.org/wiki/Vickrey_auction 维克里拍卖(Vickrey auction),即次价密封投标拍卖(Second-price sealed-b ...
- LeetCode Weekly Contest 8
LeetCode Weekly Contest 8 415. Add Strings User Accepted: 765 User Tried: 822 Total Accepted: 789 To ...
- ContentProvider备份短信,以xml文件存储
因为短信的内容已经通过ContentProvider暴露出来,所以我们可以直接用内容解析者获取短信内容. 想要获取短信内容,你需要知道的一些东西: 1.Uri uri = Uri.parse(&quo ...
- Linux下安装libiconv使php支持iconv函数
libiconv组件安装好了可以让我们php支持iconv函数了,这个函数的作用就是字符编码强制转换了,下面和111cn小编一起来看一个Linux中安装libiconv使php支持iconv函数的例子 ...
- 第八章:Java集合
1.Java集合 A:对象的容器. B:实现数据结构(栈.队列) 2. Set:无序不重复 List: 有序可重复,长度可变. Map: 存放键值对. 3. Iterator foreach
- esayUi中datagrid中json串为空时,显示上一次数据的解决方法
function initSearchProject(startDate,finishDate,flag) { $("#finishDate").val(finish ...
- 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...
- javascript 方法实例
输出对象的属性名称与值 : boj(o){ for(var p in o){ console.log(p + ":" + o[p] + "\n"); } } 构 ...