性能分析点:
1、 负载机
2、网络传输
3、硬件
4、应用程序线程池
5、数据库连接池
6、代码业务逻辑
7、数据库sql执行时间
8、jvm(GC)

操作系统硬件:
cpu:计算、逻辑处理;CPU的颗粒数越多,CPU频率越高理论上能干活的效率越高

内存IO:相当于闪存、存贮CPU干活的数据,CPU与内存中有个高速缓存(什么一级缓存,二级缓存);内存越大,cpu能干活的时间越长也就是性能越好,
操作系统里面的虚拟内存(top---swap):从磁盘上虚拟一块地址空间当做内存来使用,效率没有真正内存高,一旦使用到虚拟内存那么操作系统的性能一定特别的慢,压测过程中swap里面的used在增加就说明内存使用不行了

磁盘 :存储最终数据,固态磁盘,分散式读取速率比机械磁盘高,磁盘与内存交互数据的效率越高性能越好
网卡(带宽):

Linux系统下top命令:
一、top命令下按数字键1可展开或收起全部CPU;cpu(s)就是cpu使用率;
什么是CPU使用率?CPU花了多少时间供工作进程干活就是CPU使用率,使用率其实就是时间比;
us:userCPU用户进程所消耗的CPU,用户所起的进程消耗CPU的时间比(例如root用户)
sy:systemCPU系统进程所消耗的CPU,系统内核所消耗的CPU(比如读写磁盘,进程中断上下文切换)
ni:优先级高的进程消耗的CPU,如果ni比较高,说明进程抢占比较频繁导致CPU消耗比较高
id:空闲的CPU,没有干活的CPU时间片占比多少
wa:等待io状态的CPU,等待磁盘io所消耗的CPU
hi:软中断CPU耗时,软件中断,属于内核
si:硬中断CPU耗时,外部硬件信号量造成的中断,属于内核
st:强制页交换所消耗的CPU,属于内核
用户360起了一个Java进程,这个Java进程会读写磁盘,那么这个Java用户读写磁盘消耗的CPU是系统CPU还是用户CPU?(360面试题)应该是system系统CPU,因为在读写磁盘的时候会切换到内核进程,内核去读写磁盘,所以消耗的是systemCPU
如果应用程序比较慢,定位到CPU使用过高,那么接下来怎么办?
首先看是哪个CPU消耗比较高?
1、如果是userCPU消耗比较高,找到消耗userCPU较高的进程,接着分析进程下面那个线程消耗的CPU比较高,找到线程之后然后跟踪线程栈,看线程栈调用什么方法,正在调用的方法就是造成我们CPU消耗高的原因,找到后修改检查这个方法就OK了(自己会修?不会给开发)
光标选中任务列
top命令下shift+p查看使用CPU从高到低排序
top命令下shift+m查看内存从高到低排序
top -H -p PID(进程id)看进程下的线程或者说子进程 ;还是shift+p看消耗CPU最高;看TIME+消耗CPU时间越高也就是消耗CPU高;(分析线程栈后面再补充,可提前看测试那点事公众号)
或者直接top -p PID(进程id)再接着在交互输入区输入H(光标点击pid上面空行即是交互输入区)

2、如实systemCPU消耗比较高,说明用户内核消耗比较高,看ni、st、hi、si这几个属于system的子项;
如实是hi、si中断消耗比较高,说明进程切换比较频繁,需要看进程的hi软中断消耗比较高还是si硬中断消耗比较高,需要减少进程的抢占和切换;如果是st消耗比较高,也就是强制页交换比较高,说明内存肯能不足,需要增加内存或者减少内存的使用,或者让内存提速释放,这个时候要检查内存为什么要进行频繁的页交换,基本上就是要增加内存了;
如果这几个都不高,就是systemCPU比较高,这个时候优先查看一下磁盘,是否磁盘繁忙,磁盘繁忙导致我们进程来回在内核里面进行切换,导致我们内核消耗CPU比较高;

