Linux诊断监控

1、CPU核数


    1)top按1
    2)cat /proc/cpuinfo

    

    3)lscpu:

    

    CPU(s):                 #逻辑cpu颗数 
    Thread(s) per core:     #每个核心线程 
    Core(s) per socket:     #每个cpu插槽核数/每颗物理cpu核数 


    4) 物理CPU:cat /proc/cpuinfo |grep "physical id" |sort|uniq|wc -l

    
    5)core id:cat /proc/cpuinfo |grep "core id" |sort|uniq|wc -l 

    
    6)总核数 = 物理CPU个数 X 每颗物理CPU的核数
    7)总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数(cat /proc/cpuinfo| grep "processor"| wc -l)

    

2、CPU占用率


    看CPU是否有问题,看CPU总的占用率
    

3、平均负载

    
    含义:过去的1,5,15分钟的平均负载
    平均负载:平均的活跃进程数(运行(R),可运行(S),不可中断(D)),特点:历史、平均、趋势。

    不能表示实时负载,可以用来看趋势,进程的负载长度

    引申:进程状态

    
    
    忙的趋势是可接受还是不可接受?
        Load<0.7核数   负载不高,不忙
        0.7核数<Load<3*核数    不清楚,需要继续分析
        Load>3*核数  负载高,忙


    Cpu占用率和平均负载的关系
        1)平均负载load average高,就一定cpu占用率高吗?
            平均负载高,意味着进程多。
            A.如果这些进程每个进程占用cpu也高的话(代码复杂度高,有大量循环)(cpu密集进程,视频编码,人工智能,图片处理),就肯定服务器系统cpu占比高
            B.如果这些进程每个进程占用cpu很低的话(IO密集型进程,读写数据,占用cpu很低),就肯定服务器系统cpu占比不高
        2)cpu占用高,就一定平均负载load average高吗?
            A.    不一定:如果cpu占用高,但是只有少量进程,多核cpu,
            B.    有可能:如果cpu占用高,同时有很多进程运行,就会load average高

        3)平均负载高有哪些原因造成?
            进程多造成,应用程序,cpu密集型,任务多,要大量统计,计算,如何进一步分析?看vmstat 的R列,如果R多,就 用top进一步分析进程,进一步dump线程,如果B列多,就分析IO


4、top 

    top分析:
    1)Id-低,意味着cpu有瓶颈
    2)Us-高,继续用top监控进程(找出cpu占比高的进程),dump线程
    3)Sy-高,看内核可以优化的内核参数(一般较少出现问题 )
那么对于内核态造成的占用高和用户态造成的占用高,要考虑下一步怎么分析,什么导致的高,往哪个方向考虑
    4)Wa-高,进一步分析IO
    5)Si-高,进一步分析网络

    top高级用法:

    1)按top,然后按h可进入top的帮助界面:
    
    2)改变top的刷新时间为1秒:top -> d -> 1 -> Enter,按W保存
    
    看到如下信息说明保存成功:
    
    3)按F可进入到排序,如下可以看到是按CPU排序:
    
    按cpu排序:top命令后,输入大写的P;按内存排序:top命令后,输入大写的M,修改排序之后要在top界面按W保存
    4)增加字段,如下:top ->f/F -> 上下键光标移到到要添加的字段 -> d -> 要添加的字段前面出现*说明添加成功,可按d删除添加的字段
    
    回到top界面按c,可看到增加的几列字段
    也可参考:https://www.cnblogs.com/ronli/p/centos-top.html
    5)写一个简单的top脚本:top -b -d 1 -n 3 > top.log,每1秒采集一次,共采集3次写到top.log里面 
    取Cpu:grep Cpu top.log
    

 

5、vmstat


    对操作系统整体的虚拟内存、进程、CPU活动进行监控
    vmstat 1 5:每1秒采集一次服务器状态,采集5次

    

    分析:

        1)vmstat+top
        2)当cpu占比比较高,同时看到us比较高,往进程方向想
        3)swap数据,不一定mem有问题,还要结合free,buff,cache
        4)单独的数据,无法判断,进行长时间监控,时间拉长
        5)内存问题导致bo,IO问题,导致cpu

    场景:

        1)应用进程占用导致cpu占比高
        2)内存不够导致cpu占比高
        3)大量读造成cpu占比高

6、中断和中断打散

    

    案列:由下图中看出,几秒只能增加了93(6428-6335)个中断

   

    当出现很多中断都在一个cpu时,就需要中断打散,如:echo 2 > /proc/irq/90/smp_affinity

   

    

7、上下文切换

    1)进程调度

        背景:多任务,多进程处理的操作系统
        cpu时间分片:
            a)cpu时间片,用完就被挂起,轮流分配,切换
            b)与进程优先级有关,挂起,切换
            c) 进程进入睡眠状态,挂起,切换
            d)等待资源,资源不足,挂起,切换

    2)上下文切换

        a)什么是上下文切换?
            上下文:存储cpu正在执行的位置,下一条指令位置(寄存器,程序计数器)
            上下文切换:保存上一个任务进度的上下文到内核,加载新任务进程的上下文,且运行心任务,再次调度上一个任务,看 起来连续运行
        b)上下文切换与性能的关系?
            切换次数多,cpu时间花费在保存上下文上面
        c)上下文切换次数多少算高?
            ①cup性能
            ②系统上下文切换次数趋势稳定,就没有问题
            ③出现突然增长,或者超过1万次以上,就要分析
            ④上下文切换次数多:  A)就是进程在等待资源,进一步监控内存,I/O
                                                B)cpu本身的瓶颈
                                                C)同时中断次数多,去分析中断处理程序,查看/proc/interrupts,cpu的分布,进一步分析中断的原因

 

8、内存

    内存相关概率(虚拟内存,物理内存,buffer,cache,swap,映射)

    

  内存占用使用如下公式(注意,基于centos7):(mem.used+swap.used)/mem.total+swap.total


    清除缓存:

    

 

    

    虚拟内存详解:https://blog.csdn.net/qq_38410730/article/details/81036768

 

 

   

            

 

    

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章