性能分析点:
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. Centos7配置TiDB监控

    一: 1.1:http://192.168.1.12:3000/ 1.2:点击install Grafana wget https://dl.grafana.com/oss/release/grafa ...

  2. shell及编程实例

    1.shell简介 1) 概念--命令解释器 2) 常见shell bash linux标准shell sh 早期shell,较简单 csh ksh tcsh unix  shell vi  /etc ...

  3. linux中ls -l介绍

    [root@localhost ~]# ls -l 总计 152 -rw-r--r-- 1 root root 2915 08-03 06:16 a -rw------- 1 root root 10 ...

  4. 通过pid杀死进程

    bool ****::KillProcess(DWORD pid) { // When the all operation fail this function terminate the " ...

  5. 【草稿】实验室新手HandBook

    PS:本文旨在给初入CV领域实验室的新手一个可供参考的学习列表,使得能够快速熟悉常用且必要的工具.

  6. Semantic Compositionality through Recursive Matrix-Vector Spaces-paper

    Semantic Compositionality through Recursive Matrix-Vector Spaces 作者信息:Richard Socher Brody Huval Chr ...

  7. PythonStudy——三元表达式 Ternary expression

    Python中的三目运算其实就是if...else...的语法糖 # 三目运算符:用于简化 if...else...的语法结构# -- 1) 只能解决if...else...结构,其他if分支结构都不 ...

  8. 算法图解 (Aditya Bhargava 著)

    第1章 算法简介第2章 选择排序第3章 递归第4章 快速排序第5章 散列表第6章 广度优先搜索第7章 狄克斯特拉算法第8章 贪婪算法第9章 动态规划第10章 K最近邻算法第11章 接下来如何做 第1章 ...

  9. (翻译).NET应用架构

    .NET应用架构 Kalyan Bandarupalli著,hystar翻译 这个系列文章将帮助.NET开发人员与架构师使用最新的.NET技术设计高效的.NET应用.关于应用架构这方面虽然已有很多文章 ...

  10. because there was insufficient free space available after evicting expired cache entries

    Tomcat运行的时候哗哗哗的报警告 版本是Tomcat 8.5.15 告警信息关键字如下 because there was insufficient free space available af ...