性能分析点:
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. sql将服务器名称换成本地IP

    安装sql后服务器名称默认为电脑的名称,而想要换成习惯用的本地ip也是可以的. 将配置管理中的MSSQLSEVER协议中的TCP/IP启用,并且打开其属性,找到IP地址,添加本地IP,并设置成启用,然 ...

  2. Codeforces Round #244 (Div. 2) C. Checkposts (tarjan 强连通分量)

    题目:http://codeforces.com/problemset/problem/427/C 题意:给你n座城市,m条有向道路,然后有一个机制,你在某一个城市设置检查点,那么被设置的检查点受保护 ...

  3. pycharm的中文汉化

    下载pycharm软件 然后通过下面的网站进行激活: http://idea.lanyus.com/ 激活好后下载汉化包:链接:http://pan.baidu.com/s/1i5zaGgX 密码:g ...

  4. springcloud Zuul学习笔记

    SpringCloud Zull是一个基于NetflixZuul实现的API网关组件,它实现了请求路由,负载均衡,校验过滤等功能;本文主要记录springcloud zuul的入门级demo开发过程; ...

  5. python自学第14天 类

    面向对象:世界万物,皆可分类:世界万物,皆为对象 只要是对象,就肯定属于某种品类. 只要是对象,就肯定有属性 类 对象 封装 继承 多态 一个接口,多种实现

  6. ArcGIS 按多边形区域统计栅格影像的一些信息

    在使用ArcGIS对栅格影像进行分析时,难免要进行一些统计类的分析.如统计框选区域的像素的个数,面积.均值等内容. 下面给出使用“Spatial Analyst Tools -- > Zonal ...

  7. [转]keepalived简介

    https://www.jianshu.com/p/b050d8861fc1 contents: 什么是Keepalived VRRP协议简介 Keepalived原理 Keepalived配置文件详 ...

  8. python import 包的路径以及相对路径加载的问题

    查看python当前系统import 命令时,系统支持的路径 除了当前目录之外,如下代码 即可查看import 包含的路径在哪些地方 参考链接 https://www.cnblogs.com/qing ...

  9. 由于找不到 opencv_world320.dll,无法继续执行代

    首先找到自己软件安装(解压)的路径openCV (安装(解压)目录\opencv\build\x64\vc14\bin) 我的安装(解压)目录是:F:\OpenCV\Three320\opencv\b ...

  10. poj 1151 (未完成) 扫描线 线段树 离散化

    #include<iostream> #include<vector> #include<cmath> #include<algorithm> usin ...