• 【网站架构】cpu、内存、带宽是否足够?负载分析,linux内核调优】


     

    大家好,欢迎来到停止重构的频道。

    本期,我们介绍一下Linux内核参数调优负载分析

    如果不做Linux内核参数调优的话,那么4核8G和16核32G服务器的性能可能并没有多大区别。

    那么为什么要做负载分析呢? 因为服务器配置的选择是很难标准化的 ,很难推断出“一台需要达到1000RPS”的服务器配置是什么样的,最终运行的性能与代码的编写方式、数据结构、数据量是紧密相关的。

    因此服务器配置的选择往往是基于具体的测试结果,而负载分析就是客观地分析 CPU核数是多了、还是少了 内存是否足够, 网络带宽是否足够等问题。

    内核参数调优和了解负载分析,是对软件服务调优的前提,我们按照以下顺序介绍 :

    1. 内核参数调优 

    2. 服务器负载分析 

    内核参数调优

    首先是内核参数调优,光有强大的物理性能 而不做内核参数调优的话, 那么服务器的性能是发挥不出来的。

    内核参数调优一般调整两部分:

    1. 最大文件数 

    2. TCP相关设置

    最大文件数的设置会影响系统最多可以打开的文件数, Ubuntu20.04的话可参考图中配置,一般统一设置为最大值65535即可。

    这里的文件数不单单是文档 ,它还包含线程、TCP连接等等。如果不设置的话 ,那么服务器是无法启动1000个线程, 或者打开1000个TCP连接的。

     

    TCP相关设置会影响高并发网络通信的性能,Ubuntu20.04的话可参考图中配置,虽然在低压力下性能影响不大,但是在高压力下,诸如通道复用、TCP最大通道数等配置就会很大程度上影响性能

    无论服务器的具体配置如何, 内核参数调优我们是习惯统一设置成最大值的 ,一是为了简化内核参数调优 。二是没有必要根据具体硬件配置设置 ,因为之后我们会进行软件服务的调优, 在软件服务调优的时候根据具体硬件配置即可。

    当然,一些公有云的服务器是已经做好内核参数调优的, 但是最好在服务调优之前检查一下,不然往往再怎么调整软件服务配置,性能也上不去。

    服务器负载分析

    接下来是服务器负载分析 ,在前面《性能测试》时提到, 最终的测试报告是由两部分组成的,其中一个就是服务器负载情况。

    服务器负载分析一般就是分析 CPU、内存、网络带宽使用率、磁盘I/O情况等。 当然,如果使用其他硬件如GPU等,也需要对其进行负载分析。

    CPU使用率反映的是CPU的忙碌情况 ,CPU使用率可以用htop观察 ,如果CPU使用率接近或超过100%时,就会出现明显的卡顿 所以在性能调优时 ,最好把CPU使用率控制在80%以下。

    除了CPU使用率 ,还需要观察CPU平均负载,平均负载指单位时间内平均活跃的进程数,一般情况下平均负载的值应该低于当前服务器的CPU核数

    ​内存使用率反映的是内存的使用情况,内存使用率可以使用htop或free观察 ,内存使用率是可以接近100%的,但最好保持在80%以下,虚拟内存最好保持在0% ,因为虚拟内存实际上是磁盘空间, 虚拟内存的性能是远不如内存的 。

    当然,也不要关闭虚拟内存, 因为虚拟内存可以作为突发情况时的内存空间 ,聊胜于无。

    磁盘I/O情况也就是磁盘的繁忙程度,这是很容易忽略的, 因为网站系统中,日志、文件操作、数据库操作都会对磁盘造成读写压力。 如果磁盘存在性能瓶颈的话 ,再怎么增加内存CPU都是没用的。

    磁盘情况可以使用iostat或iotop观察,同样磁盘也不能100%负载,为了降低磁盘压力,可以使用更高性能的磁盘或者异步写入文件。当然,也可以通过tmpfs挂载一部分内存作为磁盘空间以提高性能。

    网络带宽使用情况也是很容易忽略的指标, 网络带宽使用情况可以使用nload观察 ,网络带宽使用率最好在80%以下 。当然,带宽实际上是有上行带宽和下行带宽之分的 也就是图中的Incoming和outgoing ,这两个带宽一般需要单独分析 因为它们的值一般是不相等的。

    以数据库为例 ,接收到的SQL请求是占用下行带宽的, 返回数据是占用上行带宽的。另外,内网并不是带宽无上限的 ,不要因为是内网环境就忽略网络带宽的观察。

    如果是云环境,一般是提供相关的负载信息的。但在性能调优时,最好通过以上工具观察物理资源使用情况。

    总结

    内核参数调优和负载分析是很容易被忽略的 ,如果忽略了这两项, 则没有调优的方向, 胡乱地选择硬件配置 ,就好像买衣服胡乱选择尺码一样。

  • 相关阅读:
    RTX 4090来了!显卡换新,驱动别拉胯
    PMP刷题小结2
    K8s ingress-controller中nginx文件上传大小的限制
    计算机毕业设计ssm校园疫情防控系统jt87q系统+程序+源码+lw+远程部署
    代码随想录算法训练营Day55 | 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇 | Python | 个人记录向
    Python环境的搭建+第一个Python程序的运行
    设计模式-结构型模式-桥接模式
    GPT-4o有点坑
    【场景化解决方案】慧穗云开票,让钉钉与业务数据流转更灵活
    代码随想录算法训练营第三十一天丨 贪心算法part02
  • 原文地址:https://blog.csdn.net/Daniel_Leung/article/details/126697136