点击返回架构师成长之路html
监控入门:linux
预中级监控须要作:sql
中级监控须要作:数据库
进阶监控须要作:安全
[A] 上下文切换: 性能优化
目前流行的CPU在同一时间内只能运行一个线程,超线程的处理器能够在同一时间运行多个线程(包括多核CPU),Linux内核会把多核 的处理器看成多个单独的CPU来识别。
一个标准的Linux内核能够支持运行50~50000个进程运行,对于普通的CPU,内核会调度和执行这些进程。每一个进程都会分到CPU的时间片来运行,当一个进程用完时间片或者被更高优先级的进程抢占后,它会备份 到CPU的运行队列中,同时其余进程在CPU上运行。这个进程切换的过程被称做上下文切 换。过多的上下文切换会形成系统很大的开销。网络
[B] 运行队列(负载):
数据结构
每一个CPU都会维持一个运行队列,理想状况下,调度器会不断让队列中的进程运行。进程不是处在sleep状态就是runable状态。若是CPU过载,就会出现调度器跟不上系统的要求,致使可运行的进程会填满队列。队列愈大,程序执行时间就愈长。多线程
补充:关于时间片和动态优先级架构
时间片对于CPU来讲是很关键的参数,若是时间片太长,就会使系统的交互性能变差,用户感受不到并行。若是过短,又会形成系统频繁的上下文切换,使性能 降低。对于IO Bound的系统来说并不须要太长的 时间片,由于系统主要是IO操做;而对于CPU Bound的系统来讲须要长的时间片以保持cache的有效性。
每个进程启动的时候系统都会给出一个默认的优先级,但在运行过程当中,系统会根据进程的运行情况不断调整优先级,内核会升高或下降进程的优先级(每次增长或下降5),判断标准是根据进程处于sleep状态的时间。
IO Bound进程大部分时间在sleep状态,因此内核会调高它的优先级,CPU Bound进程会被内核惩罚下降优先级。所以,若是一个系统上即运行IO Bound进程,又运行CPU Bound进程,会发现,IO Bound进程的性能不会降低,而CPU Bound进程性能会不断降低。
[C] CPU使用率:
CPU使用的百分比。对于上下文切换要结合CPU使用率来看,若是CPU使用知足上述分布,大量的上下文切换也是能够接受的。
补充:内核态与用户态
intel x86 CPU有四种不一样的执行级别0-3,linux只使用了其中的0级和3级分别来表示内核态和用户态。
内核态与用户态是操做系统的两种运行级别。
运行在用户态下的程序不能直接访问操做系统内核数据结构和程序。
当咱们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其须要操做系统帮助完成某些它没有权力和能力完成的工做时就会切换到内核态。
这两种状态的主要差异是:
补充:用户态和内核态的转换
1)用户态切换到内核态的3种方式
这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用能够认为是用户进程主动发起的,异常和外围设备中断则是被动的。
2)具体的切换操做
从触发方式上看,能够认为存在前述3种不一样的类型,可是从最终实际完成由用户态到内核态的切换操做上来讲,涉及的关键步骤是彻底一致的,没有任何区别,都至关于执行了一个中断响应的过程,由于系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本上也是一致的,关于它们的具体区别这里再也不赘述。关于中断处理机制的细节和步骤这里也不作过多分析,涉及到由用户态切换到内核态的步骤主要包括:
【A】CPU密集型(CPU-bound)
CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好不少,此时,系统运做大部分的情况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就能够完成,而CPU还有许多运算要处理,CPU Loading很高。
在多重程序系统中,大部份时间用来作计算、逻辑判断等CPU动做的程序称之CPU bound。例如一个计算圆周率至小数点一千位如下的程序,在执行的过程中绝大部份时间用在三角函数和开根号的计算,即是属于CPU bound的程序。
CPU bound的程序通常而言CPU占用率至关高。这多是由于任务自己不太须要访问I/O设备,也多是由于程序是多线程实现所以屏蔽掉了等待I/O的时间。
【B】IO密集型(I/O bound)
IO密集型指的是系统的CPU性能相对硬盘、内存要好不少,此时,系统运做,大部分的情况是CPU在等I/O (硬盘/内存) 的读/写操做,此时CPU Loading并不高。
I/O bound的程序通常在达到性能极限时,CPU占用率仍然较低。这多是由于任务自己须要大量I/O操做,而pipeline作得不是很好,没有充分利用处理器能力。
CPU密集型适合C语言多线程,I/O密集型适合脚本语言开发的多线程。
经验总结:
【A】top 命令
P CPU使用率排序
W 内存使用率排序
【B】sysstat工具包
vmstat(Virtual Memory Statistics 虚拟内存统计) 命令用来显示Linux系统虚拟内存状态,也能够报告关于进程、内存、I/O等系统总体运行状态。
mpstat:其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看全部CPU的平均情况信息,并且可以查看特定CPU的信息。
分红页 每页4KB
[A] 内存寻址:
内存寻址是指CPU容许支持的内存大小。双通道内存技术实际上是一种内存控制和管理技术,它依赖于芯片组的内存控制器发生做用,在理论上可以使两条同等规格内存所提供的带宽增加一倍。当计算机面临大量的数据流时,32位的寄存器和指令集不能及时进行相应的处理运算。
计算机管理内存的基本方式有两种:段式管理和页式管理。
而在使用80x86微处理器时,内存地址分为三个不一样的地址:逻辑地址,线性地址,物理地址。
逻辑地址:包含在机器语言指令中用来指定一个操做数或一条指令的地址,每一个逻辑地址都由一个段和偏移量组成,表示为[段标识符:段内偏移量]。例如,在C/C++程序中咱们使用指针对变量地址操做,该地址就是逻辑地址(准确的应该说是逻辑地址的段内偏移量)。对应上述段式管理,逻辑地址是段式管理转换前的程序地址。
[B] 内存空间:
内存是计算机系统中一个主要部件, 用于保存进程运行时的程序和数据,也称可执行存储器。在计算机中,内存空间通常是指主存储器空间(物理地址空间)或系统为一个用户程序分配内存空间。扩展内存空间的方法通常有增长内存大小和虚拟内存。
free命令
IOPS: IOPS(Input/Output Operations Per Second)是一个用于计算机存储设备(如硬盘(HDD)、固态硬盘(SSD)或存储区域网络(SAN))性能测试的量测方式,能够视为是每秒的读写次数。
随机访问(随机IO)、顺序访问(顺序IO)
随机访问和顺序访问一样是有应用决定的。如数据库、小文件的存储的业务,大可能是随机IO。而视频类业务、大文件存取,则大多为顺序IO。
选取合理的观察指标:
以上各指标中,不用的应用场景须要观察不一样的指标,由于应用场景不一样,有些指标甚至是没有意义的。
iotop 命令:监控硬盘IO的使用状况
iftop命令 查看实时的网络流量,监控TCP/IP链接等
因为安装好的EPEL没有iftop,因此没法使用yum install iftop直接安装,因此测试的时候采用编译安装。
yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz tar zxvf iftop-0.17.tar.gz cd iftop-0.17 ./configure make && make install
经常使用的参数:
上图说明:
....