linux中怎么获取cpu的linuxcpu占用率率

今天登陆同事的一台gateway 开始以为hive环境登陆不了了,仔细一看看了下是因为机器很卡,我每次等几秒没登陆就ctrl+c了,看了下是有个java进程cpu:340.4%& mem:14.6%
一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用
1. 通过top命令找到可疑进程PID
top 一下
可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138
2. 找出消耗资源最高的线程
top -H -p& 29580& 可以不用第一步,直接执行命令 top -H ,就可以查看到消耗资源最高的线程
top - 20:42:01 up 633 days,& 9:30,& 9 users,& load average: 6.75, 8.32, 15.86
Tasks:& 28 total,&& 2 running,& 26 sleeping,&& 0 stopped,&& 0 zombie
Cpu(s): 42.4%us,& 4.3%sy,& 0.0%ni, 53.1%id,& 0.0%wa,& 0.0%hi,& 0.1%si,& 0.1%st
Mem:&& 7680000k total,& 5774940k used,& 1905060k free,&& 400792k buffers
Swap:& 2096472k total,&& 876580k used,& 1219892k free,& 1727652k cached
& PID USER&&&&& PR& NI& VIRT& RES& SHR S %CPU %MEM&&& TIME+& COMMAND&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
29679 baishou&& 16&& 0 g& 18m R 72.0 15.3 115:41.08 java&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
29678 baishou&& 15&& 0 g& 18m R 63.3 15.3 118:44.99 java&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
29673 baishou&& 15&& 0 g& 18m S& 1.0 15.3&& 0:59.72 java&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
29677 baishou&& 15&& 0 g& 18m S& 1.0 15.3&& 1:01.34 java&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3. 查看这个线程所有系统调用
strace -p 29679
read(114, "\0\225\0\0\6\0\0\0\0\0\10\0\0\4\3\0\0\0p\365\1_\0\0\0\0\0\0\0\0\0\4"..., 2064) = 149
write(114, "\7\333\0\0\6\0\0\0\0\0\3\201r\4\0\0\0\0\0\0\0 B\25\274\252*\0\0\275.\0"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0Adddddc\2\301!\4\302dQQ\3\300R\37\3\300c"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\\6\1JdK\ttb0\1\200"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\\6\1K6\27\ttb0\1\200"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0&\0|0\6\305\6\1L\23\20\ttb"..., 2011) = 2011
write(114, "\7\333\0\0\6\0\0\0\0\0\\1\200\2\301)\1\200\2\301\2\1\200\1\200\1\200\1\200"..., 2011) = 2011
write(114, "\0\34\0\0\6\0\0\0\0\0\200\1\200\1\200\1\200\n\300\31\20F\10\27#\23\23)", 28) = 28
read(114, "\0\225\0\0\6\0\0\0\0\0\10\0\0\4\3\0\0\0q\365\1_\0\0\0\0\0\0\0\0\0\4"..., 2064) = 149
write(114, "\7\333\0\0\6\0\0\0\0\0\3\201s\4\0\0\0\0\0\0\0 B\25\274\252*\0\0\311.\0"..., 2011) = 2011
发现有大量写操作,应该是由datax任务在跑。
+++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++如果是web应用,可以继续打印线程的堆栈信息+++++++++
将需要的线程ID转换为16进制格式:
printf "%x\n" 29679
73ef
最后打印线程的堆栈信息:
jstack 29679|grep 73ef -A 30
参考:http://blog.csdn.net/delphiwcdj/article/details/7387325
浏览: 163013 次
来自: 杭州
String[] tools = StringUtils. ...
请问这种情况下python脚本里面怎么打counter呢?通常 ...
print '\t'.join([foo, strmap])+ ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'posts - 1,&
comments - 20,&
trackbacks - 0
Linux平台Cpu使用率的计算
proc文件系统
/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
/proc目录中有一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程在/proc下都对应一个以进程号为目录名的目录/proc/pid,它们是读取进程信息的接口。此外,在Linux
2.6.0-test6以上的版本中/proc/pid目录中有一个task目录,/proc/pid/task目录中也有一些以该进程所拥有的线程的线程号命名的目录/proc/pid/task/tid,它们是读取线程信息的接口。
/proc/cpuinfo文件
&&&&&&&& 该文件中存放了有关 cpu的相关信息(型号,缓存大小等)。
[zhengangen@buick ~]$ 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&&&&&&&& :
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 pse
tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr
sse sse2 ss ht tm pbe lm pni monitor ds_cpl cid xtpr
bogomips&&&&&&& : 6004.52
说明:以下只解释对我们计算Cpu使用率有用的相关参数。
&&&&&&&& 参数&&&&&&&&&&&&&&&&&&&&&&&&&&& 解释
processor (0)&&&&&&&&&&&&&&&&&&&&&& cpu的一个物理标识
结论1:可以通过该文件根据processor出现的次数统计cpu的逻辑个数(包括多核、超线程)。
/proc/stat文件
&&&&&&&& 该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。不同内核版本中该文件的格式可能不大一致,以下通过实例来说明数据该文件中各字段的含义。
实例数据:2.6.24-24版本上的
fjzag@fjzag-desktop:~$
cat /proc/stat
cpu& 594 893908
855 17 576 661 0 0
739 9 4 234 0 0
1 0 5 0 3 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 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 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 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 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 0 0 0 0 0 0 0 0 0 0 0 0
procs_running
procs_blocked
第一行的数值表示的是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)& &&& 从系统启动开始累计到当前时刻,软中断时间(since
2.6.0-test4)stealstolen(0) &&&&&&&& &&&&&&&& which is the time spent in other
operating systems when running in a virtualized environment(since 2.6.11)
guest(0)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& which
is the time spent running a virtual&
CPU& for& guest operating systems under the control of
the Linux kernel(since 2.6.24)
结论2:总的cpu时间totalCpuTime = user + nice
+ system + idle + iowait + irq + softirq + stealstolen
/proc/&pid&/stat文件&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计
到当前时刻。以下通过实例数据来说明该文件中各字段的含义。
[zhengangen@buick ~]# cat
/proc/6873/stat
6873 (a.out) R 23
0 0 0 41958 31 0 0 25 0 3 0
0 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时间。
/proc/&pid&/task/&tid&/stat文件
该文件包含了某一进程所有的活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义同/proc/&pid&/stat文件。
&&&&&&&& 注意,该文件中的tid字段表示的不再是进程号,而是linux中的轻量级进程(lwp),即我们通常所说的线程。
结论4:线程Cpu时间threadCpuTime = utime +
系统中有关进程cpu使用率的常用命令
通过ps命令可以查看系统中相关进程的Cpu使用率的信息。以下在linux man文档中对ps命令输出中有关cpu使用率的解释:
CPU usage is currently
expressed as the percentage of time spent running during the entire lifetime of
a process. This is not ideal, and it does not conform to the standards that ps
otherwise 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 time
the process has been running (cputime/realtime ratio),&&&&&&&&&&&&&&&&&&&&&&&&&& expressed as a
percentage. It will not add up to 100% unless you are lucky.
结论5:ps命令算出来的cpu使用率相对于进程启动时的平均值,随着进程运行时间的增大,该值会趋向于平缓。
通过top命令可以查看系统中相关进程的实时信息(cpu使用率等)。以下是man文档中对top命令输出中有关进程cpu使用率的解释。
Last used CPU (SMP) &&&&&&&&&&&&&&&&& A
number representing the last used processor. In a true& SMP&
environment& this& will&
likely change& frequently& since&
the& kernel intentionally uses
weak affinity.& Also, the very act of
running top may break this weak affinity and cause more processes to& change&
CPUs& more& often (because of the extra demand for cpu
%CPU& --& CPU
usage&&&&&&&&& &&&&&&&& The& task’s share of
the elapsed CPU time since the last screen update, expressed as a percent-age
of total CPU time.& In a true SMP environment, if &Irix mode is Off, top will operate in Solaris mode
where a task’s cpu usage will be divided by the total number of CPUs.
结论6:某一个线程在其运行期间其所使用的cpu可能会发生变化。
结论7:在多核的情况下top命令输出的cpu使用率实质是按cpu个数*100%计算的。
单核情况下Cpu使用率的计算
通过读取/proc/stat 、/proc/&pid&/stat、/proc/&pid&/task/&tid&/stat以及/proc/cpuinfo这几个文件获取总的Cpu时间、进程的Cpu时间、线程的Cpu时间以及Cpu的个数的信息,然后通过一定的算法进行计算(采样两个足够短的时间间隔的Cpu快照与进程快照来计算进程的Cpu使用率)。
总的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
某一进程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的个数);
实验一: 监控一空循环的进程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
PID &&&USER&&&&&
PR &&NI& &VIRT& &RES& &SHR &&S &%CPU
%MEM &TIME+& COMMAND&
7639 fjzag&&&& 20&& 0&
206m& 10m 7136 S&& 99&
2.2&& 1:00.74 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&&
99& 2.2&& 1:03.71 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&&
99& 2.2&& 1:06.67 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&&
99& 2.2&& 1:09.63 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&&
98& 2.2&& 1:12.59 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&&
99& 2.2&& 1:15.55 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&
100& 2.2&& 1:18.55 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&
100& 2.2&& 1:21.54 java&&&&&&&&&&&&&&
&7639 fjzag&
&&&20&& 0&
206m& 10m 7136 S&& 99&
2.2&& 1:24.52 java&&&&&&&&&&&&&&
&7639 fjzag&&&& 20&&
0& 206m& 10m 7136 S&&
98& 2.2&& 1:27.46 java
实验二: 监控jconsole进程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
PID &&USER&&&&&
VIRT& &RES& &SHR &S
&%CPU %MEM &TIME+&
7753 fjzag&&&& 20&& 0&
252m& 72m& 22m S&&
10 14.4&& 0:18.70 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&&
0& 252m& 72m&
22m S&& 12 14.4&& 0:19.07 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&&
0& 252m& 72m&
22m S&& 11 14.4&& 0:19.39 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&&
0& 252m& 72m&
22m S&&& 7 14.4&& 0:19.61 jconsole&&&&&&&&&&
&7753 fjzag&
&&&20&& 0&
252m& 72m& 22m S&&&
7 14.4&& 0:19.83 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&&
0& 252m& 72m&
22m S&&& 5 14.4&& 0:19.97 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&&
0& 252m& 72m&
22m S&& 14 14.4&& 0:20.38 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&&
0& 252m& 72m&
22m S&& 10 14.4&& 0:20.68 jconsole&&&&&&&&&&
&7753 fjzag&&&& 20&&
0& 252m& 72m&
22m S&&& 9 14.5&& 0:20.96 jconsole
某一线程Cpu使用率的计算
计算方法:&&
1.采样两个足够短的时间隔的cpu快照与线程快照,
a)每一个cpu快照均为(user、nice、system、idle、iowait、irq、softirq、stealstealon、guest)的9元组;
b)每一个线程快照均为&(utime、stime)的2元组;
2.分别根据结论2、结论4计算出两个时刻的总的cpu时间与线程的cpu时间,分别记作:totalCpuTime1、totalCpuTime2、threadCpuTime1、threadCpuTime2
3.计算该线程的cpu使用率pcpu = 100*( threadCpuTime2
– threadCpuTime1) / (totalCpuTime2
– totalCpuTime1) (按100%计算,如果是多核情况下还需乘以cpu的个数);
实验一: 监控一空循环的线程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
PID &&&USER&&&&&
PR &&NI& &VIRT& &RES& &SHR &&S &%CPU
%MEM &TIME+& COMMAND&
7649 fjzag&&&& 20&& 0&
206m& 10m 7136 R&& 97&
2.2&& 7:22.94 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&&
0& 206m& 10m 7136 R&&
97& 2.2&& 7:25.86 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&&
0& 206m& 10m 7136 R&&
97& 2.2&& 7:28.76 java&&&&&&&&&&&&&&
&7649 fjzag&
&&&20&& 0&
206m& 10m 7136 R&& 99&
2.2&& 7:31.72 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&&
0& 206m& 10m 7136 R&&
98& 2.2&& 7:34.65 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&&
0& 206m& 10m 7136 R&&
96& 2.2&& 7:37.53 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&&
0& 206m& 10m 7136 R&&
98& 2.2&& 7:40.47 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&&
0& 206m& 10m 7136 R&&
96& 2.2&& 7:43.34 java&&&&&&&&&&&&&&
&7649 fjzag&&&& 20&&
0& 206m& 10m 7136 R&&
97& 2.2&& 7:46.25 java
实验二: 监控jconsole程序某一线程的cpu使用率。
说明:左边的数据是按以上算法得到的数据,其中采样的时间间隔与top命令刷新屏幕的时间间隔相同。
按以上方法计算得到的cpu使用率
通过top命令得到的
&PID &&&USER&&&&& PR &&NI& &VIRT& &RES&
SHR &S &%CPU
%MEM &TIME+& COMMAND&
7755 fjzag&&&& 20&& 0&
251m& 72m& 22m S&&&
1 14.4&& 0:11.92 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&&
0& 251m& 72m&
22m S&&& 7 14.4&& 0:12.12 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&&
0& 251m& 72m&
22m S&&& 2 14.4&& 0:12.18 jconsole&&&&&&&&&&
&7755 fjzag&&
251m& 72m& 22m S&&&
0 14.4&& 0:12.18 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&&
0& 251m& 72m&
22m S&&& 1 14.4&& 0:12.20 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&&
0& 251m& 72m&
22m S&&& 1 14.4&& 0:12.24 jconsole&&&&&&&&&&
&7755 fjzag&&&& 20&&
0& 251m& 72m&
22m S&&& 1 14.4&& 0:12.28 jconsole
多核情况下cpu使用率的计算&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
以下通过实验数据来说明多核情况下某一进程cpu使用率是按cpu个数*100%计算的.
在双核的情况下作的一组实验,第一组数据是通过ps& -eLo pid,lwp,pcpu | grep 9140命令查看进程号为9140的进程中各线程的详细信息。第二组数据是通过 ps命令查看进程号为9140进程的cpu使用率。
pid&& lwp& %cpu
&&96.6&&&&&&&&&&&&&&&&&&&&&&&& 该线程是一个空循环
&&95.9&&&&&&&&&&&&&&&&&&&&&&&& 该线程是一个空循环
以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。
pid&& %cpu
在单核的情况下作的一组实验,第一组数据是通过ps& -eLo pid,lwp,pcpu | grep 6137命令查看进程号为6137的进程中各线程的详细信息。第二组数据是通过 ps命令查看进程号为6137进程的cpu使用率。
&pid&&& lwp&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 空循环线程
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 空循环线程
以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。
主要问题:
1.不同内核版本/proc/stat文件格式不大一致。/proc/stat文件中第一行为总的cpu使用情况。
各个版本都有的4个字段: user、nice、system、idle
2.5.41版本新增字段:iowait
2.6.0-test4新增字段:irq、softirq
2.6.11新增字段:stealstolen
: &&&&&&&&&&&&&&&&&& which is the
time spent in other operating
systems when
running in a virtualized environment
2.6.24新增字段:guest:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& which
is the time spent running a virtual&
CPU& for& guest operating systems under the control of
the Linux kernel
2./proc/pid/task目录是Linux 2.6.0-test6之后才有的功能。
3.关于出现cpu使用率为负的情况,目前想到的解决方案是如果出现负值,连续采样计算cpu使用率直到为非负。
有些线程生命周期较短,可能在我们采样期间就已经死掉了.
阅读(55631)
&re: Linux中通过/proc/stat等文件计算Cpu使用率
mark ! 很有用啊!&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
好东西,解决了关于多核的疑问!&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率[未登录]
为什么会出现CPU使用率为负的情况?这种计算方法的误差范围是多少?除了这种计算方法外,有没有其他方法计算某一进程CPU使用率?&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率[未登录]
为什么会出现CPU使用率为负的情况???!!!
有没有其他方法计算某一进程CPU使用率?&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
请问utime = 1587 在哪儿呢。。。我怎么都找不到1587这数字&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
威武霸气,借用了。&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
@wee我看了多篇文章,也没有找到,我想大家都抄来抄去的吧。&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
这是好几年前写的第一篇博客,可惜后来没继续写呢@likeyiyy&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
@wee妈蛋,哥也找不到,坑啊。。。 &&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
这个问题应该是当初写文章时写错了。现在来统一回答一下。具体数值并不重要,关键要弄清楚在文件中的第几个field. linux帮助文档的解释在这: @copyMan@likeyiyy@wee&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
很有可能是采样频率的问题,至于有没有其他方法我也不大清楚。@Max@salomon&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
@likeyiyy看一下文档就有了utime %lu(14) Amount of time that this process has been scheduled in user mode, measured in clock ticks (divide by sysconf(_SC_CLK_TCK)). This includes guest time, guest_time (time spent running a virtual CPU, see below), so that applications that are not aware of the guest time field do not lose that time from their calculations.stime %lu(15) Amount of time that this process has been scheduled in kernel mode, measured in clock ticks (divide by sysconf(_SC_CLK_TCK)).cutime %ld(16) Amount of time that this process's waited-for children have been scheduled in user mode, measured in clock ticks (divide by sysconf(_SC_CLK_TCK)). (See also times(2).) This includes guest time, cguest_time (time spent running a virtual CPU, see below).cstime %ld(17) Amount of time that this process's waited-for children have been scheduled in kernel mode, measured in clock ticks (divide by sysconf(_SC_CLK_TCK)).&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率[未登录]
通过获取proc/stat计算某进程Cpu占有率和直接通过top命令获取有什么不同吗?&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
@小鱼如果我没有记错的话,top只能查整个进程的cpu使用率,可是有时候我们可能希望得到该进程所有隶属进程的cpu使用率进而找出可能有问题的线程。&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
今天刚刚看到salomon很久以前给我发的私信,问了几个有关该博客的问题。突然脑袋一闪想起了一些有关这些问题的可能原因,在此跟大家分享一下。问题1. 单个进程CPU使用率为什么出现负数?是proc的输出值不精确,还是采样的问题?应该是我们第二次采样时那个进程或线程已经死掉了,而刚好有一个新的进程或线程使用同样的id出现导致的。问题2:误差范围是多少? 有没有更理想的算取单个进程CPU占用率的方法至于误差我没有详细的考究过,从博客已经列出的实验数据可以看出还是蛮接近ps/top输出的结果。跟top相比以上方法的优势是top只能查看真个进程的cpu使用率无法查看他所有隶属线程的cpu使用率。&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
@郑安根加上H就能查看线程的信息&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
@h_mingg多谢!看来功夫还没到家呢!:)&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率
/proc/&pid&/stat 这里面的时间跟cpu频段时间怎么换算呢&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率[未登录]
我不确定这跟cpu频率有什么直接的关系,cpu频率指的是Cpu的处理速度:cycles per second是一个硬件特性. 你可以去简单了解一下Cpu指令的调度应该会有更好的理解@福娃&&&&&&
&re: Linux中通过/proc/stat等文件计算Cpu使用率[未登录]
好像可以通过hardware performance counter获取更加准确的cpu使用率。感兴趣可以了解一下诸如PAPI, perf, Intel PCM等相关的工具@郑安根&&&&&&
2017年10月
24252627282930123456789101112131415161718192021222324252627282930311234
文章档案(5)
Personal Website
PhD Student
Department of Computer Science
University of Pittsburgh
Pittsburgh, PA, USA
Blogs on DBMS, OS, Virtualization, High Performance Computing, Scientific Computation}

我要回帖

更多关于 linux 线程cpu占用率 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信