首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于睡眠时间超过2小时且CPU使用率大于90%的进程,请查找PID。

对于睡眠时间超过2小时且CPU使用率大于90%的进程,请查找PID。
EN

Unix & Linux用户
提问于 2022-08-18 04:24:05
回答 1查看 641关注 0票数 0

我有一台有8核心CPU的机器,但是每天所有的CPU核心都会被休眠的进程阻塞,并且需要手动杀死来恢复CPU。

我想要自动化的过程是

  • 睡了两个多小时
  • CPU使用率大于90%

我怎样才能找到这些过程的PID并杀死它们呢?

来自htop的输出,该输出显示处于休眠状态并阻塞CPU内核的进程具有PID: 134425。

注意:

这给出了所有休眠进程的PID,但没有考虑CPU的使用

awk '/sleeping/{ $0=FILENAME; gsub(/[^0-9]/, ""); print $0 }' /proc/[0-9]*/status

EN

回答 1

Unix & Linux用户

发布于 2022-08-18 16:25:01

最好是找出进程失控的根本原因,但要找到状态S中的任何进程,但使用一定数量的CPU,则可以使用以下方式的脚本:

代码语言:javascript
复制
#!/usr/bin/env bash
ps ahxo pid,state,%cpu |\
while read pid state cpu; do
   if [[ "$state" = S ]]; then
      if [[ "${cpu%%.*}" -gt 90 ]]; then
         echo "woe betide pid $pid"
      fi
   fi
done

使用kill而不是echo,一旦您确信脚本不会破坏您的系统。通过限制基于command字段的匹配,或者首先使用pgrep命令过滤适当的PID,可以减少这种情况的危险性。考虑到ps是人性化的,很难从time输出中捕获“超过2小时”;如果在进程名中出现空白,则从/proc/$pid/stat 可能会很危险解析该信息。或者,监视脚本可以变得更加复杂,并维护一个状态计数器,使其能够在需要的条件下多次看到PID。也许看上面的脚本是否有效,首先,在进行更复杂的“2小时以上”检查之前?

另一种方法可能是拥有一个对服务进行定期请求的监视系统,并在请求开始超时或花费太长时间时重新启动服务。但是这样的创可贴并不是一个很好的长期解决方案,有时需要用扫帚来解决。

如果服务有某种类型的日志文件指示故障,那么这可能是另一种自动检测故障并“再次关闭并重新打开”的方法。

当然,如果重新启动自动化杀死了错误的进程,或者在不应该终止的情况下杀死了流程,那么这种重新启动自动化可能会发生严重的错误;这可能被用作查找和修复问题的理由,或者在管理不愿意花费必要的资源来解决问题的情况下退出软件。我做过*/5 * * * * /reboot-service crontab作业,因为管理人员不允许修复的东西泄漏了那么多内存.哦,是的,您可能想在某个地方记录自动重新启动脚本,在进行更新时禁用它,等等。更多的工作。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/713991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档