Linux系统运行时参数命令(性能监控、测试)(1)监控工具、CPU上下文切换、CPU性能监控 |
您所在的位置:网站首页 › 实时监控日志命令 › Linux系统运行时参数命令(性能监控、测试)(1)监控工具、CPU上下文切换、CPU性能监控 |
目录
1. 监控工具2. CPU性能监控2.1 平均负载和CPU使用率2.1.1 平均负载基础2.1.2 使用uptime命令分析平均负载2.1.3 平均负荷和CPU使用率
2.2 CPU上下文切换2.2.1 什么是CPU上下文切换2.2.2 有哪些上下文切换2.2.3 怎么查看上下文切换
vmstat2.3 遇到CPU使用率高该如何排查
主要分为四大块:CPU,内存,磁盘,网络
1. 监控工具
freepingvmstat(VirtualMemoryStatistics)虚拟内存统计,是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。iostat 用于报告中央处理器(CPU)的统计信息和整个系统、适配器、tty设备、磁盘和CD-ROM的输入/输出统计信息dstat 显示了cpu的使用情况,磁盘io情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于vmstat和iostat的输入更加详细且较为直观pidstat 主要用于监控全部或指定进程占用系统资源的情况,如CPU、内存、设备IO、任务切换、线程等top 汇总区域显示了五个方面的系统信息性能:
负载:时间,登录用户数,系统平均负载进程状态:运行(R),睡眠(S),停止(T),僵尸(Z)cpu使用率:用户态,内核态,NICE,空闲,等待IO,中断等内存使用:总量,已用,空闲(系统角度),缓冲区,缓存交换分区:总量,已用,空闲
iotop Linux进程实时监控工具,界面风格类似top命令htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncursesmpstat Report process related statistics. 报告CPU的统计信息netstat 用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况
netstat -npl可以查看你要打开的端口是否已经打开netstat -rn打印路由表信息netstat -in提供系统上的接口信息,打印每个接口的MTU,输入分组数,输入错误,输出分组数,输出错误,冲突以及当前的输出队列的长度
ps 显示当前进程的状态strace Trace system call and signals。跟踪程序执行过程中产生的系统调用及收到的信号,帮助分析程序或命令执行中遇到的异常情况ltrace A library call tracer 跟踪进程调用库函数的情况uptime 能够打印系统总共运行了多长时间和系统的平均负载,uptime命令最后输出的三个数字的含义分别是1分钟,5分钟,15分钟内系统的平均负荷lsof (list open file)是一个列出当前系统打开文件的工具perf 是Linux kernel自带的系统性能优化工具。优势在于与Linux kernel的紧密结合,它可以最先应用到加入kernel的new feature,用于查看热点函数,查看cache miss的比率,从而帮助开发者来优化程序性能tcpdump能够动态抓取正在进行的网络通讯sarblktrace
(1)Linux observability tools | Linux 性能观测工具 (2)Linux benchmarking tools | Linux 性能测评工具 (4)Linux observability sar | linux性能观测工具 sar的常归使用方式:sar [options] [-A] [-o file] t [n] 其中: t为采样间隔,n为采样次数,默认值是1; -o file表示将命令结果以二进制格式存放在文件中,file 是文件名,options 为命令行选项。 想要更深的了解可以点击 【性能测试】Linux性能监控命令——sar详解 2. CPU性能监控 2.1 平均负载和CPU使用率 2.1.1 平均负载基础平均负载是指单位时间内,系统处于可运行状态和不可中断状态的进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。 可运行状态的进程,是指正在使用CPU或者正在等待CPU的进程,也就是我们常用ps命令看到的,处在R状态(Running和Runable)的进程不可中断状态的进程是正处于内核态关键流程中的进程,并且这些进程是不可打断的,比如最常见的是等待硬件设备的I/O响应,也就是我们在ps命令中看到的D状态(Uninterruptible Sleep,也称为Disk Sleep)平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。 2.1.2 使用uptime命令分析平均负载查看机器的启动时间、登录用户、平均负载等情况,通常用于在线上应急 或者技术攻关中,确定操作系统的重启时间。 负载说明(针对单核情况,不是单核时则乘上核心数) load < 1:没有等待load == 1 :系统已无额外的资源跑更多的进程了load > 1 :进程需要等待资源而阻塞住了 注意 load < 0.7时:系统很闲,要考虑多部署一些服务0.7 < load < 1.0时:系统状态不错load == 1时:系统马上要处理不过来了,赶紧找一下原因load > 5时,系统已经非常繁忙了 不同load值说明的问题 1分钟load > 5,5分钟load < 3,15分钟load < 1 短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆1分钟load > 5,5分钟load > 3,15分钟load < 1 短期内繁忙,中长期紧张,很可能是一个拥塞的开始1分钟load > 5,5分钟load > 5,15分钟load > 5 短中长期都繁忙,系统正在拥塞1分钟load < 1,5分钟load > 3,15分钟load > 5 短期内空闲,中长期繁忙,不用紧张,系统拥塞正在好转举个例子,假设我们在一个单CPU单核的系统上看到平均负载为1.73(1分钟),0.60(5分钟),7.98(15分钟),那么说明在过去的1分钟内,系统有73%的超载;在15分钟内,有698%的超载,从整体趋势来看,系统的负载正在降低。 2.1.3 平均负荷和CPU使用率平均负载是指单位时间内,系统处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用CPU的进程,还包括等待CPU和等待I/O的进程。 CPU使用率,是单位时间内CPU繁忙情况的统计,跟平均负载并不一定会完全对应。比如: CPU密集型进程,进程大部分时间在使用CPU进行计算,此时这两者是一致的;I/O密集型进程,等待I/O也会导致平均负载升高,但CPU使用率不一定很高;大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也比较高。 2.2 CPU上下文切换 2.2.1 什么是CPU上下文切换所谓的上下文切换,就是把上一个任务的寄存器和计数器信息保存下来,然后加载新任务的寄存器和计数器信息,最后跳转到新任务的位置开始执行新任务。 根据任务的不同,CPU的上下文切换就可以分为几个不同的场景:进程上下文切换、线程上下文切换、中断上下文切换。 2.2.2 有哪些上下文切换 系统调用上下文切换 linux进程既可以在用户空间运行,又可以在内核空间运行当它在用户空间运行时,被称为进程的用户态;当它进入内核空间运行时,被称为进程的内核态。用户使用系统调用时,会发生从用户态到内核态的转变CPU寄存器里原本存储的是用户态的指令。但是为了执行内核代码,需要先把用户态指令的执行位置保存起来,然后寄存器更新为内核态指令的新位置。最后跳转到内核态执行内核任务。当系统调用结束后,CPU寄存器需要恢复原来保存的用户态位置,然后再切换到用户空间,继续执行下面的指令。因此,一次系统掉用产生了两次的CPU上下文切换系统调用过程中对用户态的资源没有任何影响,也不会切换进程,所以也成为特权模式切换 进程上下文切换 进程是由内核来管理和调度的,所以进程的切换只发生在内核态。进程的上下文不仅包括了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态信息。进程的上下文切换在保存当前进程的内核状态和CPU寄存器之前,需要先把该进程的虚拟内存、栈等保存下来。而加载了下一进程的内核态后再刷新进程的虚拟内存映射关系和用户栈,刷新虚拟内存映射就涉及到TLB快表(虚拟地址缓存),因此会影响内存的访问速度单次进程上下文的CPU切换时间在几十纳秒到数微秒之间。特别是在进程上下文切换次数较多的情况下,很容易导致CPU将大量时间耗费在寄存器、内核栈以及虚拟内存等资源的保存和恢复上,进而影响CPU的实际使用效率。进程上下文切换的原因: 其一,为了保证所有进程可以得到公平的调度,CPU时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程。这样,当某个进程的时间片耗尽了,就会被系统挂起,切换到其他就绪的进程运行。(被动切换)其二,进程在系统资源不足的时候,也会被挂起,并由系统调度其他进程继续运行。(主动切换)其三,当进程通过睡眠函数sleep这样的方式将自己主动挂起时,也会重新调度其他的进程继续运行。其四,当有优先级更高的进程需要运行时,为了保证高优先级进程先执行,当前进程会被挂起,由高优先级进程先运行。其五,当发生硬件中断时,CPU上的进程会被中断挂起,转而执行内核中的中断服务程序。 线程上下文切换 线程与进程的区别在于:线程是调度的基本单位,而进程是系统分配资源的基本单位。内核中的任务调度,实际调度的是线程(执行流);而进程只是给线程提供了虚拟地址空间、全局变量等资源。 当一个进程只有一个线程时,可以认为进程就等于线程当一个进程拥有多个线程时,共享虚拟地址空间和全局变量等资源。这些资源在同一进程内的线程切换时不需要修改,在不同进程的线程间进行切换时,因为资源不共享,所以切换过程和进程上下文切换是一样的线程也有自己的私有数据,比如线程私有栈和寄存器等,这些在切换时需要保存起来 中断上下文切换 为了快速响应硬件的事件,中断处理会打断进程的正常调度和执行,转而转向中断处理程序,响应设备事件。在中断结束后,进程通过保存的上下文信息和程序计数器,又可以恢复先前的执行状态。 跟进程的上下文不同,中断上下文并不涉及到用户态。中断上下文只包括内核态中中断服务程序执行所必需的状态,包括CPU寄存器、内核堆栈、硬件中断参数等。 2.2.3 怎么查看上下文切换 vmstat查询系统的上下文切换情况。此命令显示关于内核线程、虚拟内存、磁盘I/O和CPU占用率的统计信息 vmstat的常规用法:vmstat [interval] [times],每隔interval秒采样一次,共采样times次,如果省略times,则一直采集数据,直到用户手动停止(ctrl+c)为止。 第一行显示了系统自启动以来的平均值,第二行开始显示现在正在发生的情况,接下来的行会显示每5秒间隔发生了什么,每一列的含义在头部,如下所示: 遇到CPU使用率高时,首先确认CPU消耗是在哪一块,如果是内核态占用CPU较高: %iowait高,这是要重点关注磁盘IO的相关操作,是否存在不合理的写日志操作,数据库操作等;%soft或%cs高,观察CPU负载是否较高、网卡流量是否较大,可不可以精简数据、代码是否在多线程操作上存在不合理的中断等;%steal高,这种情况一般发生在虚拟机上,这时要查看宿主机是否资源超限;如果是用户态占用CPU较高,且没有达到预期的性能,说明应用程序需要优化。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |