xml地图|网站地图|网站标签 [设为首页] [加入收藏]

软件专题

当前位置:美高梅游戏网站 > 软件专题 > linux查看占用的CPU内存资源最多

linux查看占用的CPU内存资源最多

来源:http://www.gd-chuangmei.com 作者:美高梅游戏网站 时间:2019-09-02 13:43

CentOS下找出占用CPU资源最多的线程

1.对这个进程中的所有线程作监视:top-ppid -H

2.找到最耗CPU的线程:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid

3.也可以用下面的命令将 cpu 占用率高的线程找出来:
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu

这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序。这样就可以找到占用处理器的线程了。

直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号,然后跳转到3.
查看哪个进程线程占用cpu过高; top / ps -aux, 获得进程号
确定哪个线程占用cpu过高,进入进程号的目录:/proc/pid/task,
执行:grep SleepAVG **/status | sort -k2,2 | head, 确定cpu占用较高的线程号。
使用kill -3 pid 会打印线程堆栈的情况

在 Linux 下 top 工具可以显示 cpu 的平均利用率(user,nice,system,idle,iowait,irq,softirq,etc.),可以显示每个 cpu 的利用率。但是无法显示每个线程的 cpu 利用率情况,这时就可能出现这种情况,总的 cpu 利用率中 user 或 system 很高,但是用进程的 cpu 占用率进行排序时,没有进程的 user 或 system 与之对应。

linux查看占用的CPU内存资源最多

proc文件系统

/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

/proc目录中有一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,它们是读取进程信息的接口。此外,在Linux2.6.0-test6以上的版本中/proc/pid目录中有一个task目录,/proc/pid/task目录中也有一些以该进程所拥有的线程的线程号命名的目录/proc/pid/task/tid,它们是读取线程信息的接口。

 

/proc/cpuinfo文件

该文件中存放了有关 cpu的相关信息(型号,缓存大小等)。

[[email protected] ~]$ cat /proc/cpuinfo

processor : 0

vendor_id : GenuineIntel

cpu family : 15

model : 4

model name : Intel(R)Xeon(TM) CPU 3.00GHz

stepping : 10

cpu MHz : 3001.177

cache size : 2048 KB

physical id : 0

siblings : 2

core id : 0

cpu cores : 1

fdiv_bug : no

hlt_bug : no

f00f_bug : no

coma_bug : no

fpu : yes

fpu_exception : yes

cpuid level : 5

wp : yes

flags : fpu vme de psetsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsrsse sse2 ss ht tm pbe lm pni monitor ds_cpl cid xtpr

bogomips : 6004.52

说明:以下只解释对我们计算Cpu使用率有用的相关参数。

参数 解释

processor (0) cpu的一个物理标识

结论1:可以通过该文件根据processor出现的次数统计cpu的逻辑个数(包括多核、超线程)。

linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: 

/proc/stat文件

该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致,以下通过实例来说明数据该文件中各字段的含义。

实例数据:2.6.24-24版本上的

[email protected]:~$cat /proc/stat

cpu 38082 627 27594 89390812256 581 895 0 0

cpu022880 472 16855 430287 10617 576 661 0 0

cpu115202 154 10739 463620 1639 4 234 0 0

intr120053 222 2686 0 1 1 0 5 0 3 0 0 0 47302 0 0 34194 29775 0 5019 845 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ctxt1434984

btime1252028243

processes8113

procs_running1

procs_blocked0

第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:

参数 解析(单位:jiffies)

(jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间)

user(38082) 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。

nice(627) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间

system(27594) 从系统启动开始累计到当前时刻,处于核心态的运行时间

idle(893908) 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait(12256) 从系统启动开始累计到当前时刻,IO等待时间(since 2.5.41)

irq(581) 从系统启动开始累计到当前时刻,硬中断时间(since 2.6.0-test4)

softirq(895) 从系统启动开始累计到当前时刻,软中断时间(since2.6.0-test4)stealstolen(0) which is the time spent in otheroperating systems when running in a virtualized environment(since 2.6.11)

guest(0) whichis the time spent running a virtualCPU for guest operating systems under the control ofthe Linux kernel(since 2.6.24)

结论2:总的cpu时间totalCpuTime = user + nice+ system + idle + iowait + irq + softirq + stealstolen+ guest

 

/proc/<pid>/stat文件

该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计

到当前时刻。以下通过实例数据来说明该文件中各字段的含义。

[[email protected] ~]# cat/proc/6873/stat

6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 05882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 00 0 0 17 0 0 0

