AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 387268
Accepted
pmoubed
pmoubed
Asked: 2012-05-09 13:17:27 +0800 CST2012-05-09 13:17:27 +0800 CST 2012-05-09 13:17:27 +0800 CST

Linux CPU 使用率和进程执行历史

  • 772

有什么方法可以查看哪个进程导致了最多的 CPU 使用率?

我有 AMAZON EC2 Linux,CPU 使用率达到 100%,让我重新启动系统。我什至无法通过 SSH 登录(使用 putty)。

有什么方法可以查看是什么原因导致如此高的 CPU 使用率以及是哪个进程导致的?

我知道sar并top命令,但我无法在任何地方找到流程执行历史记录。这是来自 Amazon EC2 监控工具的图像,但我想知道是哪个进程导致的:

在此处输入图像描述

我也试过ps -eo pcpu,args | sort -k 1 -r | head -100但没有找到如此高的 CPU 使用率。

linux cpu-usage
  • 4 4 个回答
  • 122140 Views

4 个回答

  • Voted
  1. Best Answer
    Matthew Ife
    2012-05-09T14:14:20+08:002012-05-09T14:14:20+08:00

    有几种可能的方法可以做到这一点。请注意,在失控的情况下,它完全有可能是许多进程导致的,而不仅仅是一个。

    第一种方法是将 pidstat 设置为在后台运行并生成数据。

    pidstat -u 600 >/var/log/pidstats.log & disown $!
    

    这将使您每隔十分钟就可以非常详细地了解系统的运行情况。我建议这是您的第一个停靠港,因为它会产生最有价值/最可靠的数据供使用。

    这有一个问题,主要是如果盒子进入失控的 cpu 循环并产生巨大的负载——你不能保证你的实际进程会在负载期间及时执行(如果有的话)所以你实际上可能会错过输出!

    查找此问题的第二种方法是启用进程记帐。可能更多的是一个长期的选择。

    accton on
    

    这将启用进程记帐(如果尚未添加)。如果它之前没有运行,这将需要时间来运行。

    已经运行了,比如 24 小时 - 然后你可以运行这样的命令(它会产生这样的输出)

    # sa --percentages --separate-times
         108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
           2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
           2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
           7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
           4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
          26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
          14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
          14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
          14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
           7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    
    

    这些列的顺序如下:

    1. 通话次数
    2. 通话百分比
    3. 花在这种类型的所有进程上的实际时间量。
    4. 百分比。
    5. 用户 CPU 时间
    6. 百分比
    7. 系统 CPU 时间。
    8. 平均 IO 调用。
    9. 百分比
    10. 命令名称

    您要查找的是生成最多用户/系统 CPU 时间的进程类型。

    这将数据分解为 CPU 时间总量(第一行),然后是 CPU 时间是如何划分的。进程记帐只有在进程产生时才正确记帐,因此最好在启用系统后重新启动系统以确保所有服务都被记帐。

    这绝不会让您确切地知道导致此问题的过程可能是什么,但可能会给您带来良好的感觉。由于它可能是 24 小时的快照,因此可能会出现偏差结果,因此请记住这一点。它还应该始终记录,因为它是内核功能,并且与 pidstat 不同,即使在重负载期间也会始终产生输出。

    最后一个可用选项也使用进程记帐,因此您可以像上面那样打开它,然后使用程序“lastcomm”生成一些在问题发生时执行的进程的统计数据以及每个进程的 cpu 统计数据。

    lastcomm | grep "May  8 22:[01234]"
    kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
    sleep                  root     __         0.00 secs Tue May  8 22:49
    sa                     root     pts/0      0.00 secs Tue May  8 22:49
    sa                     root     pts/0      0.00 secs Tue May  8 22:49
    sa                   X root     pts/0      0.00 secs Tue May  8 22:49
    ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
    awk                    root     __         0.00 secs Tue May  8 22:49
    

    这也可能会给您一些提示,说明可能导致问题的原因。

    • 42
  2. Jeff Ferland
    2012-05-09T16:11:05+08:002012-05-09T16:11:05+08:00

    Atop是一个特别方便的守护进程,用于查看向下钻取到流程级别,并默认将此数据存档 28 天。除了提供一个很棒的实时监控界面外,您还可以指定要打开的日志文件并逐步查看它们。

    这篇文章给出了一些功能的概念,您可以在联机帮助页中找到更多信息。

    这确实是一款很棒的软件。

    • 24
  3. Janne Pikkarainen
    2012-05-09T22:05:04+08:002012-05-09T22:05:04+08:00

    psmon和monit等程序可能对您有所帮助。这些可以监控系统上运行的进程,如果超过任何阈值(CPU 使用率、内存使用率...),您可以设置它们向您发送有关正在发生的事情的电子邮件报告。

    也可以自动重启行为不当的进程。

    • 4
  4. rackandboneman
    2012-05-09T14:53:54+08:002012-05-09T14:53:54+08:00

    一种解决方案是编写一个脚本,通过一分钟的 cron 或在睡眠循环中运行,并向您发送电子邮件/scp 作业/转储到 ebs 卷......具有相关输出(dmesg,pstree -pa 和 ps aux,可能vmstat) 它发现负载平均值超过某个限制的那一刻...

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve