经常会遇到服务器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简单看一下:
方法2 用ps -eo pid,pcpu | sort -n -k 2 (当然,可以tail一下)
如何确定高cpu消耗的线程:
方法1 用top -H
标红的部分就是高cpu消耗的线程信息。
方法2 用ps H -eo pid,tid,pcpu | sort -n -k 3
假如我知道高cpu消耗的进程号是多少了,查看它的线程信息的方法为:
方法 1: pstree -p pid
方法 2: 查看线程的详细信息:cat /proc/进程号/task/线程号/status
方法 3: 实时显示 top -H -p pid
方法 4: htop,通过htop查看单个进程的线程,然后按
面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按
方法 5: 查看该进程下所有的线程 ps -efL | grep pid