说明:以下只解释对我们计算Cpu使用率有用相关参数

参数 解释

pid=6873 进程号

utime=1587 该任务在用户态运行的时间,单位为jiffies

stime=41958 该任务在核心态运行的时间,单位为jiffies

cutime=0 所有已死线程在用户态运行的时间,单位为jiffies

cstime=0 所有已死在核心态运行的时间,单位为jiffies

结论3:进程的总Cpu时间processCpuTime = utime +stime + cutime + cstime,该值包括其所有线程的cpu时间。

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

/proc/<pid>/task/<tid>/stat文件

该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义同/proc/<pid>/stat文件。

注意,该文件中的tid字段表示的不再是进程号,而是linux中的轻量级进程(lwp),即我们通常所说的线程。

结论4:线程Cpu时间threadCpuTime = utime +stime

 

系统中有关进程cpu使用率的常用命令

linux下获取占用内存资源最多的10个进程,可以使用如下命令组合: 

ps 命令

通过ps命令可以查看系统中相关进程的Cpu使用率的信息。以下在linux man文档中对ps命令输出中有关cpu使用率的解释:

CPU usage is currentlyexpressed as the percentage of time spent running during the entire lifetime ofa process. This is not ideal, and it does not conform to the standards that psotherwise conforms to. CPU usage is unlikely to add up to exactly 100%.

%cpu cpu utilization of the process in"##.#" format. It is the CPU time used divided by the timethe process has been running (cputime/realtime ratio), expressed as apercentage. It will not add up to 100% unless you are lucky.

结论5:ps命令算出来的cpu使用率相对于进程启动时的平均值,随着进程运行时间的增大,该值会趋向于平缓。

 

top命令

通过top命令可以查看系统中相关进程的实时信息(cpu使用率等)。以下是man文档中对top命令输出中有关进程cpu使用率的解释。

#C --Last used CPU (SMP) Anumber representing the last used processor. In a true SMPenvironment this willlikely change frequently sincethe kernel intentionally usesweak affinity. Also, the very act ofrunning top may break this weak affinity and cause more processes to changeCPUs more often (because of the extra demand for cputime).

%CPU -- CPUusage The task’s share ofthe elapsed CPU time since the last screen update, expressed as a percent-ageof total CPU time. In a true SMP environment, if Irix mode is Off, top will operate in Solaris modewhere a task’s cpu usage will be divided by the total number of CPUs.

结论6:某一个线程在其运行期间其所使用的cpu可能会发生变化。

结论7:在多核的情况下top命令输出的cpu使用率实质是按cpu个数*100%计算的。

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

单核情况下Cpu使用率的计算

 

基本思想

通过读取/proc/stat 、/proc/<pid>/stat、/proc/<pid>/task/<tid>/stat以及/proc/cpuinfo这几个文件获取总的Cpu时间、进程的Cpu时间、线程的Cpu时间以及Cpu的个数的信息,然后通过一定的算法进行计算(采样两个足够短的时间间隔的Cpu快照与进程快照来计算进程的Cpu使用率)。

命令组合解析(针对CPU的,MEN也同样道理): 

总的Cpu使用率计算

 

计算方法:

1、 采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:

(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

2、 计算总的Cpu时间片totalCpuTime

a)把第一次的所有cpu使用情况求和,得到s1;

b)把第二次的所有cpu使用情况求和,得到s2;

c)s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;

3、计算空闲时间idle

idle对应第四列的数据,用第二次的第四列- 第一次的第四列即可

idle=第二次的第四列- 第一次的第四列

6、计算cpu使用率

pcpu =100* (total-idle)/total

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

某一进程Cpu使用率的计算

 

计算方法:

1.采样两个足够短的时间间隔的cpu快照与进程快照,

a)每一个cpu快照均为(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

b)每一个进程快照均为(utime、stime、cutime、cstime)的4元组;

2.分别根据结论2、结论3计算出两个时刻的总的cpu时间与进程的cpu时间,分别记作:totalCpuTime1、totalCpuTime2、processCpuTime1、processCpuTime2

3.计算该进程的cpu使用率pcpu = 100*(processCpuTime2 – processCpuTime1) / (totalCpuTime2 – totalCpuTime1) (按100%计算,如果是多核情况下还需乘以cpu的个数);

该命令组合实际上是下面两句命令: 

本文由美高梅游戏网站发布于软件专题,转载请注明出处:linux查看占用的CPU内存资源最多

关键词:

上一篇:你值得拥有:25 个 Linux 性能监控工具(1)

下一篇:没有了