一、硬件基础

Cpu   逻辑的处理、计算、判断

现代分时多任务操作系统对 CPU 都是分时间片使用的:比如A进程占用10ms,然后B进程占用30ms,然后空闲60ms,

再又是A进程占10ms,B进程占30ms,空闲60ms;如果在一段时间内都是如此,那么这段时间内的占用率为40%。

CPU对线程的响应并不是连续的,通常会在一段时间后自动中断线程。未响应的线程增加,就会不断加大CPU的占用。

指标:Cpu 利用率:供(用户进程+系统进程)干活的时间/总的时间

Cpu 利用率越高 进程等待时间切片的时间越来越长,代码处理等待时间越来越长

一个cpu 在同一瞬间只能处理一个任务,多个任务时,任务挂起,等待下个时间片

寄存器——cpu 上下文切换  怎么知道之前处理到哪了接下来需要干什么

查询指令:cat /proc/cpuinfo

内存  相当于闪存,cpu干活的地方(数据存放的地方)

查询指令:cat /proc/meminfo

硬盘   将重要的数据记录起来,以便未来再次使用这些数据

查询指令:fdisk -l (需要root权限)

No-sql 非关系型数据库数据存内存中:读取速度快

360安全管家清理的数据存在磁盘中

固态硬盘:快 分散式读写   & 机械硬盘  通道式的读写

二级缓存:介于cpu 与内存之间(日常 中很少用)

磁盘I/O

一切问题兼I/O (联系数据库读写操作理解)

理解数据库的执行过程

1、读取的数据越多,数据不在内存中的概率更大,需要从磁盘中读取写入内存,再从内存中通过cpu拿走。内存寻址

--大概率不在内存中:不是热点数据不在内存中

写的sql 性能不好(例如select * from students;)

2、写操作将数据写到内存,内存自动同步到磁盘。同步速度不够快则会造成数据丢失

面试题:cpu 、内存、磁盘之间的关系?

Cpu 相当于车间的工人,内存相当于车间,磁盘相当于仓库

怎么提高加工效率:加人、加大车间

二、Linux 监控分析命令

Top  命令

思考题1:

用户态、系统态

Root 用户起了Java进程消耗的是用户进程还是系统进程  —用户进程

Java进程写日志的时候(写入磁盘)是消耗用户进程还是系统进程  —系统进程(写日志的时候调用的是系统内核)

负载(load average)过去一分钟、过去五分钟、过去十五分钟的平均负载

思考题2:负载高cpu一定高么?cpu 低负载就一定低么?    不一定。

CPU  与负载有关系,但没有绝对关系

比如:

Cpu 正在调度的一个进程,时间片都给了这个进程 cpu 使用率高但负载不高

cpu 使用率20% ,但系统有大量等待I/O的返回  这个时候负载比较高

思考题3:负载怎么去理解?

类比:3条车道的马路

0 1 2 3  4+以上就会出现排队

负载= cpu正在调度的进程(running)+正在等待I/O的进程之和

负载多少合理取决于cpu 颗粒数

双核cpu 理论上负载小于等于2就可以

一般:负载是cpu颗粒数的 70%~80%

cpu使用率多少合适取决于什么类型的应用

I/O 密集型(常见)--  读取数据,建议cpu 不超过80%(us+sy)

CPU计算密集型-- 大部分时间都在做计算用 ,cpu 达到100% 也很正常

Vmstat 命令: r(running),不包含sleeping状态的进程  b(正在等待I/O的进程)

A – running(等待)—running(真,拿到时间片)—--等待I/o过程,中断不可恢复状态--中断不可恢复--running(真)

中断不可恢复(中断过程不可干预,一定会返回一个结果)是等待io返回 io返回后中断就恢复

中断可恢复是等待外部输入,比如外部input后恢复 这种不算入负载

B -running(等待)-- running(等待)             -- running(真,拿到时间片)     —等待input 操作(中断可恢复状态)--

c-running(等待) --running(等待)              --running(等待)                -- running(真,拿到时间片)---

--负载为2                     --     负载为2

性能好坏的评估要结合负载与cpu 一起看

进程中存在的状态:running  sleeping(包含中断可恢复状态、中断不可恢复状态),同一瞬间只有一个running 状态  sleeping状态是大多数进程的状态

Kill -9 杀不掉进程的情况:该进程是中断不可恢复状态

