服务器性能指标及排查思路

    xiaoxiao2023-10-12  173

    目录

    前言

    cpu

    平均负载

    内存

    监控工具

    doDBA


    前言

    当项目运行时,一旦发生系统变慢的情况,我们往往就需要对部署服务器的性能指标进行一波分析,面对各种超时问题时同理,本文简单介绍下部分名词,我们最希望得到的结果一般都是排除系统变慢是由于服务器硬性问题,然后我们就能针对其他方面继续分析,例如进程级别排查、代码排查、数据库性能排查等。

     

    cpu

    第一步先简单查看下该服务器硬性指标,当然光看cpu信息其实没多大意义,我们主要是为了了解该信息并在接下来查看平均负载时能有杆秤进行比较负载情况。在具体命令给出之前,我们首先需要了解以下基本信息:

    物理cpu:主板上实际插入的cpu数量,一般可以通过数不重复的"physical id"有几个cpu核数:指每个物理cpu上能处理数据的芯片组数量,例如双核、四核等逻辑cpu:一般情况下,逻辑cpu = 物理cpu数 * cpu核数,如果不相等的话,则表示服务器的CPU支持超线程技术(HT:简单来说,它可使处理器中的1 颗内核如2 颗内核那样在操作系统中发挥作用。这样一来,操作系统可使用的执行资源扩大了一倍,大幅提高了系统的整体性能,此时逻辑cpu=物理CPU个数×每颗核数x2)

    查看物理cpu数:

    cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

    敲完命令一般系统会直接返回一个数字,如下,查看cpu核数和查看逻辑cpu数同理

    查看cpu核数:

    cat /proc/cpuinfo| grep "cpu cores"| uniq

    查看逻辑cpu数:

    cat /proc/cpuinfo| grep "processor"| wc -l

     

    平均负载

    平均负载是指单位时间内,系统处于可运行状态(runnable)和不可中断状态(uninterruptable)的平均线程总数,也就是平均活跃进程数,与cpu使用率一般没有直接关系。为了方便理解,你可以认为平均负载就是平均活跃进程数。平均活跃进程数,最直观上的理解就是单位时间内的活跃进程数,但它实际上是活跃进程数的指数衰减平均值。

    既然是平均活跃进程数,那么最理想的情况,就是每个逻辑cpu上都运行着一个进程,这样每个cpu都得到了充分的利用。一般我们可直接使用uptime或top命令查看系统的平均负载情况,如下:

    load average后面分别表示1分钟、5分钟和15分钟的负载情况,那么假设这个负载为2意味着什么呢?简单套用上面的分析,可以得到:

    1)在只有2个cpu的机器上,cpu得到了充分的利用

    2)在有4个cpu的机器上,cpu还有50%的空闲

    3)在只有1个pu的机器上,cpu已经过载50%,意味着有一半的进程竞争不到cpu

    那么平均负载为多少时合理呢?

    一般来说以逻辑cpu数为基准,当负载数过载到70%以上,该机器就已经处于负载很严重的情况了,就可能导致进程响应变慢,影响系统的日常运行,此时就该排查负载问题

    平均负载案例简单分析

    mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有CPU 的平均指标。

    pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

    可使用上述两个工具进行简单分析,有兴趣可以自行百度

     

    内存

    linux中内存简单分为物理内存(memory)和虚拟内存(swap),论读写速度,内存比cpu低了一个量级,但是高于磁盘不止一个量级。所以程序和数据如果在内存的话,会有非常快的读写速度,因此出现了许多基于内存存储的数据库。

    使用free -m命令可快速查看linux的内存情况,-m表示内存以m为单位,默认以kb为单位

    Mem行表示物理内存,Swap表示交换空间内存也即虚拟内存

    total:表示物理内存和交换空间总的内存大小

    used:表示已被使用的内存

    free:表示剩余内存

    shared:多个进程共享的内存总和,当前废弃不用

    buff/cache:缓存内存数,也即程序预留的内存数

    available:还可以被程序所使用的内存大小

    这里的重点其实buff/cache这一列,一般称为”页高速缓存“,这其实是linux为了提高执行效率,将部分数据缓存到内存,避免每次从磁盘中进行读取。

    我们要意识到我们使用该命令是为了排查服务器的内存使用情况,所以当Mem和Swap区的实际可用内存很少时,则系统变慢的原因可能是由此而来,可能需采取增加物理内存的方式解决。

     

    监控工具

    doDBA

    这是一款可实时监控操作系统和mysql数据库的性能,便于在系统出现问题时找出性能瓶颈

    github地址:https://github.com/dblucyne/dodba_tools

    下完包之后直接将该包放到所要监控的服务器上并解压,然后执行下述命令:

    cd dodba_tools chmod +x doDBA vi doDBA.conf { "Host":"127.0.0.1", //主机IP地址,如果是远程主机,请填写实际的IP地址 "Huser": "root", //主机用户 "Hport": "22", //主机ssh端口 "Hpwd": "Auto_123", //主机用户密码 "Muser": "dbuser", //MySQL数据库监控用户 "Mpwd": "DBuser123!", //MySQL数据库监控用户密码 "Mport":"3306" //MySQL端口 }

    使用帮助:./doDBA -help

    1)查看mysql性能:./doDBA -mysql

    2)查看innoDb性能:./doDBA -innodb

    3)查看主机性能:./doDBA -sys

    最新回复(0)