《大规模WEB服务开发技术》读书笔记(II)——专栏知识汇总

…衆ロ難τιáo~ 提交于 2020-01-09 12:38:25

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1、Linux单主机的负载

负载均衡——前提是把一台服务器的性能发挥到极致。

通过测量找出系统的瓶颈,然后消除瓶颈,发挥性能。

寻找瓶颈的基本流程

查看瓶颈负载(load average):top或者uptime检查平均负载,若平均负载很低,但是系统吞吐量无法提高,应该检查软件设置是否异常,检查网络和远程主机是否存在故障。

确认CPU、I/O有无瓶颈:若平均负载很高,就需要在CPU或I/O中寻找原因。sar或vmstat可以查看CPU、I/O等待率随着时间的推移情况,可以作为参考。

1、CPU过高,查找流程:

确认是用户程序处理的瓶颈,还是系统程序的原因。用top或sar确认。

再通过ps查看可见进程的状态和CPU使用时间等,确定导致问题的进程。

进一步寻找原因,可以通过strace跟踪,或oprofile进行剖测,以确定瓶颈所在。

一般来说原因如下:

磁盘或内存容量等其他部分没有称为瓶颈,即处于理想状态;

程序失控,需要消耗过多的CPU。

如果是前者,并且吞吐量有问题,可以采取增加服务器、改善程序逻辑和算法的方式。后者的情况要去除故障,避免程序失控。

2、I/O负载过高,其原因多半是程序发出的I/O请求过多导致负载过高,或是发生页面交换导致频繁访问磁盘。应通过sar或vmstat确认交换区状态,以找出原因。

如果是发生页面交换的情况,应该从以下几点着手调查:

用ps确认是否有进程消耗了大量的内存;

如果由于程序故障造成内存消耗过大,应改进程序;

如果由于内存安装不足,就要增加内存。无法增加内存时,考虑分布式。

如果没有发生交换,而且磁盘I/O频繁的情况,可能是用于缓存的内存不足。根据服务器数量和可增加的内存量,按下面的应对方法:

如果通过增加内存可以扩大缓存,就增加内存;

如果增加内存还不够用,就考虑分散存储数据,或增加缓存服务器等。当然,改进程序减少I/O频率也是一种方法。

操作系统调优,就是找出负载原因并去除之。

2、两种负载与Web应用程序

两类负载:CPU负载和I/O负载

linux中top结果包含有load average的数字,即平均负载,平均负载值一般都是在定时器中断发生时计算的。代表的意思就是单位时间中处于等待状态的任务数,亦即:

等待赋予CPU的执行权限的进程;

等待磁盘I/O完成的进程。

所以平均负载是两种负载综合的结果,单凭该数字还无法判断是哪种负载高。

3、平均负载之后是CPU使用率和I/O等待率

通过sar查看CPU使用率和I/O等待率:%user是CPU在用户模式下的使用率,%system为系统模式下的使用率。平均负载高,并且此处的CPU使用率也高的话,就可以判断出进程等待的高负载原因就是CPU资源不足。

%iowait是I/O等待率,平均负载高,且该数值也高就可以认为高负载的原因就是I/O,之后就可以进一步查看内存使用率、页面交换发生状况等其他指标。

sar -P就可以查看多CPU的情况

4、查看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每秒换出页面数

5、降低I/O负载和页面缓存

%memused越来越大,但是不能忘记linux的页面缓存。

特别是I/O密集型服务器,根据服务器处理的数据量安装内存,是降低I/O负载的有效方法。

vmstat可以看到实际发生了多少磁盘访问。

如果无法增加内存,可以考虑将数据分割,分别放在不同的服务器上。

要先读取一次磁盘才会页面缓存:在MySQL等数据库中处理大规模数据时要注意这一点,让数据库将必要的数据读取一次之后再放回生产环境。【此处如何将MySQL各种数据文件全部读入的程序】

6、负载均衡和操作系统的运行原理

理解操作系统的运行原理是学习负载均衡的重点。

学习操作系统的运行原理之后,就能深入理解

操作系统缓存

多线程、多进程

虚拟内存机制

文件系统

要调查负载需要操作系统内部的哪些信息


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!