Top load average 高如何排查

原理?

Linux系统的负载平均值(Load Average)是一个统计指标,表示在特定时间段内系统活跌任务的平均数量。这些任务都处于运行状态(正在使用CPU)或者等待状态(等待CPU资源或等待磁盘I/O)。

Linux系统以三种方式计算负载均值:

  • 过去一分钟的负载平均值
  • 过去五分钟的负载平均值
  • 过去十五分钟的负载平均值

这些负载平均值可以通过 uptime, w, 或 top 等命令查看。

然而,具体的计算过程并不简单。它涉及到一个叫做Fixed-point arithmetic的算法,但大致上,我们可以将其解释为队列的模型。你可以将负载平均值看作等待服务的任务及正在运行的任务的数量。例如,如果你的负载平均值为1,那么表明系统的CPU始终保持忙碌状态;如果负载平均值超过1,意味着有一些任务需要等待CPU。

对于多核处理器来说,负载平均值应该与CPU核心数相比较。例如,在双核系统中,负载均值为2意味着您的系统正在100%利用所有可用的CPU资源。

注意:获取负载均值是观察系统性能的一种方式,但它并不能提供问题出在哪里的详细信息。例如,高负载可能是由CPU密集型进程导致,也可能是由于磁盘I/O、网络I/O或其他资源争用造成的。

排查步骤

当 Linux 系统的 CPU 平均负载很高时,可能是由于系统中的某些进程或服务正在消耗大量的 CPU 资源。以下是一些可能的排查步骤:

  1. 使用 top 命令查看 CPU 占用率:在终端中输入 top 命令,可以查看当前系统中占用 CPU 资源最多的进程和服务。按下 Shift + P 可以按 CPU 占用率排序。

  2. 使用 ps 命令查看进程:在终端中输入 ps -ef 命令,可以列出系统中正在运行的所有进程。可以根据进程 ID、进程名称等过滤出具体的进程信息。

  3. 使用 htop 命令查看进程:htop 命令是一个更加强大的进程监视器,可以通过终端安装。执行 htop 命令可以查看进程的详细信息,包括 CPU 占用率、内存使用情况等。

  4. 检查系统日志:在 /var/log 目录下,有许多系统日志文件,例如 /var/log/syslog/var/log/messages 等。可以查看这些日志文件,寻找与 CPU 占用率高相关的错误或警告信息。

  5. 使用 sar 命令查看系统资源使用情况:sar 命令是一个系统性能监视器,可以用于查看系统的 CPU、内存、网络等资源使用情况。执行 sar -u 命令可以查看 CPU 使用情况。

  6. 检查磁盘使用情况:当磁盘空间不足时,可能会导致系统 CPU 平均负载很高。可以使用 df -h 命令查看磁盘使用情况。

  7. 检查网络流量:当系统中有大量的网络流量时,可能会导致 CPU 平均负载很高。可以使用 iftop 命令查看网络流量情况。

以上是一些可能的排查步骤,可以帮助您找到系统中消耗 CPU 资源的进程或服务。根据具体情况,您可能需要采取不同的措施来解决问题,例如优化代码、增加硬件资源、调整系统配置等。

排查思路

load average

Top load average是指系统在过去1分钟、5分钟和15分钟内的平均负载情况。它是一个用于衡量系统负载的指标,表示在这个时间段内有多少个进程正在等待CPU资源。如果这个数字超过了CPU核心数,就表示系统的负载已经超过了其处理能力,可能会导致系统变慢或崩溃。因此,系统管理员经常使用top命令来监控系统的负载情况,以便及时调整系统配置或处理负载过高的进程。

lscpu

lscpu是一个Linux/Unix命令,用于显示系统的CPU架构信息,包括CPU型号、CPU架构、CPU核心数量、CPU频率、CPU缓存信息等等。lscpu的输出结果是可读性很强的,可以方便地了解系统的CPU信息。

常用的lscpu选项包括:

  • -a或–all:显示所有CPU信息;
  • -p或–parse:以逗号分隔的形式输出CPU信息;
  • -s或–sysroot:在指定的根目录下查找CPU信息;
  • -x或–hex:以16进制格式输出CPU信息;
  • -y或–physical:显示物理CPU信息。

例如,要查看系统的CPU信息,可以在终端中输入以下命令:

lscpu

该命令会输出系统的CPU架构信息,包括CPU型号、CPU架构、CPU核心数量、CPU频率、CPU缓存信息等等。

ps -ef

ps -ef命令可以列出系统中所有进程的详细信息,其中包括进程的状态。下面是各个进程状态的说明:

  • D:不可中断的睡眠状态,通常是在等待某些事件(如磁盘I/O)完成时进入的状态。
  • R:运行状态,表示进程正在执行或等待执行。
  • S:可中断的睡眠状态,通常是在等待某些事件(如网络I/O)完成时进入的状态。
  • T:暂停状态,表示进程被挂起,无法执行任何操作。
  • Z:僵尸状态,表示进程已经终止,但是其父进程尚未对其进行善后处理(如调用wait()函数)。
  • <:高优先级进程。
  • N:低优先级进程。
  • +:在前台运行的进程。
  • s:会话组长进程。
  • l:多线程进程。
  • Ss:会话组长进程,且进程已经被停止。
  • S<:高优先级进程,且进程已经被停止。
  • SN:低优先级进程,且进程已经被停止。
  • SZ:僵尸进程。
  • R+:在前台运行的高优先级进程。
  • R<:在前台运行的低优先级进程。

