开源一夏 |如何优化线上服务器
我相信很多程序员都会有这种“线上服务器老是卡”等烦恼,那我今天给大家讲讲该如何优化线上服务器老是卡的问题。
听多了架构优化,数据库优化,今天我们来聊聊服务器优化。
我们开发的软件服务需要在服务器上运行,所以服务器性能代表了软件的性能上限,因此服务器性能调优是个十分重要的环节,然而大部分同学对服务器性能调优关注的较少,今天从 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
%idle
:表示 CPU 除去等待磁盘 I/O 以外的空闲时间百分比,这个指标应该要保证在 70%以上%util
:该设备用于 I/O 操作的时间百分比,这个指标需要保证在 70%以下,当到达 100%时表示已经满负载。为了降低磁盘负载,可以采用性能更高的磁盘(OSD,PCIE)或者降低磁盘的操作频率(异步写、合并写)
平均负载
平均负载指的是单位时间内平均的活跃进程数,是一个表示服务器负载的指标。一般情况下需要保证平均负载的值小于当前服务器的 CPU 核数。
同样的,查看服务器平均负载我们也可以使用htop
命令
在这里我们主要关注Load average
指标,上图有 3 个数字,分别代表 1 分钟,5 分钟,15 分钟的平均负载。
一般情况下服务器的平均负载需要小于当前服务器的 CPU 核数,为了应对突发状况,服务器的平均负载应该在 75%即 3 以下,很显然,上图这台服务器平均负载超过了 75%,需要考虑提升性能了。
网络使用情况
网络使用情况也是监控的重要指标。当带宽不足时会大大增加请求的响应时间。为了防止突发性并发压力,应该保证服务器的带宽使用率在 80%以上。这里需要注意的是,物理网卡限制了服务器所能使用的最大宽带。
查看网络使用情况我推荐使用nload
工具。
使用 nload 查看网络
首先需要安装 nload,以 centos 为例
安装完成后我们直接运行nload
输入nload
命令后,网络使用情况如上图所示。其中,网络使用情况分为流入网卡的数据与流出网卡的数据。流入网卡的对应下行带宽的网速,流出网卡的数据对应上行带宽的网速。如果 “当前网速” 持续接近 “最大网速” 时,代表带宽使用率已经接近 100%。
指标说明:
Curr:当前网速
Avg:平均网速
Min:最小网速
Max:最大网速
Ttl:总流量
服务器内核参数调优
光有强大的物理性能是不够的,还需要对内核参数进行调优,这样才能在高并发压力下充分体现服务器应有的性能。当然,并不是所有的服务器都需要做高并发性能调优,一般来说,只需要对要处理高并发请求的服务器进行内核参数调优即可,常见的包括:前端服务器,后端服务器,数据库服务器。
服务器常见的调优参数主要有两个:单个进程最大打开文件数 和 TCP 相关设置。
单个进程最大打开文件数
修改单个文件最大打开文件数,只需要编辑/etc/security/limits.conf
文件,在文件末尾加上以下四句
其中*
代表所有用户,65536 代表修改的值,重启后生效。
TCP 相关设置
修改 TCP 相关参数,可以优化 TCP 高并发通信,编辑/etc/sysctl.conf
文件,添加以下内容
本期分享到此为止,关注博主不迷路,叶秋学长带你上高速~~
版权声明: 本文为 InfoQ 作者【叶秋学长】的原创文章。
原文链接:【http://xie.infoq.cn/article/98df0fd6bc6a95e0fce2c8dde】。文章转载请联系作者。
评论