排查linux里高cpu占用率的进程和线程

经常会遇到服务器cpu或者内存100%的情况 或者很高占用率的情况。

一个程序,完成它预设的功能,并不能说明它是一个优良的程序。好的程序,应该是对资源的合理利用,亦或是用更少的资源(使用合理的算法),实现更多有效的产出。

影响程序的资源一般而言分为4个:CPU、内存、IO、网络。下面就是排查方法:

有两种方法

一,用cpustat来监控,需要安装

https://github.com/uber-common/cpustat

cpustat 是 Linux 下一个强大的系统性能测量程序,它用 Go 编程语言 编写。它通过使用 “用于分析任意系统的性能的方法(USE)”,以有效的方式显示 CPU 利用率和饱和度。

它高频率对系统中运行的每个进程进行取样,然后以较低的频率汇总这些样本。例如,它能够每 200ms 测量一次每个进程,然后每 5 秒汇总这些样本,包括某些度量的最小/平均/最大值(min/avg/max)。

 

二,用自带的top命令来分析

 

如何确定高cpu消耗的进程:
方法1 用top简单看一下:

1507690431-8855-
标红的部分,很明显能发现较高的cpu占用情况。

方法2 用ps -eo pid,pcpu | sort -n -k 2 (当然,可以tail一下)

1507690431-4175-

 

如何确定高cpu消耗的线程:
方法1 用top -H

1507690431-3919-

标红的部分就是高cpu消耗的线程信息。
方法2 用ps H -eo pid,tid,pcpu | sort -n -k 3

1507690431-3533-

假如我知道高cpu消耗的进程号是多少了,查看它的线程信息的方法为:
方法 1: pstree -p pid

1507690432-6504-

方法 2: 查看线程的详细信息:cat /proc/进程号/task/线程号/status

1507690432-3276-

方法 3: 实时显示 top -H -p pid

1507690432-9336-

方法 4: htop,通过htop查看单个进程的线程,然后按来进入htop的设置菜单。选择“设置”栏下

面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按退出设置。

1507690432-8841-

1507690432-1802-

方法 5: 查看该进程下所有的线程 ps -efL | grep pid

1507690432-9288-

 

坚持原创技术分享,您的支持将鼓励我继续创作!