网络带宽:

看cpu-Top 命令:

三个区域

Us  用户进程

Sy  系统进程

Ni 改变过优先级的进程

Id 空闲cpu

Wa 等待

Hi 硬中断

Si 软中断

St 强制内存交换

Mem (物理内存)

虚拟内存(swap):在磁盘上开辟一块空间当作内存使用,但是会利用内存已分配过但不再使用的物理内存的空间

大部分在磁盘上小部分在内存上。

用到虚拟内存的话,进程就会卡

缓存:把频繁的数据缓存起来,当作缓存。下次用到时从缓存中读取,快。

缓冲:把要同步到磁盘的文件缓冲起来,写入磁盘

Mem-Buffer 缓冲

Swap -Cache 缓存

缓存与缓冲不占用本身的内存

Linux中Buffer和Cache的区别

1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,

CPU从内存中读取数据需等待很长的时间,而  Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。

Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,

可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。

2. Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,

当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。

Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。

Java系统基本不需要关注内存的使用率(内存溢出)的情况-- —  初始化的时候分辟一块内存使用空间,4G内存初始化的时候分配3G cpu使用率为75%

Mjava=heap+noheap+direct m

非java系统需要考虑内存的使用率,比如C --

交互区   java是线程模式

进程区 cpu 不可能超100%

任务区 每个任务都有可能超100% -多核cpu

virt进程所占的内存

Res 进程所占的物理内存

Shr  共享内存

Uptime  查看负载

Vmstat

Vmstat 2  每隔2s打印情况 可以看进程队列、i/O的使用情况

Sar  2(delay)  4 (count)

Sar -q 2 4

Runq-sz  正在运行的进程队列

Plist-sz   当前系统进程(非正在运行的进程)与线程之和

看内存-top \free -m \sar 命令

看内存是否充裕

Si 从内存到磁盘 swap in

So  从磁盘到内存 swap out

Iostat

Sar -B ,-r -w

百度:linux 内存 缺页

缺页计算逻辑

看磁盘-iostat ,sar -d

Device 区域  tps   io 次数

iostat -x

rrqm/s  wrqm/s  合并

r/s  w/s

看网络-netstat  -i ,tcpdump

总结:(01:45)

Cpu:使用率 负载 队列 -- top  sar iostat vmstat

内存:pgin  pgout  剩余  swap 使用  --sar  top  vmstat  free

磁盘:r/S w/S  队列 操作时间(整体服务时间) busy--iostat -x, sar -d,nmon

网络:上行 下行 丢包 --–netstat nmon

分析:

Cpu 使用率一般不超过80%   (us+sy)

us 过高,系统进程占的cpu 过高,进程等待时间切片的时间越来越长

Cpu 使用异常,平时保存在10%,突然一天到达40%

负载数:小于等于cpu 颗粒数

负载大于cpu颗粒数:有很多等待进程。

对于cpu 来说首先看负载,负载高看cpu 高不高

1、看cpu使用情况,使用率高解决使用率高的问题;

2、使用率不高看进程队列 sar  -q   vmstat

看正在调度的进程数高还是等待io 的进程数高

等待io 的进程数高说明等待服务器的返回,看下等待什么东西的返回

如果是cpu正在调度的进程数高,说明进程起多了或cpu 在时间切片内没有执行完还在继续干活

Cpu 使用率过高--查cpu过高的原因:

user(用户进程高,查哪个用户进程占用率高。Java  查看java 下哪个线程使用率过高,把线程栈信息打印出来;

看这个占cpu 线程比较高的栈正在执行的方法)

