一、Linux单主机的负载linux
负载均衡——前提是把一台服务器的性能发挥到极致。算法
经过测量找出系统的瓶颈,而后消除瓶颈,发挥性能。数据库
寻找瓶颈的基本流程缓存
查看瓶颈负载(load average):top或者uptime检查平均负载,若平均负载很低,可是系统吞吐量没法提升,应该检查软件设置是否异常,检查网络和远程主机是否存在故障。服务器
确认CPU、I/O有无瓶颈:若平均负载很高,就须要在CPU或I/O中寻找缘由。sar或vmstat能够查看CPU、I/O等待率随着时间的推移状况,能够做为参考。网络
一、CPU太高,查找流程:多线程
确认是用户程序处理的瓶颈,仍是系统程序的缘由。用top或sar确认。负载均衡
再经过ps查看可见进程的状态和CPU使用时间等,肯定致使问题的进程。分布式
进一步寻找缘由,能够经过strace跟踪,或oprofile进行剖测,以肯定瓶颈所在。性能
通常来讲缘由以下:
磁盘或内存容量等其余部分没有称为瓶颈,即处于理想状态;
程序失控,须要消耗过多的CPU。
若是是前者,而且吞吐量有问题,能够采起增长服务器、改善程序逻辑和算法的方式。后者的状况要去除故障,避免程序失控。
二、I/O负载太高,其缘由多半是程序发出的I/O请求过多致使负载太高,或是发生页面交换致使频繁访问磁盘。应经过sar或vmstat确认交换区状态,以找出缘由。
若是是发生页面交换的状况,应该从如下几点着手调查:
用ps确认是否有进程消耗了大量的内存;
若是因为程序故障形成内存消耗过大,应改进程序;
若是因为内存安装不足,就要增长内存。没法增长内存时,考虑分布式。
若是没有发生交换,并且磁盘I/O频繁的状况,多是用于缓存的内存不足。根据服务器数量和可增长的内存量,按下面的应对方法:
若是经过增长内存能够扩大缓存,就增长内存;
若是增长内存还不够用,就考虑分散存储数据,或增长缓存服务器等。固然,改进程序减小I/O频率也是一种方法。
操做系统调优,就是找出负载缘由并去除之。
二、两种负载与Web应用程序
两类负载:CPU负载和I/O负载
linux中top结果包含有load average的数字,即平均负载,平均负载值通常都是在定时器中断发生时计算的。表明的意思就是单位时间中处于等待状态的任务数,亦即:
等待赋予CPU的执行权限的进程;
等待磁盘I/O完成的进程。
因此平均负载是两种负载综合的结果,单凭该数字还没法判断是哪一种负载高。
三、平均负载以后是CPU使用率和I/O等待率
经过sar查看CPU使用率和I/O等待率:%user是CPU在用户模式下的使用率,%system为系统模式下的使用率。平均负载高,而且此处的CPU使用率也高的话,就能够判断出进程等待的高负载缘由就是CPU资源不足。
%iowait是I/O等待率,平均负载高,且该数值也高就能够认为高负载的缘由就是I/O,以后就能够进一步查看内存使用率、页面交换发生情况等其余指标。
sar -P就能够查看多CPU的状况
四、查看sar命令中操做系统报告的各项指标
两种用法:追溯过去的统计数据(默认)、周期性的查看当前数据
sar 1 4 一秒一次,共4次
sar -u 查看CPU使用率:%user用户模式下的使用率 %nice经过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间比例 %system系统模式下的使用率 %iowaitCPU等待磁盘I/O而致使空闲状态消耗时间的比例%steal利用操做系统虚拟化技术时,等待其余虚拟CPU计算占用的时间比例 %idle空闲比例
sar -q 查看平均负载
sar -r 查看内存使用情况:kbmemfree空闲物理内存量 kbmemused使用中的物理内存量 %memused物理内存使用率 kbbuffers内核中做为缓冲区使用的物理内存容量 kbcached内核中做为缓存使用的物理内存容量 kbswpfree交换区的空闲容量 kbswpused使用中的交换区容量。
sar -W 查看页面交换发生的情况:pswpin/s每秒换入页面数 pswpout/s每秒换出页面数
五、下降I/O负载和页面缓存
%memused愈来愈大,可是不能忘记linux的页面缓存。
特别是I/O密集型服务器,根据服务器处理的数据量安装内存,是下降I/O负载的有效方法。
vmstat能够看到实际发生了多少磁盘访问。
若是没法增长内存,能够考虑将数据分割,分别放在不一样的服务器上。
要先读取一次磁盘才会页面缓存:在MySQL等数据库中处理大规模数据时要注意这一点,让数据库将必要的数据读取一次以后再放回生产环境。【此处如何将MySQL各类数据文件所有读入的程序】
六、负载均衡和操做系统的运行原理
理解操做系统的运行原理是学习负载均衡的重点。
学习操做系统的运行原理以后,就能深刻理解
操做系统缓存
多线程、多进程
虚拟内存机制
文件系统
要调查负载须要操做系统内部的哪些信息