性能工具:特定进程CPU

Posted wanao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能工具:特定进程CPU相关的知识,希望对你有一定的参考价值。

在使用系统级性能工具找出是哪个进程降低了系统速度之后,需要使用特定进程性能工具来发现这个进程的行为。

进程性能统计信息

要了解一个应用程序的性能,重要的是理解它与操作系统、CPU和存储系统是怎样进行交互的。大多数应用程序不是独立的,需要一些对Linux内核和不同函数库的系统调用。

内核时间 & 用户时间

一个应用程序所耗时间最基本的划分是内核时间与用户时间。

  • 内核时间:消耗在Linux内核上的时间
  • 用户时间:消耗在应用程序或库代码上的时间

Linux可以使用time和ps大致表明应用程序将其时间花在了应用程序代码上还是花在了内核代码上。

Linux还可以使用oprofile和strace这样的命令跟踪哪些内核调用时代表进程发起的,以及每个调用完成需要多长时间。

库时间 & 应用程序时间

任何应用程序都需要依赖系统库才能执行复杂的操作。这些库可能会导致性能问题,在库被应用程序使用时,ltrace命令和oprofile工具包提供了分析库性能的途径。Linux加载器Id的内置工具可以确定使用多个库是否会减慢应用程序的启动时间。

细分应用程序时间

工具gprof和oprofile可以生成应用程序的配置文件,确定是哪些源代码行花费了大量的时间。

 

Linux性能工具

time

time命令完成一项基本功能,当需要测试一条命令的性能时,通常会首先运行它。time命令如同秒表一样,可以测量命令执行的时间。它测量的时间有三种类型:

  • real:测量的真正的或经过的时间,即程序开始到结束执行之间的时间
  • user:用户时间,即CPU代表该程序执行应用代码所花费的时间
  • sys:系统时间,即CPU代表该程序执行系统或内核代码所花费的时间

命令行:time [-v] application  对application程序计时,在其完成后通过标准输出显示它的CPU使用情况

  -v:详细显示了程序的时间和统计信息

内部命令time(提供进程执行信息的子集)
[root@bogon ~]# time find / -name etc
/run/initramfs/state/etc /etc /etc/avahi/etc /usr/lib64/festival/etc /usr/share/doc/m2crypto-0.21.1/demo/Zope27/instance_home/etc /usr/share/doc/m2crypto-0.21.1/demo/ZopeX3/instance_home/etc /usr/share/doc/oddjob-0.31.5/sample/etc /usr/share/festival/lib/etc /usr/etc /usr/local/etc real 0m27.618s user 0m0.807s sys 0m6.930s

外部命令/usr/bin/time [root@bogon
~]# /usr/bin/time find / -name etc /run/initramfs/state/etc /etc /etc/avahi/etc /usr/lib64/festival/etc /usr/share/doc/m2crypto-0.21.1/demo/Zope27/instance_home/etc /usr/share/doc/m2crypto-0.21.1/demo/ZopeX3/instance_home/etc /usr/share/doc/oddjob-0.31.5/sample/etc /usr/share/festival/lib/etc /usr/etc /usr/local/etc 0.31user 0.60system 0:00.92elapsed 99%CPU (0avgtext+0avgdata 4524maxresident)k 0inputs+0outputs (0major+1216minor)pagefaults 0swaps

使用-v参数详细的显示程序的时间和统计信息(大多数统计数据为0是因为Linux并不支持它们) [root@bogon
~]# /usr/bin/time -v find / -name etc /run/initramfs/state/etc /etc /etc/avahi/etc /usr/lib64/festival/etc /usr/share/doc/m2crypto-0.21.1/demo/Zope27/instance_home/etc /usr/share/doc/m2crypto-0.21.1/demo/ZopeX3/instance_home/etc /usr/share/doc/oddjob-0.31.5/sample/etc /usr/share/festival/lib/etc /usr/etc /usr/local/etc Command being timed: "find / -name etc" User time (seconds): 0.32 CPU花费在应用程序上的秒数 System time (seconds): 0.66 CPU代表应用程序花费在Linux内核上的秒数 Percent of CPU this job got: 99% 进程运行时消耗CPU的百分比 Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.99 应用程序从启动到完成所经历的时间 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 4524 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 主缺页故障的数量或需要从磁盘读取内存页的页故障数量(没有主缺页故障说明应用程序运行的时候系统没有访问磁盘) Minor (reclaiming a frame) page faults: 1217 次缺页故障的数量或不需要访问磁盘即可解决的页故障 Voluntary context switches: 5 Involuntary context switches: 135 Swaps: 0 进程被交换到磁盘的次数 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 系统的页面大小 Exit status: 0 应用程序的退出状态