system (系统进程高,系统内核调度:I、大量磁盘io导致(判断是否io导致:看磁盘队列、看磁盘繁忙程度(nmon)-超过30% 具体是磁盘读还是写导致的。读磁盘-内存不够了,

需要从磁盘中拿数据了;写磁盘导致-系统写操作太多,减少写操作,查看应用程序中有哪些写操作   比如写日志、info日志级别就好,少用debug;写很多文件 将写操作合并或减少写操作)

II、中断(上下文切换,1、频繁进程抢占(进程优先级抢占  top  );2、这个时间片内未调度完(程序执行慢)   top 中hi si  vmstat 中system 的cs in 指标 )

上下文切换,从这个进程切换到下一个进程 ,说明在这个时间片内当前任务没有执行完强制切换到下一个时间片,要不就是进程在频繁的抢占

Strace  终极命令  系统使用率过高时分析不出问题的话可用该命令 看完之后就没有然后了

是根据系统内核调用的命令

系统内核调用哪个模块调用了多少次

cpu 负载

内存:top  命令 看free 是否持续减少,并且swap有没有持续上升

磁盘:nmon  中的busy 超过30% 说明磁盘比较繁忙

队列  Sar -d  iostat -x ( await  svctm )

有排队现象看 读多还是写多

网络:netstat -i  /tcpdump (没讲) 看上行、下行 ,是否丢包

nmon 使用

Linux 监控分析的更多相关文章

  1. Linux监控分析实战-1

    监控概述及5个大指标 cpu mem   内存 io        磁盘交互 load     负载 Network 网络 它们之间关系是相互彼此依赖,任何一个高负载都会到导致其他指标出现问题: 网卡 ...

  2. 《Unix/Linux日志分析与流量监控》书稿完成

    <Unix/Linux日志分析与流量监控>书稿完成 近日,历时3年创作的75万字书稿已完成,本书紧紧围绕网络安全的主题,对各种Unix/Linux系统及网络服务日志进行了全面系统的讲解,从 ...

  3. Linux操作系统监控分析

    性能分析点:1. 负载机2.网络传输3.硬件4.应用程序线程池5.数据库连接池6.代码业务逻辑7.数据库sql执行时间8.jvm(GC) 操作系统硬件:cpu:计算.逻辑处理:CPU的颗粒数越多,CP ...

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

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

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

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

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

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

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

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

  8. Linux ---> 监控JVM工具

    Linux ---> 监控JVM工具shkingshking 发布时间: 2013/10/10 01:27 阅读: 2642 收藏: 26 点赞: 1 评论: 0 JDK内置工具使用 jps(J ...

  9. 【转】一文掌握 Linux 性能分析之网络篇

    [转]一文掌握 Linux 性能分析之网络篇 比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看.监控,又包括网络链路上的包转发时延.吞吐量.带宽等指标分析.包括但不限于以下分析工具: pin ...

随机推荐

  1. CSS3去除手机浏览器button点击出现的高亮框

    在工作中常常遇到在手机浏览器中浏览网页时.点击页面中的button或者是具备点击事件的元素,就会出现一个默认的高亮框.影响总体的感官体验. 能够用一个简单的css3属性来解决:tap-highligh ...

  2. Linux中-POSIX 线程详解

    一种支持内存共享的简捷工具   摘自https://www.ibm.com/developerworks/cn/linux/thread/posix_thread1/ 线程是有趣的 了解如何正确运用线 ...

  3. jquery局部打印插件使用

    基于jquery库的jquery.PrintArea.js插件源代码为: (function ($) { var printAreaCount = 0; $.fn.printArea = functi ...

  4. 解决Linux SSH登录慢

    出现ssh登录慢一般有两个原因:DNS反向解析的问题和ssh的gssapi认证 :ssh的gssapi认证问题 GSSAPI ( Generic Security Services Applicati ...

  5. python之smtplib模块 发送邮件

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #smtplib模块 发送邮件 import smtplib from email.mime.text imp ...

  6. Jquery.getJSON的缓存问题的处理方法

    $.getJSON()存在缓存问题,如果其调用的url之前曾经调用过的话,回调函数就会直接在缓存里取得想要得值,而不是进入到后台   在项目中遇到一个问题,在火狐下,$.getJSON();请求数据一 ...

  7. java操作hdfs到数据库或者缓存

    使用hadoop工具将数据分析出来以后,须要做入库处理或者存到缓存中.不然就没了意义 一下是使用javaAPI操作hdfs存入缓存的代码: <span style="font-fami ...

  8. @NotEmpty、@NotNull 和 @NotBlank 的区别

    1. 三者主要区别如下: @NotEmpty :用于集合类,不能为null,且size>0 @NotNull:不能为null,但可以为empty,没有size的约束 @NotBlank:只用于S ...

  9. JedisClient(示例)

    拷贝 import java.io.IOException; import java.util.HashSet; import java.util.Map; import java.util.Set; ...

  10. 移动对meta的定义(转)

    以下是meta每个属性详解 尤其要注意的是content里多个属性的设置一定要用分号+空格来隔开,如果不规范将不会起作用. 一.<meta http-equiv="Content-Ty ...