大家好,面试我是官何飘渺。听多了架构优化,对服接口优化
,进行数据库优化
,优化今天我们来聊聊服务器优化
。面试 我们开发的官何软件服务需要在服务器上运行,所以服务器性能代表了软件的对服性能上限,因此服务器性能调优是进行个十分重要的环节,然而大部分同学对服务器性能调优关注的优化较少 ,今天从3个部分对服务器性能调优进行介绍,亿华云面试分别是官何
:服务器配置选择,服务器负载分析
,对服服务器内核参数调优。进行 云原生实战系列正在热更中,优化赶紧进来学习吧~ 服务器一般是由CPU
、内存、磁盘和网卡组成
,因此选择服务器配置就是选择CPU核数
、内存大小、磁盘大小及类型、网络带宽 。但是,模板下载服务器配置的选择是很难标准化的
,也就是说很难推断出“一台需要达到1000TPS的后端服务器”的配置应该是什么样的
。因为软件的最终运行性能与软件的实现方式是紧密相关的,即使是源码库同一个后端应用程序中的两个接口,由于具体功能的差别 ,性能也会有所差别。 因此,服务器配置的选择应该基于具体的测试结果。一开始可以选用配置较低的服务器做调优和测试,并以该服务器的测试结果作为选择服务器的依据 。 以一个订单业务为例,经过测试后,云计算一台配置为4核 CPU 、16GB内存
、10Mbps带宽、50GB机械磁盘的服务器的测试结果为:支持50并发量和300TPS吞吐量(增大并发量后会出现超时报错)
。而在压力测试过程中
, CPU 的使用率接近75%,内存使用率在 50%以下 ,带宽使用率在50%以下,除去日志以外无磁盘操作。 因此可以认为,一台配置为4核 CPU ( CPU 使用率需要在75%以下) 、8GB内存(内存使用率可以接近100%)、 5Mbps 带宽(带宽使用率可以接近100%)的建站模板服务器
,可以满足订单接口支持50并发量、300TPS吞吐量的压力。 如果需要达到200并发数、2400TPS吞吐量的目标的话
,则需要8台配置为4核 CPU 、8GB内存、5Mbps带宽的服务器,或者1台配置为32核 CPU
、64GB内存
、40Mbps带宽的服务器
。服务器租用当然,最终的服务器配置还是需要通过测试来验证 。 注意:在以上订单接口的例子中 ,后端服务器和数据库等服务器需要一起调试
,避免后端服务器性能过剩,而数据库等服务器性能不足的情况发生 。另外
,以上选择服务器配置的方法不一定适用于所有场景,请斟酌参考 。 在性能调优时,需要先对服务器负载进行分析,通常而言,我们主要分析CPU使用率 、内存使用率、磁盘I/O,服务器负载和带宽使用情况。 CPU使用率 CPU使用率反应的是CPU的忙碌情况。当CPU达到100%时,部分进程会进入等待状态 ,CPU暂时不会对其进行处理。在实际情况下,为了应对一下突发性的请求压力
,服务器CPU使用率一般需要在75%以下 。如果一台服务器的CPU使用率多次高于75%,这时候就考虑增加新的服务器
。 监控CPU使用率我推荐大家使用htop工具,可以非常直观看到CPU使用率
、内存使用率
、及负载等信息。 使用htop查看CPU负载 首先我们需要安装htop ,以centos为例 ,安装命令如下: 安装完成后我们就可以通过htop命令观察CPU负载了 输入htop命令后我们可以很直观的看到CPU负载情况,该命令的CPU使用率会以多个核作为单位进行显示。操作系统机会自动分配多个核的负载,当所有核的CPU使用率都超过75%时才能认为服务器的CPU使用率已经超过75%
。 cpu负载 如上图所示,这是一个4核CPU服务器,在截图的时候其中3核CPU使用率都超过了75%
,再观察一会发现所有CPU的使用率都在85%左右徘徊 ,说明CPU负载很高了,需要考虑增加新的服务器
。 内存使用率 内存使用率反应的是内存的使用情况。内存用于存放程序的代码及数据
,一般分为物理内存和虚拟内存 ,其中物理内存指的是服务器的内存,而虚拟内存指的是硬盘的一块空间。当物理内存使用率达到100%时将会使用虚拟内存
。需要注意的是,虚拟内存的读写速度远远低于物理内存,如果程序被放在了虚拟内存执行,那么程序的执行效率会变得很低 。 一般而言,服务器的物理内存应该保持在80%以下
,虚拟内存使用率保持在0%
。 服务器内存使用情况还是可以通过hop工具进行查看 内存使用率 上面显示了服务器的内存使用情况 :总内存16G,使用了10G左右,内存使用率62%,可以继续使用,同时关闭了Swap虚拟内存 。 在下MEM%栏中显示了单个进程的内存使用率。 磁盘I/O 磁盘I/O指的是磁盘的读写,在软件系统中 ,日志、文件操作
、数据库操作都会造成磁盘读写压力
,其中又以数据库操作为甚
,在高并发情况下往往数据库会首先成为系统的瓶颈。 磁盘监控我推荐大家使用iostat工具,可以很方便查看磁盘的使用情况。 使用iostat查看磁盘I/O 首先我们需要安装iostat,以centos为例 ,安装命令如下
: 安装完成后我们就可以通过iostat命令磁盘使用情况了 。 磁盘IO 输入iostat命令后,磁盘总体读写情况如上所示
。磁盘负载主要关注2个指标:%idle ,%util 平均负载 平均负载指的是单位时间内平均的活跃进程数
,是一个表示服务器负载的指标。一般情况下需要保证平均负载的值小于当前服务器的CPU核数。 同样的 ,查看服务器平均负载我们也可以使用htop命令 在这里我们主要关注Load average指标
,上图有3个数字
,分别代表1分钟,5分钟
,15分钟的平均负载。 一般情况下服务器的平均负载需要小于当前服务器的CPU核数 ,为了应对突发状况
,服务器的平均负载应该在75%即3 以下 ,很显然 ,上图这台服务器平均负载超过了75% ,需要考虑提升性能了 。 网络使用情况 网络使用情况也是监控的重要指标
。当带宽不足时会大大增加请求的响应时间
。为了防止突发性并发压力,应该保证服务器的带宽使用率在80%以上。这里需要注意的是,物理网卡限制了服务器所能使用的最大宽带 。 查看网络使用情况我推荐使用nload工具。 使用nload查看网络 首先需要安装nload,以centos为例 安装完成后我们直接运行nload 输入nload命令后,网络使用情况如上图所示
。其中,网络使用情况分为流入网卡的数据与流出网卡的数据 。流入网卡的对应下行带宽的网速,流出网卡的数据对应上行带宽的网速
。如果 “当前网速” 持续接近 “最大网速” 时,代表带宽使用率已经接近100%。 指标说明: 光有强大的物理性能是不够的,还需要对内核参数进行调优,这样才能在高并发压力下充分体现服务器应有的性能 。当然 ,并不是所有的服务器都需要做高并发性能调优,一般来说
,只需要对要处理高并发请求的服务器进行内核参数调优即可,常见的包括:前端服务器 ,后端服务器,数据库服务器。 服务器常见的调优参数主要有两个:单个进程最大打开文件数 和 TCP相关设置
。 单个进程最大打开文件数 修改单个文件最大打开文件数,只需要编辑/etc/security/limits.conf文件 ,在文件末尾加上以下四句 其中* 代表所有用户,65536代表修改的值
,重启后生效。 TCP相关设置 修改TCP相关参数
,可以优化TCP高并发通信,编辑/etc/sysctl.conf文件
,添加以下内容



