Linux系统小技巧(2):利用ps工具统计CPU/MEM消耗高或者负载高的进程

简介: 如果通过ps列出CPU消耗高或者内存消耗高的线程,如何统计线程消耗的总的CPU或者内存,请看此短文。

CPU消耗高往往是系统异常的一种表现。因为平常检查系统运行有哪些进程,都是使用ps工具。因此,出现这种情况时,如果能够通过ps工具搜寻出CPU消耗高的线程,则对进一步搜寻线索或者排查应该有帮助。

下面我们讨论两个相关的小技巧。

首先,我们得了解一下进程的概念。我们都很熟悉进程了,那么,线程是什么呢?引用Andrew S. Tanenbaum的话,就是

进程认为自己独占一台主机;线程认为自己独占一颗CPU。

所以,一个进程可能包含多个线程。但是考察CPU消耗问题,只考虑进程而不考虑线程是不够的。就是说,我们总是得给ps命令加上“-T”选项。

为了便于按照CPU消耗的情况排序,我们也通过“-o”定制ps输出的字段,以确保CPU消耗占比字段是第一个字段,这样便于排序。

列出消耗高的线程

命令如下

LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | grep -v CPU | sort -n -r | head -20

效果如下
_2017_07_17_16_14_48

统计线程消耗的总的CPU

命令如下

{ LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | sed -e 's/^ *//' | tr -s ' ' | grep -v CPU | sort -n -r | cut -d ' ' -f 1 | xargs -I{} echo -n "{} + " && echo ' 0'; } | bc -l

效果如下
_2017_07_17_16_15_16

应用

设想我们需要追踪CPU占用最好的线程,则可以这样

export LANG=C;d=$(mktemp -d) && cd $d # 建并进入临时目录
# 捕捉之
strace -f -ff -s 256 -tt -T -o strace.log -p $(ps -eT -o%cpu,pid,tid,ppid,comm | grep -v CPU | sort -n -r | head -1 | sed -e 's/^ *//' | tr -s ' '  | cut -d ' ' -f 3)

内存

线程是共享内存空间的。所以,一般情况下,没有必要使用“-T”选项。

列出内存消耗高的进程

LANG=C ps -e -o%mem,pid,tid,ppid,comm | grep -v MEM | sort -n -r | head -20

统计内存消耗情况

{ LANG=C ps -e -o%mem,pid,tid,ppid,comm | sed -e 's/^ *//' | tr -s ' ' | grep -v MEM | sort -n -r | cut -d ' ' -f 1 | xargs -I{} echo -n "{} + " && echo ' 0'; } | bc -l

列出导致CPU负载高的线程

LANG=C ps -eTo stat,pid,tid,ppid,comm,args | perl -ne 'chomp;if (m!^\s*(\S*[RD]+\S*.*)!) {print qq[$1\n];}'
相关文章
|
6天前
|
网络协议 前端开发 调度
schedule:原来还可以这样让进程让出 CPU?
文章主要讲述通过模拟时钟中断和调度事件来优化和测试虚拟机监控器(VMM)的方法,包括流程设计、寄存器状态的保存与恢复、硬件中断处理规范等细节。
schedule:原来还可以这样让进程让出 CPU?
|
2天前
|
存储 缓存 Linux
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
29 8
|
1月前
|
监控 安全 Ubuntu
Linux下如何安装配置Fail2ban防护工具
通过以上步骤,可以在Linux系统中成功安装和配置Fail2ban,从而有效保护服务器免受暴力破解等攻击。Fail2ban通过实时监控日志文件,自动更新防火墙规则,为系统安全提供了一层重要的保护。
132 36
|
2月前
|
Rust Ubuntu Java
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
62 20
[Linux工具] Makefile
|
22天前
|
Linux API
Linux下载工具wget与curl
`wget` 是一个用于从网络下载文件的命令行工具,支持HTTP、HTTPS和FTP协议。它能自动处理下载中断,并支持递归下载网站内容。基本用法:`wget URL`,可指定文件名(`-O`)、保存目录(`-P`),还支持断点续传(`-c`)、限速(`--limit-rate`)和递归下载(`-r`)。相比之下,`curl` 更侧重于发送各种HTTP请求(如GET、POST),并支持文件上传、自定义请求头和cookie等功能。
56 10
|
19天前
|
存储 Ubuntu 前端开发
Linux软件包管理工具概览
在Linux系统中,dpkg、apt、rpm、yum和dnf是几种常见的包管理工具,它们分别属于不同的Linux发行版或家族,并有着各自的诞生顺序和特点。下面将按照这些工具的诞生顺序,并结合Debian、Red Hat、CentOS、Ubuntu和Kali等系统,进行详细的介绍。
24 4
|
2月前
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
149 28
|
2月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
162 23
|
2月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
54 11
|
10月前
|
Linux
百度搜索:蓝易云【Linux系统ps命令:查看正在运行的进程】
通过这些简洁的ps命令用法,你可以方便地查看Linux系统中正在运行的进程信息。
107 1