ps

ps(Process Status),ps命令可以列出系统中当前运行的那些进程(进程的快照,执行ps命令那个时刻的进程)如果想要动态显示进程信息,可以使用top。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。

Linux系统进程有5种状态:

  • R:运行(正在运行或在运行队列中等待)
  • S:中断(休眠中、受阻、在等待某个条件的形成或接收到信号)
  • D:不可中断(收到信号不唤醒和不可运行,进程必须等待直到有中断发生)
  • Z:僵死(进程已终止,但进程描述符依然存在,直到父进程调用系统调用后释放)
  • T:停止(进程收到SIGSTOP、SIGSTP、SIGTIN、SIGTOU信号后停止运行)

常用命令行选项:

  • a:显示同一终端下的所有进程(包括其他用户的进程)
  • u:显示进程拥有者、状态、资源占用等的详细信息
  • x:显示没有控制终端的进程。常与a 参数一起使用,可列出较完整信息
  • -e:显示所有进程
  • -f:完整输出显示进程之间的父子关系
  • -l:较长、较详细的将该 PID 的的信息列出
  • -o:自定义显示的字段

EG:ps -ef

[root@bogon ~]# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 14:19 ?        00:00:04 /usr/lib/systemd/systemd --switched-root --system --de
serialize 22
root          2      0  0 14:19 ?        00:00:00 [kthreadd]
root          3      2  0 14:19 ?        00:00:00 [ksoftirqd/0]
UID: 进程拥有者的UID
PID:进程的PID
PPID:父进程的PID
C:CPU使用的资源百分比
STIME:系统启动时间
TTY:进程运行的终端
TIME:使用的CPU时间
CMD:执行指令

EG:ps aux

[root@bogon ~]# ps aux | more 
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 203260  6928 ?        Ss   14:19   0:04 /usr/lib/systemd/systemd --switched-ro
ot --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    14:19   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    14:19   0:00 [ksoftirqd/0]
USER:进程拥有者
PID:进程的PID
%CPU:CPU占用率
%MEM:内存占用率
VSZ:虚拟内存
RSS:实际内存
TTY:进程运行的终端
STAT:进程状态
START:进程启动时间
TIME:进程占用CPU总时间
COMMAND:进程执行指令

STAT: 进程状态

  R 运行
  S 可中断睡眠 Sleep
  D 不可中断睡眠
  T 停止的进程
  Z 僵尸进程
  X 死掉的进程
    Ss s进程的领导者,父进程
    S< <优先级较高的进程
    SN N优先级较低的进程
    R+ +表示前台的进程组
    Sl 以线程的方式运行

CPU性能相关的选项

ps有很多不同的选项,能检索正在运行中的应用程序的各种统计信息:ps [ -o etime, time, pcpu, command ] [ -u user ] [ -U user ] [ PID ] 

技术图片

[root@bogon ~]# ps -o etime,time,pcpu,cmd 24501
    ELAPSED     TIME %CPU CMD
      00:53 00:00:52 99.6 dd if=/dev/zero of=/dev/null bs=100
通过此测试,该进程运行了53秒,消耗CPU的时间为52秒(可见系统确实没啥进程在运行),CPU占用率为99.6%。

 

技术参考书籍:《Linux性能优化》 Phillip G. Ezolt 著

参考博客:https://www.cnblogs.com/skyzy/p/9433473.html

 

以上是关于性能工具:特定进程CPU的主要内容,如果未能解决你的问题,请参考以下文章

性能工具:特定进程CPU

liunx性能监控工具总结

12.系统工具

获取 C 中的进程性能计数器

Linux性能优化 第二章 性能工具:系统CPU

有没有办法分析特定机器上所有 java 进程的 CPU 利用率?