在ps -ef命令的输出中,进程状态通常位于第8列。例如,以下命令可以列出所有进程的详细信息,包括进程状态:

ps -ef

两者都是用于列出当前运行的进程信息的命令,但是在不同的操作系统中有不同的用法和输出格式。

在Linux系统中,ps命令有两种常见的输出格式:BSD和SYSV。其中,BSD格式的命令是ps aux,SYSV格式的命令是ps -ef。

ps aux输出格式中,a表示列出所有进程,u表示以用户为主要输出格式,x表示列出没有控制终端的进程。输出结果中包括进程ID、CPU占用率、内存占用率、启动时间、命令等信息。

ps -ef输出格式中,e表示列出所有进程,f表示以完整的格式输出进程信息。输出结果中包括进程的所有信息,包括父进程ID、会话ID、进程组ID、用户ID、CPU占用率、内存占用率、启动时间、命令等信息。

因此,两者的区别主要在于输出格式的不同,但都能够列出当前运行的进程信息。

egrep

grepegrep都是Linux系统中用于文本搜索的命令,它们的主要区别在于正则表达式的支持程度。

  • grep命令使用基本正则表达式(BRE),它支持一些基本的正则表达式元字符,如^$.*[]等,但不支持一些高级元字符,如+?|等。
  • egrep命令使用扩展正则表达式(ERE),它支持基本正则表达式中的所有元字符,同时还支持一些高级元字符,如+?|等。

因此,如果需要使用高级正则表达式元字符进行文本搜索,则应该使用egrep命令。如果只需要使用基本的正则表达式元字符,则可以使用grep命令。

iostat

iostat是一个用于监控系统磁盘I/O性能的命令行工具,可以显示每个磁盘设备的读写速度、I/O请求队列长度、CPU利用率等信息。iostat可以帮助用户了解磁盘I/O的瓶颈,以便进行系统调优。

使用iostat命令时,可以使用以下选项:

-i:显示磁盘I/O请求队列的长度和每秒钟的I/O请求次数;
-k:以KB/s为单位显示磁盘读写速度;
-m:以MB/s为单位显示磁盘读写速度;
-t:显示统计数据的时间间隔。

例如,要每秒钟显示一次磁盘I/O性能,可以在终端中输入以下命令:

iostat -k 1

该命令将以KB/s为单位显示磁盘读写速度,每秒钟更新一次数据。iostat的输出结果包含以下字段:

  • Device:磁盘设备名称;
  • tps:每秒钟的I/O请求次数;
  • kB_read/s:每秒钟读取的数据量(KB);
  • kB_wrtn/s:每秒钟写入的数据量(KB);
  • kB_dscd/s:每秒钟丢弃的数据量(KB);
  • %util:磁盘利用率。

这些信息可以帮助我们了解磁盘I/O的性能瓶颈,以便进行系统调优。

pidstat

pidstat是一个Linux性能监测工具,它可以用于监测进程的CPU使用率、内存使用率、I/O使用率等情况。pidstat可以显示每个进程的统计数据,也可以显示所有进程的总体统计数据。

pidstat的常用选项包括:

  • -u:显示CPU使用率。
  • -r:显示内存使用率。
  • -d:显示磁盘I/O使用率。
  • -p pid:指定要监测的进程ID。
  • -h:以易于理解的格式输出数据。

例如,使用以下命令可以显示进程ID为1234的进程的CPU和内存使用率:

pidstat -u -r -p 1234

使用以下命令可以显示所有进程的CPU和内存使用率:

pidstat -u -r

sar

sar是一个用于Linux系统性能监测的命令行工具,可以用于收集和显示各种系统资源的历史数据,包括CPU使用率、内存使用率、磁盘I/O、网络传输等。sar可以定期收集系统性能数据,以便后续分析和优化。

sar的常用选项包括:

  • -u:显示CPU使用率。
  • -r:显示内存使用率。
  • -d:显示磁盘I/O使用率。
  • -n:显示网络传输使用率。
  • -q:显示系统负载数据。
  • -p:显示进程活动数据。
  • -f file:指定sar数据文件进行分析。
  • -s start_time:指定开始时间。

例如,使用以下命令可以每隔5秒收集一次CPU使用率、内存使用率和磁盘I/O使用率数据:

sar -u -r -d 5

使用以下命令可以从sar数据文件中分析CPU使用率和内存使用率数据:

sar -f /var/log/sysstat/sa01 -u -r

sar命令还可以与其他工具结合使用,例如使用sar和gnuplot结合生成CPU使用率图表:

sar -u 1 10 | grep '^Average:' | gnuplot -e "set terminal png; set output 'cpu.png'; plot '-' using 3 with lines title 'CPU'"
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值