二、top命令下load average(负载的意思简写avg)指的是正在耗费CPU的进程和正在等待
IO的进程之和
什么叫负载?:运维、dba用来衡量操作系统的好坏,负载高就说明系统有问题,反之负载低就说明系统没有什么问题;
load average负载指的是操作系统正在运行的CPU的进程,正在耗费CPU的进程加上正在等待IO的进程之和;
load average后面的三个值表示系统过去1分钟、5分钟、15分钟系统的平均负载;
load average负载跟CPU使用率的关系:
首先load average负载小于多少认为是OK的?负载小于CPU平均颗粒数认为负载是OK的;例如2核CPU,那么CPU负载小于2认为是OK的;要看CPU颗粒数,小于CPU颗粒数的平均长度(就是16核小于16,8核小于8,4核小于4...)
例如2核cup:
如果2核平均CPU使用率到了百分之九十多,负载一定会很高吗?(360面试题)
不一定;因为有消耗CPU的进程和等待IO的进程;如果消耗CPU的进程就那么一个进程消耗了百分之九十多,没有等待IO的进程,那么负载就是1,2核CPU负载是1没问题;反过来CPU使用率很低百分之十几,等待IO的进程多,那么负载就很高了;跟CPU的使用率有关系,一般来说CPU使用率高负载就高,但是不是绝对的;

三、top命令下tasks(进程)
进程几个常见状态:
running : 进程开始都是假的running状态,还没有拿到cup;拿到CPU了就是真running状态了
中断不可恢复: 去磁盘拿数据叫中断不可恢复,时间很快、可预期可控制的、不可干预状态就是 中断不可恢复
中断可恢复 : 时间不可预估叫中断可恢复
休眠
stop

a b c 三个进程 开始running
a拿到cup----running(真)---中断不可恢复(等待io)---中断等io-----------running(真)
b-------------running(假)--------running(真)--------中断可恢复-------中断可恢复
c-------------running(假)--------running(假)----------running(真)-----等待running(假)
进程中断导致CPU中断,CPU中断产生CPU的上下文切换
CPU中断:指CPU开始给某个进程干活,突然这个进程不能继续使用这个CPU,CPU给下个进程了叫CPU中断,CPU中断同时会产生CPU上下文切换,什么叫上下文切换(我现在干活干到了那里,等我回来接着干)中断要保存上下文的变量,所以要消耗系统CPU的;等待磁盘io基本不消耗系统cpu

Linux系统下vmstat命令: vmstat 2 3 (每隔2秒打印一次总共打印3次)
1、vmstat命令下procs进程;
procs进程快还是线程快?进程是程序的运行单位,一个程序至少要有一个进程,程序是以进程存在的;进程是程序运行的最小单位,线程是进程的最小单位,一个进程下必须有一个线程;
进程模式和线程模式?一个进程下只有一个线程就是进程模式;一个进程下有多个线程就是线程模式;进程模式一个线程独享资源,所以进程模式快;
那么线程的好处在哪里?多线程能支持大并发,因为一个进程下的所有线程都共享这个进程的资源,所以能支持大并发;
进程安全还是线程安全?当然是进程安全了,线程不安全,一个线程奔溃可能导致一个进程下的所有线程都奔溃;
r:正在消耗CPU的进程,正在消耗CPU的进程和正在等待io的进程;看负载的时候习惯性的看一下进程情况怎么样
b:

Linux系统下iostat命令: iostat -x 看磁盘
1、iostat命令下Device设备;
vda:设备a
vdb:设备b
rrqm/s:每秒读磁盘扇区的大小
wrqm/s:每秒写磁盘扇区的大小
r/s:每秒读磁盘次数
w/s:每秒写磁盘次数
rsec/s:每秒读磁盘字节数
wsec/s:每秒写磁盘字节数
avgrq-sz:平均每次设备io操作的数据大小(扇区)
avgqu-sz:磁盘排队的队列长度,越大说明队列等待时间越长
await:服务时间和等待时间之和
r_await:读磁盘等待的时间
w_await:写磁盘等待的时间
svctm:service time 服务时间,磁盘真正处理的时间(单次磁盘操作服务时间应该是在5毫秒以下,并且指的是机械硬盘,如果是固态硬盘还快,5毫秒以上要注意)
%util:空闲的

通过磁盘队列(别0.2以上)和磁盘等待时间基本上就可以判断磁盘是否繁忙,磁盘等待时间超过十毫秒就说明有排队了;

Linux系统下nmon命令看磁盘: 没有按照要先安装,安装好了去安装目录下打开(find / -name "*nmon*" #查找安装路径)./nmon... 即可打开;或者把nmon添加到环境变量,在任何目录下敲nmon都能打开;
nmon -fT -s 2 -c 100 (s多少秒取一次结果 c取多少次,可以得到很全面的性能报告,还可以实现操作系统无人值守的监控)
按d查看磁盘,busy超过百分之二十说明磁盘繁忙;
Linux系统下sar -d命令看磁盘,和iostat -x效果一样
system系统CPU使用过高的话,如果不是中断造成CPU使用过高的话,看看是否使用繁忙导致的(可以用isstat -x sar -d nmon查看),如果都不高用strace命令(没有则yum一个);用于跟踪系统内核调用的一个命令;
strace -c -f -p (pid) 敲完命令回车后不会自动停止,需要手动停止Ctrl+c;
%time:CPU调用比
seconds:CPU耗时
usecs/call:主动调用多少次
calls:被动调用多少次
errors:发生的错误多少次
syscall:内核,那个内核调的
如果现在CPU使用过高,并且知道进程,只能分析到那个内核调用次数最多,导致系统systemCPU使用过高;后面就没法分析了,得了解是什么东西什么时间调用了这个内核(懵逼。。。)

四、top命令下Men(物理内存)Swap(虚拟内存)
total:总的内存
used:已经使用的内存
free:剩余的内存
buffers:高速缓存,缓存的是数据,磁盘到内存
cached:高速缓冲,缓冲的是文件,内存到磁盘
如果是Java系统,看内存使用情况,只看有没有使用虚拟内存(对Java来说内存没有使用率一说,只会有GC这么一说);GC:垃圾回收,只要不频繁的进行垃圾回收就行;为什么Java应用程序没有内存使用率一说?因为Java程序启动的时候会配一个最大物理内存和最小物理内存(一般最小最大配的一样大);对于非Java应用程序存在内存使用率一说,内存使用率=已使用的内存used/总内存total;一般不超过百分之八十就行,并且确认那百分之八十的内存使用率是某一个进程占用的;

五、监控分析总结

top看load average负载使用情况,结合负载和CPU使用情况;
如果userCPU高查进程---查线程---查线程栈---找调用方法
systemCPU高看st(强制页交换)造成的还是hi、si中断造成的;如果是中断造成的,减少中断;st造成的可能是内存不足,如果都不是看磁盘繁忙程度iostat -x看一下avggu-sz队列长不长,await减去svctm时间之差大不大;或者sar -d同理(看avggu-sz,await,svctm);或者nmon看磁盘busy繁忙程度,打开nmon报表diskbusy持续大于20说明磁盘繁忙;
CPU分析: sar -u看CPU结合sar -q 看队列;或者vmstat看队列;
内存分析:top看内存;或者是free -m看内存 ;Java程序没有内存使用率之说,可以忽略(只看GC以及有没有使用虚拟内存)其他的不超过百分之八十;
网络分析:netstat -i看有没有RX-DRP/RX-ERR/RX-OVR不管是丢了报还是错误偏差,这些没问题就没问题;
磁盘分析:磁盘看繁忙程度iostat -x看一下avggu-sz队列长不长,await减去svctm时间之差大不大;或者sar -d同理(看avggu-sz,await,svctm);或者nmon看磁盘busy繁忙程度,打开nmon报表diskbusy持续大于20说明磁盘繁忙;
基于以上监控项有很多监控工具和命令,灵活采用就行;
典型工具:spotlight on nuix

Linux操作系统监控分析的更多相关文章

  1. Linux性能监控分析命令(五)—free命令介绍

    性能监控分析的命令包括如下:1.vmstat2.sar3.iostat4.top5.free6.uptime7.netstat8.ps9.strace10.lsof 命令介绍:free命令是监控Lin ...

  2. Linux性能监控分析命令(四)—top命令介绍

    性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof ======= ...

  3. Linux性能监控分析命令(三)—iostat命令介绍

    性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof 命令介绍: i ...

  4. Linux性能监控分析命令(二)—sar命令介绍

    性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof ======= ...

  5. linux性能监控分析及通过nmon_analyse生成分析报表

    nmon是一款分析 AIX 和 Linux 性能的免费工具 nmon 工具还可以将相同的数据捕获到一个文本文件,便于以后对报告进行分析和绘制图形.输出文件采用电子表格的格式 (.csv). 性能介绍 ...

  6. 【转载】linux性能监控分析及通过nmon_analyse生成分析报表

    转载地址:http://www.cnblogs.com/Lam7/p/6604832.html nmon是一款分析 AIX 和 Linux 性能的免费工具 nmon 工具还可以将相同的数据捕获到一个文 ...

  7. Linux性能监控分析命令(一)—vmstat命令详解

    一.vmstat介绍 语法格式: vmstat [-V] [-n] [-S unit] [delay [count]] -V prints version. -n causes the headers ...

  8. Linux性能监控分析命令

    vmstat sar iostat top free uptime netstat ps strace lsof

  9. Linux 性能监控分析

    好文,参考 http://blog.csdn.net/hexieshangwang/article/details/47187185

随机推荐

  1. 2.7 清除FTP服务器文件

    清除服务器文件 from ftptools import FtpTools class CleanAll(FtpTools): '''delete an entire remote tree of s ...

  2. obspy下载地震波数据

    Retrieving Data from Data Centers(从数据中心检索数据) PS:此部分提供了使用obspy下载数据的推荐方式,但是由于数据中心和web服务在不断更新变化,所有有些建议可 ...

  3. GitHub入门与实践 读书笔记一:欢迎来到GitHubde世界

    1.什么是GitHub GitHubshi为开发者提供Git仓库的托管服务.除此之外,还为开发者提供能帮助提高代码效率和品质的功能. GitHub和Git的区别? Git是源码仓库而GitHub是在网 ...

  4. [Java复习] 复习知识点

    将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现. String 被设计成不可变(immutable)类, 所以它的所有对象都是不可变对象. 要被序列化的实例 ...

  5. day 11 函数参数

    形参与实参 形参:就是形式参数,在函数定义时,写在括号里面指定的参数就是形式参数 实参:在调用函数时传入的参数就是实参 在调用函数时就会自动的把形参与实参绑定起来,然后调用结束之后,解除绑定关系 位置 ...

  6. 关于attibutedText输出中文字符后的英文和数字进行分开解析的问题

    上面的图应该很清楚 具体这个attibutedText 是做什么的就不说了 ,最初我查了资料发现有人和我一样的输出,把一个字符串的中英文分开打印出来是iOS关于UItextVIew和UIlabel的差 ...

  7. 20155208徐子涵 Exp4 恶意代码分析

    20155208徐子涵 Exp4 恶意代码分析 实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使 ...

  8. 软件工程第4次作业------石墨文档Android客户端案例分析

    作业要求的博客链接:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505 分析产品:石墨文档Android客户端 第一部分 调研和评测 1. ...

  9. macbook 下 spark开发环境搭建(基于idea 和maven)及spark单机写运行jar

    参见链接 https://blog.csdn.net/u012373815/article/details/53266301 运行jar包: 将写好的项目打成jar,上传到服务器,进入SPARK_HO ...

  10. (28)django的中间件(自定义中间件和防范跨站请求伪造攻击)-重要的概念

    Django中间件和中间件不是同一种东西 什么是中间件:中间件是一个很大的概念,只要程序和程序之间还有一层程序,用来处理两个程序的整个交互过程的请求.数据等等就叫中间件 Django中间件:是介于re ...