精华内容
下载资源
问答
  • 本文介绍了Linux查看某一进程的CPU占用率的方法。
  • linux控制cpu占用率

    2018-01-30 14:09:47
    Linux平台下通过程序控制cpu占用率,最好在空闲的机器上测试
  • 主要给大家介绍了关于Linux系统中CPU占用率较高问题排查思路与解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Linux具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 文章目录1 查看进程命令ps2 查看cpu,内存利用ps auxm3 强行终止进程命令kill -9 1 查看进程命令ps 打开终端,输入 ps -e | grep Typora 就能得到和Typora相关的所有进程 标准格式为: ps [options] [--help] ...

    1 查看进程命令ps

    打开终端,输入

    ps -e | grep Typora
    

    就能得到和Typora相关的所有进程
    在这里插入图片描述

    标准格式为:

    ps [options] [--help]
    
    参数符号含义
    psprocess show 将某个进程显示出来
    -A列出所有的行程
    -aux显示所有包含其他使用者的行程
    -uuser 以用户为主的进程状态
    %CPU占用的 CPU 使用率
    l较长、较详细的将该PID 的的信息列出
    grep查找,中间的“ | ”符号是管道命令,指ps命令与grep同时执行
    -e此参数的效果和指定"A"参数相同。
    输出格式规划符号含义
    l较长、较详细的将该PID 的的信息列出
    -f做一个更为完整的输出

    如果想得到所有的进程的信息,则输入

    ps -ef		# e表示所有进程,f表示更完整的输出
    

    得到包含了UID,PID,PPID,C,STIME,TIME,CMD等等信息的一个列表
    在这里插入图片描述

    各相关信息的意义为:

    • F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;
    • S 代表这个程序的状态 (STAT);
    • UID 代表执行者身份
    • PID 进程的ID号!
    • PPID 父进程的ID;
    • C CPU使用的资源百分比
    • PRI指进程的执行优先权(Priority的简写),其值越小越早被执行;
    • NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
    • ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行 的程序,一般就是『 - 』
    • SZ 使用掉的内存大小;
    • WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
    • TTY 登入者的终端机位置;
    • TIME 使用掉的 CPU 时间。
    • CMD 所下达的指令名称

    2 查看cpu,内存利用率ps auxm

    如果想看到CPU,内存等信息的占用,则输入

    ps auxm --sort=%cpu
    

    即可看到所有进程CPU,内存等相关的信息
    在这里插入图片描述

    3 强行终止进程命令kill -9

    对于僵尸进程用

    kill [uid]
    

    同时终止所有子进程 (如果杀掉了父进程,那么父进程下面的子进程也会死掉)

    kill -9 [uid]
    

    例如我想终止gedit,在terminal中输入:

    ps -A|grep gedit
    

    查看到gedit的UID是16491,在terminal输入:

    kill -9 16491
    

    即完成gedit进程的强制终止
    在这里插入图片描述

    展开全文
  • Linux系统查看CPU使用、内存使用、磁盘使用

    万次阅读 多人点赞 2019-04-16 15:17:00
    一、查看CPU使用 1. top 命令 top命令可以看到总体的系统运行状态和cpu的使用 。 %us:表示用户空间程序的cpu使用(没有通过nice调度) %sy:表示系统空间的cpu使用,主要是内核程序。 %ni:表示用户空间...

    一、查看CPU使用率

    1. top 命令

    [root@sss ~]# top
    top - 16:54:38 up 7 days,  5:13,  3 users,  load average: 0.00, 0.01, 0.05
    Tasks:  77 total,   2 running,  75 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1882232 total,   813020 free,   330164 used,   739048 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  1386608 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                        
    17215 root       0 -20  127504  12176   9560 S  0.7  0.6  21:46.45 AliYunDun                                                                                                                                      
     2770 root      20   0  573932  17232   6088 S  0.3  0.9   1:11.38 tuned                                                                                                                                          
        1 root      20   0   43548   3844   2588 S  0.0  0.2   0:06.54 systemd                                                                                                                                        
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                       
        3 root      20   0       0      0      0 S  0.0  0.0   0:08.75 ksoftirqd/0                                                                                                                                    
        5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H              
    ... ...                                                                                                                                 
    

    top命令可以看到总体的系统运行状态和cpu的使用率 。

    %us:表示用户空间程序的cpu使用率(没有通过nice调度)
    %sy:表示系统空间的cpu使用率,主要是内核程序。
    %ni:表示用户空间且通过nice调度过的程序的cpu使用率。
    %id:空闲cpu
    %wa:cpu运行时在等待io的时间
    %hi:cpu处理硬中断的数量
    %si:cpu处理软中断的数量
    %st:被虚拟机偷走的cpu
    注:99.0 id,表示空闲CPU,即CPU未使用率,100%-99.0%=1%,即系统的cpu使用率为1%。
    

    2、vmstat

    详细使用和参数介绍参考网址

    3、sar

    sar命令语法和vmstat一样。命令不存在时需要安装sysstat包,这个包很有用。
    

    命令示例:

    例如每1秒采集一次CPU使用率,共采集5次。
    
    [root@sss ~]# sar -u 1 5
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:56:03 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    04:56:04 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:05 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:06 PM     all      0.99      0.00      0.99      0.00      0.00     98.02
    04:56:07 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:08 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    Average:        all      0.20      0.00      0.20      0.00      0.00     99.60
    

    和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。

    [root@sss ~]# sar -P 0 -u 1 5
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:39:13 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    04:39:14 PM       0      0.00      0.00      0.99      0.00      0.00     99.01
    04:39:15 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:16 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:17 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:18 PM       0      1.00      0.00      0.00      0.00      0.00     99.00
    Average:          0      0.20      0.00      0.20      0.00      0.00     99.60
    [root@izuf633l0ge76tv5mzalpmz ~]# 
    

    进程队列长度和平均负载状态
    例如每1秒采集一次,共采集5次。

    [root@sss ~]# sar -q 1 5  
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:40:14 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
    04:40:15 PM         0       149      0.00      0.01      0.05         0
    04:40:16 PM         0       149      0.00      0.01      0.05         0
    04:40:17 PM         0       149      0.00      0.01      0.05         0
    04:40:18 PM         1       149      0.00      0.01      0.05         0
    04:40:19 PM         1       149      0.00      0.01      0.05         0
    Average:            0       149      0.00      0.01      0.05         0
    

    输出项:

    runq-sz:运行队列的长度(等待运行的进程数)
    
    plist-sz:进程列表中进程(processes)和线程(threads)的数量
    
    ldavg-1:最后1分钟的系统平均负载(System load average)
    
    ldavg-5:过去5分钟的系统平均负载
    
    ldavg-15:过去15分钟的系统平均负载
    

    创建的平均值和上下文切换的次数
    例如每1秒收集一次,共收集5次。

    [root@sss ~]# sar -w 1 5 
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:41:39 PM    proc/s   cswch/s
    04:41:40 PM      0.00    274.26
    04:41:41 PM      0.00    277.78
    04:41:42 PM      0.00    285.00
    04:41:43 PM      0.00    280.00
    04:41:44 PM      0.00    270.00
    Average:         0.00    277.40
    

    sar命令也可以获取过去指定日期的性能参数。

    [root@sss ~]# sar -u -f /var/log/sa/sa08
    Linux 3.10.0-693.2.2.el7.x86_64 (localhost.localdomain)         04/08/2019      _x86_64_        (1 CPU)
    
    10:54:35 AM       LINUX RESTART
    
    11:00:02 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    11:10:01 AM     all     12.93      0.23      2.89      1.54      0.00     82.41
    11:20:01 AM     all     46.58      0.00      8.81      0.79      0.00     43.82
    11:30:01 AM     all     44.93      0.00      9.68      0.15      0.00     45.24
    11:40:02 AM     all      0.25      0.00      0.15      0.00      0.00     99.60
    11:50:01 AM     all      0.19      0.00      0.13      0.00      0.00     99.68
    12:00:01 PM     all      0.31      0.00      0.19      0.14      0.00     99.37
    ... ...
    

    4、mpstat

    这个命令也在sysstat包中,语法类似。
    cpu使用情况比sar更加详细些,也可以用-P指定某颗cpu 。
    

    例如每1秒收集一次,共5次。

    [root@sss ~]# mpstat 1 5 
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:58:01 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    04:58:02 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:03 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:04 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:05 PM  all    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
    04:58:06 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    Average:     all    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80
    

    5、iostat

    这个命令主要用来查看io使用情况,也可以来查看cpu,个人感觉不常用。
    

    示例

    [root@sss ~]# iostat -c 1 2
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.26    0.00    0.21    0.01    0.00   99.53
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.00    0.00    0.00    0.00    0.00  100.00
    

    6、dstat

    每秒cpu使用率情况获取

    [root@sss ~]#  dstat -c
    ----total-cpu-usage----
    usr sys idl wai hiq siq
      0   0 100   0   0   0
      0   1  99   0   0   0
      1   0  99   0   0   0
      0   0 100   0   0   0
      0   0 100   0   0   0
      1   1  98   0   0   0
      0   0 100   0   0   0
      ... ...
    

    最占cpu的进程获取

    [root@sss ~]# dstat --top-cpu  
    -most-expensive-
      cpu process   
    AliYunDun    0.2
    AliYunDun    2.0
    mysqld       1.0
    AliYunDun    1.0
    kworker/0:1H 1.0
    AliYunDun    1.0
    AliYunDun    1.0
    AliYunDun    1.0
    

    二、查看内存使用率

    1、top命令

    top 命令查看内存使用率

    查看第四行: KiB Mem
    内存使用率: used/ total
    

    2、free命令

    free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。

    1.命令格式:
    free [参数]
    
    2.命令功能:
    free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
    
    3.命令参数:
    -b  以Byte为单位显示内存使用情况。 
    
    -k  以KB为单位显示内存使用情况。 
    
    -m  以MB为单位显示内存使用情况。
    
    -g   以GB为单位显示内存使用情况。 
    
    -o  不显示缓冲区调节列。 
    
    -s<间隔秒数>  持续观察内存使用状况。 
    
    -t  显示内存总和列。 
    
    -V  显示版本信息。 
    
    4.使用实例:

    实例1:显示内存使用情况

    命令示例:

    free [-k] # 以 kb  为单位显示内存使用状况
    free -g # 以 G 为单位显示内存使用状况
    free -m # 以 M 为单位显示内存使用状况
    free -t  # 以总和的形式显示内存的使用信息
    free -s 1 # 每一秒显示内存使用情况
    

    输出:

    [root@sss ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384944
    Swap:             0           0           0
    
    [root@sss ~]# free -g
                  total        used        free      shared  buff/cache   available
    Mem:              1           0           0           0           0           1
    Swap:             0           0           0
    
    [root@sss ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1838         324         791           0         722        1352
    Swap:             0           0           0
    
    [root@sss ~]# free -t
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    Total:      1882232      331760      811004
    
    [root@sss ~]# free -s 1
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331784      810980         592      739468     1384924
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331784      810980         592      739468     1384924
    Swap:             0           0           0
    ... ...
    

    说明–对这些数值的解释:

    total:总计物理内存的大小。
    
    used:已使用多大。
    
    free:可用有多少。
    
    Shared:多个进程共享的内存总额。
    
    Buff/cache:磁盘缓存的大小。
    

    第三行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
    当可用内存少于额定值的时候,就会进行交换

    如何看额定值:

    命令:

    cat /proc/meminfo 
    

    输出:

    [root@sss ~]# cat /proc/meminfo
    MemTotal:        1882232 kB
    MemFree:          811244 kB
    MemAvailable:    1385300 kB
    Buffers:           81268 kB
    Cached:           602500 kB
    SwapCached:            0 kB
    Active:           601948 kB
    Inactive:         379880 kB
    Active(anon):     298392 kB
    Inactive(anon):      256 kB
    Active(file):     303556 kB
    Inactive(file):   379624 kB
    Unevictable:           0 kB
    Mlocked:               0 kB
    SwapTotal:             0 kB
    SwapFree:              0 kB
    Dirty:               320 kB
    Writeback:             0 kB
    AnonPages:        298052 kB
    Mapped:            47236 kB
    Shmem:               592 kB
    Slab:              55772 kB
    SReclaimable:      44076 kB
    SUnreclaim:        11696 kB
    KernelStack:        2384 kB
    PageTables:         5808 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:      941116 kB
    Committed_AS:     810896 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:       10604 kB
    VmallocChunk:   34359719676 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:    237568 kB
    CmaTotal:              0 kB
    CmaFree:               0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    DirectMap4k:       63360 kB
    DirectMap2M:     2033664 kB
    DirectMap1G:           0 kB
    

    交换将通过三个途径来减少系统中使用的物理页面的个数:

    1.减少缓冲与页面cache的大小, 
    
    2.将系统V类型的内存页面交换出去,  
    
    3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。 
    

    事实上,少量地使用swap是不是影响到系统性能的。

    那buffers和cached都是缓存,两者有什么区别呢?

    为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
    
    磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。
    
    Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
    
    Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
    
    简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
    
    所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
    
    如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
    
    实例2:以总和的形式显示内存的使用信息

    命令:

     	free -t 
    

    输出:

    [root@sss ~]# free -t
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    Total:      1882232      331760      811004
    
    实例3:周期性的查询内存使用信息

    命令:

    free -s 10
    

    输出:

    [root@sss ~]# free -s 10
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      324924      816688         496      740620     1392280
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      324944      816664         496      740624     1392260
    Swap:             0           0           0
    

    说明:

    每10s 执行一次命令
    

    三、查看磁盘使用率

    1、输入df命令

    [root@sss ~]# df
    

    显示详情:

    Filesystem1K-blocksUsedAvailableUse%Mounted on
    /dev/vda14115180837942443524413210%/
    devtmpfs93064409306440%/dev
    tmpfs94111609411160%/dev/shm
    tmpfs9411164689406481%/run
    tmpfs94111609411160%/sys/fs/cgroup
    tmpfs18822401882240%/run/user/0

    说明

    磁盘使用率=(Used列数据之和)/(1k-blocks列数据之和)
    

    磁盘和内存的区别与联系:

    (磁盘--也叫硬盘--或是U盘--或是移动硬盘)
    1、硬盘与内存都是存储器,一个是内部,一个是外部。
    
    2、硬盘与内存的区别是很大的,这里只谈最主要的三点:
    	1)内存是计算机的工作场所,硬盘用来存放暂时不用的信息;
    	2)内存是半导体材料制作,硬盘是磁性材料制作;
    	3)内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。
    	
    3、内存与硬盘的联系也非常密切:
    		硬盘上的信息永远是暂时不用的,要用请装入内存!
    		CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。
    		
    4、计算机的启动过程就是一个从硬盘上把最常用信息装入内存的过程。
    
    5、硬盘则决定你的电脑可以装下多少东西,内存则决定你的电脑开机后一次最多可以运行多少程序(如手机运行内存)。
    
    展开全文
  • go读取Linuxcpu占用率、cpu温度、内存占用率及磁盘占用率
  • 可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%...

    可以用下面的命令将 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 与之对应。




    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的相关信息(型号,缓存大小等)。

    [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         : 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的逻辑个数(包括多核、超线程)。

    /proc/stat文件

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

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

     

    fjzag@fjzag-desktop:~$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 virtual CPU  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//stat文件                                          

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

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

     

    [zhengangen@buick ~]# 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时间。

    /proc//task//stat文件

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

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

     

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

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

    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  SMP environment  this  will likely change  frequently  since the  kernel intentionally usesweak affinity.  Also, the very act ofrunning top may break this weak affinity and cause more processes to  change CPUs 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%计算的。

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

    基本思想

    通过读取/proc/stat 、/proc//stat、/proc//task//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命令得到的

     

    99.50083

    98.333336

    98.0

    98.83138

    99.0

    99.0

    99.83361

    98.83527

    98.4975

     

    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命令得到的

     

    8.681135

    12.0

    10.350584

    7.6539097

    7.6539097

    5.0

    13.021703

    11.0

    8.666667

    PID   USER      PR   NI  VIRT   RES   SHR  S  %CPU %MEM  TIME+  COMMAND 

    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命令得到的

     

    98.83138

    97.00997

    96.98997

    97.49583

    98.169716

    96.8386

    97.333336

    93.82304

    98.66667

    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命令得到的

     

    1.3400335

    6.644518

    1.3333334

    0.6677796

    0.6666667

    1.3333334

    1.3333334

     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     20   0  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

    9140  9140  0.0
     9140  9141  0.0
     9140  9142  0.0
     9140  9143  0.0
     9140  9144  0.0
     9140  9149  0.0
     9140  9150  0.0
     9140  9151  0.0
     9140  9152  0.1
     9140  9153 96.6                         该线程是一个空循环
     9140  9154 95.9                         该线程是一个空循环

    以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。

    数据二:

    pid   %cpu

    9140  193

    实验二

    描述:

    单核的情况下作的一组实验,第一组数据是通过ps  -eLo pid,lwp,pcpu | grep 6137命令查看进程号为6137的进程中各线程的详细信息。第二组数据是通过 ps命令查看进程号为6137进程的cpu使用率。

    数据一:

     pid    lwp  %cpu

     6137 6137  0.0

     6137 6138  0.1

     6137 6143  0.0

     6137 6144  0.0

     6137 6145  0.0

     6137 6146  0.0

     6137 6147  0.0

     6137 6148  0.0

     6137 6149  0.0

     6137 6150 46.9                                                 空循环线程

     6137 6151 46.9                                                 空循环线程

    以上除了红色标注出来的两个线程以外,其他的线程都是后台线程。

    数据二

    pid %cpu

    6137 92.9

    主要问题:

    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 thetime spent in other operating

    systems whenrunning in a virtualized environment

    2.6.24新增字段:guest:                                    whichis the time spent running a virtual CPU  for  guest operating systems under the control ofthe Linux kernel

    2./proc/pid/task目录是Linux 2.6.0-test6之后才有的功能。

     

    3.关于出现cpu使用率为负的情况,目前想到的解决方案是如果出现负值,连续采样计算cpu使用率直到为非负。

     

    4.有些线程生命周期较短,可能在我们采样期间就已经死掉了.




    php-cgi进程占用cpu资源过多负载高的原因分析及解决步骤


    服务器环境:redhat linux 5.5 , nginx ,  phpfastcgi

     

    在此环境下,一般php-cgi运行是非常稳定的,但也遇到过php-cgi占用太多cpu资源而导致服务器响应过慢,我所遇到的php-cgi进程占用cpu资源过多的原因有:

     

    1. 一些php的扩展与php版本兼容存在问题,实践证明 eAccelerater与某些php版本兼容存在问题,具体表现时启动php-cgi进程后,运行10多分钟,奇慢无比,但静态资源访问很快,服务器负 载也很正常(说明nginx没有问题,而是php-cgi进程的问题),解决办法就是从php.ini中禁止掉eAccelerater模块,再重启 php-cgi进程即可

     

    2. 程序中可能存在死循环,导致服务器负载超高(使用top指令查看负载高达100+), 需要借助Linux的proc虚拟文件系统找到具体的问题程序

     

    3. php程序不合理使用session , 这个发生在开源微博记事狗程序上,具体表现是有少量php-cgi进程(不超过10个)的cpu使用率达98%以上, 服务器负载在4-8之间,这个问题的解决,仍然需要借助Linux的proc文件系统找出原因。

     

    4. 程序中存在过度耗时且不可能完成的操作(还是程序的问题),例如discuz x 1.5的附件下载功能: source/module/forum/forum_attachement.php中的定义

     

    function getremotefile($file) {
        global $_G;
        @set_time_limit(0);
        if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {
            $ftp = ftpcmd('object');
            $tmpfile = @tempnam($_G['setting']['attachdir'], '');
            if($ftp->ftp_get($tmpfile, 'forum/'.$file, FTP_BINARY)) {
                @readfile($tmpfile);
                @unlink($tmpfile);
            } else {
                @unlink($tmpfile);
                return FALSE;
            }
        }
        return TRUE;
    }

     

    没有对传入的参数作任何初步检查,而且设置了永不超时,并且使用readfile一次读取超大文件,就可能存在以下问题:
     A. 以http方式读取远程附件过度耗时

     B. FTP无法连接时,如何及时反馈出错误?

     C. readfile是一次性读取文件加载到内存中并输出,当文件过大时,内存消耗惊人

          根据实验发现采用readfile一次性读取,内存消耗会明显增加,但是CPU的利用率会下降较多。如果采用分段读取的方式,内存消耗会稍微下降,而CPU占用却会明显上升。

     

    对discuz x 1.5的这个bug较好解决方法就是后台重新正确设置远程附件参数。

     

    以下是我逐步整理的故障排除步骤:

    1. 得到占用cpu资源过多的php-cgi进程的pid(进程id), 使用top命令即可,如下图:

     


    经过上图,我们发现,有两个php-cgi进程的cpu资源占用率过高,pid分别是10059,11570,这一般都是程序优化不够造成,如何定位问题的php程序位置?

     

    2. 找出进程所使用的文件

    /proc/文件系统保存在内存中,主要保存系统的状态,关键配置等等,而/proc/目录下有很多数字目录,就是进程的相关信息,如下图,我们看看进程10059正在使用哪些文件?


    显然,使用了/home/tmp/sess_*文件,这明显是PHP的session文件, 我们查看这个session文件的内容为:view_time|123333312412

     

    到这里,我们已经可以怀疑是由于php程序写入一个叫view_time的session项而引起, 那么剩余的事件就是检查包含view_time的所有php文件,然后修改之(比如改用COOKIE),这实话, 这个view_time并非敏感数据,仅仅记录用户最后访问时间,实在没必要使用代价巨大的session, 而应该使用cookie。

     

    3. 找出有问题的程序,修改之

    使用vi编辑以下shell程序(假设网站程序位于/www目录下)

     

     #!/bin/bash
     find /www/ -name "*.php" > list.txt
     
    f=`cat ./list.txt`
     
    for n in $f
    do 
        r=`egrep 'view_time' $n`
        if [ ! "$r" = "" ] ; then
            echo $n
         fi 
    done

     

    运行这个shell程序,将输出包含有view_time的文件, 对记事狗微博系统,产生的问题位于modules/topic.mod.class文件中


    http://blog.csdn.net/turkeyzhou/article/details/6709953

    http://www.cnblogs.com/cute/archive/2011/04/20/2022280.html


    最近对我的本本(4核8线程)用top命令看系统状况出现了CPU利用率超过200%的情况,非常诧异,查了下相关资料,把这个问题弄清楚了。
    首先来分析下CPU Load

    load average: 0.09, 0.05, 0.01

    分别是1分钟、5分钟、15分钟的平均Load。
    Load这个东西怎么理解呢,就像一条马路,有N个车道,如果N个进程进入车道,那么正好一人一个,再多一辆车就占不到车道,要等有一个车空出车道。
    在CPU中可以理解为CPU可以并行处理的任务数,那么就是“CPU个数 * 核数”,如果CPU Load = CPU个数 * 核数 那么就是说CPU正好满负载,再多一点,可能就要出问题了,有任务不能被及时分配处理器,那么保证性能的话,最好是小于CPU个数 * 核数 *0.7。

    查看CPU核数可以通过:grep ‘model name’ /proc/cpuinfo

    那么以哪个平均值为准呢?如果1分钟平均出现大于CPU个数 * 核数的情况,还不用担心,如果5分钟平均也是,那就要警惕了,15分钟平均也是这样,就要分析哪里出问题了,防范于未然
    CPU利用率超过100%的问题,也是差不多,top命令应该是把每个核的CPU占用率加起来,算一个和,于是多核情况下会出现超过100%。

    另外Context Switch Rate也是个非常值得注意的值,因为线程间切换的代价也是非常高的。

    引用一个公式:Context Switch Rate = Interrupt Rate + TPS* N

    对于一个多线程的程序,我觉得准备一个控制线程来调度任务是非常必要的,免得线程过于高并发,导致资源的争用和线程切换带来性能问题,最好控制并发的线程数基本等于CPU的总核数,减少这个N,获得更好的处理器性能。


    Java 系统性能分析 命令 

    1. cpu分析
         top , pidstat(sysstat)
         pid -p PID -t 1 10
         vmstat 1   CPU上下文切换、运行队列、利用率
         ps Hh -eo tid
         pcpu 查看具体线程的CPU消耗
         sar   来查看一定世界范围内以及历史的cpu消耗情况信息

         查看java线程信息
         jstack pid | grep 'nid=0x9999'

       
    2. cs sy消耗比较高
         上下文切换性能偏高, jstack -l pid, 查看on object monitor

    3. io消耗
         pidstat -d -t -p pid 1 100
         iostat

    4. 网络io消耗
         cat /proc/interruptes
         sar -n FULL 1 2
         tcpdump
    展开全文
  • Linux查看CPU、内存占用率

    万次阅读 多人点赞 2018-02-09 10:18:39
    Linux查看CPU、内存占用率我们经常需要查看CPU和内存占用率,否则一旦存在情况很快就会有IDC(或客户)找上门,Linux查看资源使用情况有多种命令可以参考,CPU、内存、IO、NETWORK等资源使用情况都可以通过某些...

    Linux下查看CPU、内存占用率


    我们经常需要查看 CPU和内存占用率,否则一旦存在情况很快就会有IDC(或客户)找上门,Linux上查看资源使用情况有多种命令可以参考,CPU、内存、IO、NETWORK等资源使用情况都可以通过某些命令查询到,本文只说CPU/内存及简单的问题追踪方法。

    一、top查看Linux资源占用情况

    top命令可以查看CPU、内存利用率,当然这些值都是平均利用率,以下是安装APACHE+PHP+MYSQL后的运行情况,示例抓图如下:

    其中,

    • PID - 进程标示号
    • USER - 进程所有者
    • PR - 进程优先级
    • NI - 进程优先级别数值
    • VIRT - 进程占用的虚拟内存值
    • RES - 进程占用的物理内存值
    • SHR - 进程使用的共享内存值
    • S - 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死
    • %CPU - 进程占用的CPU使用率
    • %MEM - 进程占用的物理内存百分比
    • TIME+ - 进程启动后占用的总的CPU时间
    • Command - 进程启动的启动命令名称

    二、free命令查看内存使用情况

    free命令查看总内存、使用、空闲等情况,如下图:

    三、ps命令查看CPU状态

    ps(process status)命令用来汇报处理器状态信息,示例用法:

    ps ux
    ps -H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
    

    上述命令:第一条按默认方式查看状态,第二条命令指定显示列和排序方式,使用时任选其一。


    四、简单的CPU高占用定位方法

    首先需获取到该进程的PID,通过上文命令即可查到

    根据PID找到对应的文件,使用命令(其中PID需替换为查到高占用进程ID):


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

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


    ps: invalid option -- 'm'

    Show list of processes

            -o COL1,COL2=HEADER     Select columns for display
            -T                      Show threads (显示线程数)
    展开全文
  • CPU占用率查看命令:top图中红色部分即为占用百分率,下面是每个进程的CPU占用率,如果服务器是多核CPU可能在下方看到有些进程CPU占用超过100%,这种一般是该进程使用了多核。内存占用率:free -m图中红色部分即为...
  • C++ 获取进程CPU占用率

    2020-08-26 03:25:28
    主要介绍了C++ 获取进程CPU占用率,需要的朋友可以参考下
  • USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 19352 1308 ? Ss Jul29 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S Jul29 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jul29 0:11 [migration/0]...
  • 1.简介  一个程序,完成它预设的功能,并不能说明它是一个优良的程序。好的程序,应该是对资源的合理利用,亦或是 ...本文着重讲解一下在linux系统下,如何查看CPU占用率的进程,线程。   2.python代码  为了
  • Linux grep 和 awk 命令的组合来获取内存占用率Linux print 和 awk 命令的组合来获取 CPU占用率
  • LinuxCPU占用率高分析方法

    千次阅读 2018-07-31 10:41:17
    一、可能有线程一直占用CPU资源 1. 先通过 ps 查看进程状态,找出进程的PID(8209)。 2.jstack -l 8209 &gt; /usr/local/work/...4. 通过top -H -p 8209 命令查看对应进程是哪个线程占用CPU过高(eg:8308...
  • Linux下解决CPU占用率100%问题的步骤

    千次阅读 2020-08-10 16:07:17
    查看进程中cpu占用率高的线程ID - TID3. 将线程ID - TID 转换成16进制 - XTID4. 将进程中的所有线程输出到文件5. 在输出文件中查找对应的线程ID 我们经常会解决一些cpu占用率100%的问题,有些问题可能比较容易分析...
  • linux查看占用cpu最高的进程

    万次阅读 2019-08-03 11:00:39
    linux查看占用cpu最高的进程 ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head 或者top (然后按下M,注意这里是大写) linux查看占用内存最高的进程 ps aux|head -1;ps aux|grep -v PID|...
  • // CPU占用率计算原理:// 1、读取/proc/pid/stat文件,其中记录了从开机到现在,本进程所占用的CPU时间(单位jiffies)// 2、然后再读取/proc/stat文件,其中记录了从开机到现在,系统所占用的CPU时间(单位jiffies...
  • 可以看到是pid为3958的线程导致cpu占用率较高 使用jstack工具导出堆栈信息 jstack pid > error.log 将3958转换为16进制f76 查找该线程的堆栈信息 grep -A 15 0xf76 error.log 定位到具体的代码即可 ...
  • linux cpu使用测试

    2019-02-13 10:00:06
    linuxcpu利用常见脚本测试说明。
  • Linux CPU占用率过高时问题排查

    万次阅读 2019-04-11 12:13:46
    1.查看CPU占用率高的进程 1.1> top 1.2> 用ps -eo pid,pcpu | sort -n -k 2 2.确定高cpu消耗的线程 2.1>top -H 2.2>ps H -eo pid,tid,pcpu | sort -n -k 3 3.查看进程的线程 3.1>pstree -p ...
  • 步骤 1....在telnet终端上运行”top –d 1”,查看哪个pid的线程CPU占有最高,记下这个值。 步骤 4.按’q’退出top,或者另外再起一个telnet终端登录单板。 步骤 5.在telnet终端上运行gdb,不需要带
  • sar -P ALL 1 10 使用sar命令,sar -P ALL 1 10 表示...%nice 改变过优先级的进程的CPU使用 %system 内核空间的CPU使用 %iowait CPU等待IO的百分比 %steal 虚拟机的虚拟机CPU使用的CPU %idle 空闲的CPU ...
  • 如何查看linux CPU占用率

    千次阅读 2018-04-26 10:09:14
    如何查看CPU占用率?top -bn 1 -i -csar -P 0 -u 1 5
  • 1、我们使用top命令查找java命令下cpu占用最高的进程: 例如pid为9595的进程是占用cpu使用最大的。 2、使用 top -H -p 9595 查看当前pid为9595进程下各线程占用cpu情况 我们现在看到,pid为10034的线程占用...
  • 本人对linux的命令使用的不是太熟练,经常会用到一些命令,却总是记不清楚...查看cpu的使用 #top 可以查看到cup的使用和空闲 内存使用情况 #free -k 查看内存的使用情况的swap的使用情况 查看系统进程...
  • 关键词:top、perf、sar...top是最常用的查看系统资源使用情况的工具,包括CPU、内存等等资源。 这里主要关注CPU资源。 1.1 /proc/loadavg load average取自/proc/loadavg。 9.53 9.12 8.37 3/889 28165 前三个.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,308
精华内容 32,923
关键字:

linux查看cpu占用率

linux 订阅