精华内容
下载资源
问答
  • 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
    

    显示详情:

    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/vda1 41151808 3794244 35244132 10% /
    devtmpfs 930644 0 930644 0% /dev
    tmpfs 941116 0 941116 0% /dev/shm
    tmpfs 941116 468 940648 1% /run
    tmpfs 941116 0 941116 0% /sys/fs/cgroup
    tmpfs 188224 0 188224 0% /run/user/0

    说明

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

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

    (磁盘--也叫硬盘--或是U盘--或是移动硬盘)
    1、硬盘与内存都是存储器,一个是内部,一个是外部。
    
    2、硬盘与内存的区别是很大的,这里只谈最主要的三点:
    	1)内存是计算机的工作场所,硬盘用来存放暂时不用的信息;
    	2)内存是半导体材料制作,硬盘是磁性材料制作;
    	3)内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。
    	
    3、内存与硬盘的联系也非常密切:
    		硬盘上的信息永远是暂时不用的,要用请装入内存!
    		CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。
    		
    4、计算机的启动过程就是一个从硬盘上把最常用信息装入内存的过程。
    
    5、硬盘则决定你的电脑可以装下多少东西,内存则决定你的电脑开机后一次最多可以运行多少程序(如手机运行内存)。
    
    展开全文
  • 在实际工作当中,有时候需要计算某个进程的cpu使用率或者是内存使用率。 下面将介绍一种linux中计算某个指定进程的cpu使用率内存使用率的方法。

    在实际工作当中,有时候需要计算某个进程的cpu使用率或者是内存使用率。

    下面将介绍一种linux中计算某个指定进程的cpu使用率和内存使用率的方法。

    在正式开始之前,先对要使用到的文件和命令进行一下说明。

    0. /proc/uptime

    该文件中储存了两个数字,第一个数值代表系统总的启动时间,第二个数值则代表系统空闲的时间,单位都是秒

    例如,在我的工作机器上执行结果如下:

    $ cat   /proc/uptime
    5711847.49   3339234.87
    $

    1. /proc/[pid]/stat

    包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

    在此只介绍几个和本文相关的参数,其他参数就不一一介绍了,相关介绍网上有很多,请大家自行搜索。

    utime:该进程在用户态运行的时间,单位为jiffies
    stime:该进程在核心态运行的时间,单位为jiffies

    start_time:该进程启动的时间,单位为jiffies

    rss:该进程当前驻留物理地址空间的大小,单位是page

    例如,在我的工作机器上执行结果如下:

    $ cat /proc/1/stat
    1 (init) S 0 1 1 0 -1 4202752 2349 1719861150 8 23067 20 3681 34030168 1016826 20 0 1 0 1 2969600 328 4294967295 1 1 0 0 0 0 0 4096 536962595 4294967295 0 0 0 5 0 0 28 0 0
    $

    2. jiffies

    上述描述中,对于时间的计算,用了两种计量单位:秒和jiffies。

    对于秒,大家肯定都不陌生,但是jiffies就未必了。jiffies是一个全局变量,用来记录自系统启动以来产生的节拍的总数。

    启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。

    一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的值也就是Hz。

    总结起来,jiffies与秒的运算关系为:

    second = jiffies / Hz

    3. /proc/meminfo

    获取系统内存的详细信息。例如,在我的工作机器上执行结果如下:

    $ cat /proc/meminfo
    MemTotal:        8131024 kB
    MemFree:         6895932 kB
    Buffers:          502416 kB
    Cached:           307764 kB
    SwapCached:         4132 kB
    ...

    $

    下面言归正传,讲述如何在代码中计算某个进程的cpu使用率和内存使用率

    1. 计算指定进程的cpu使用率

    ①.计算系统的运行时间

    cat /proc/uptime,得到系统运行的总时间up_time

    ②. 计算process的运行时间

    cat /proc/[pid]/stat,得到进程运行的总时间total_time和进程的启动时间start_time。

    其中,total_time = stime + utime

    ③.获取系统时钟频率

    hz = sysconf(_SC_CLK_TCK);

    ④.计算cpu使用率

    seconds = up - (start_time / hz);//从进程启动到当前的时间,单位为秒

    pcpu = (((total_time * 1000ULL) / hz) / seconds);

    2. 计算指定进程的内存使用率

    ①. 获取系统的memsize

    cat /proc/meminfo

    ②.获取进程的page数

    cat /proc/[pid]/stat

    ③.获取系统的page size(单位是Byte)

    sysconf(_SC_PAGE_SIZE)

    ④.计算内存使用率

    rss = page_cnt * page_size / 1024;

    pmem = (rss * 1000UL) / memsize;

    展开全文
  • Redis 内存使用率

    千次阅读 2019-07-02 11:58:01
    used_memory:由 Redis 分配器分配的内存总量,包含了redis进程内部的开销和数据占用的内存,以字节(byte)为单位 used_memory_human:已更直观的单位展示分配的内存总量。 used_memory_rss:向操作系统申请的...

    1、Redis-cli命令行界面访问到Redis服务器

    2、输入info memory命令,返回与内存相关的数据。

     

    used_memory:由 Redis 分配器分配的内存总量,包含了redis进程内部的开销和数据占用的内存,以字节(byte)为单位

    used_memory_human:已更直观的单位展示分配的内存总量。

    used_memory_rss:向操作系统申请的内存大小。与 top 、 ps等命令的输出一致。

    used_memory_rss_human:已更直观的单位展示向操作系统申请的内存大小。

    used_memory_peak:redis的内存消耗峰值(以字节为单位)

    used_memory_peak_human:以更直观的格式返回redis的内存消耗峰值

    total_system_memory:整个系统内存

    total_system_memory_human:以更直观的格式显示整个系统内存

    used_memory_lua:Lua脚本存储占用的内存

    used_memory_lua_human:以更直观的格式显示Lua脚本存储占用的内存

    maxmemory:Redis实例的最大内存配置

    maxmemory_human:以更直观的格式显示Redis实例的最大内存配置

    maxmemory_policy:当达到maxmemory时的淘汰策略

    mem_fragmentation_ratio:碎片率,used_memory_rss/ used_memory

    mem_allocator:内存分配器

     

    当内存使用达到设置的最大阀值时,需要选择一种key的回收策略,可在Redis.conf配置文件中修改“maxmemory-policy”属性值。 Redis 淘汰策略,如下:

    • volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。
    • volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。
    • volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。
    • allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。
    • allkeys-random:从数据集合中任意选择数据淘汰
    • no-enviction:禁止淘汰数据。

    若是Redis数据集中的key都设置了过期时间,那么“volatile-ttl”策略是比较好的选择。但如果key在达到最大内存限制时没能够迅速过期,或者根本没有设置过期时间。那么设置为“allkeys-lru”值比较合适,它允许Redis从整个数据集中挑选最近最少使用的key进行删除(LRU淘汰算法)。

    参考:Redis性能问题排查解决手册(七)

    展开全文
  • Linux查看CPU使用率内存使用率

    千次阅读 2020-04-16 11:56:01
    一、CPU使用率查看 1.cat /proc/loadavg命令 $ cat /proc/loadavg 0.08 0.06 0.10 1/442 8347 前三项分别是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载为在特定时间间隔内运行队列中的平均进程数,...

    一、CPU使用率查看

    1. cat /proc/loadavg命令

    $ cat /proc/loadavg
    0.08 0.06 0.10 1/442 8347

    前三项分别是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载为在特定时间间隔内运行队列中的平均进程数,包括正在CPU上运行或者等待运行的进程。

    第四项,分子是正在运行的进程数,分母是进程总数。

    最后一项是最近运行的进程ID号。 

    2. top命令

    $ top
    top - 10:00:34 up 193 days, 15 min,  2 users,  load average: 0.03, 0.05, 0.10
    Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.8 us,  0.8 sy,  0.0 ni, 98.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 32946324 total, 10400992 free,  2478008 used, 20067324 buff/cache
    KiB Swap:        0 total,        0 free,        0 used. 28319396 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                        
    root      20   0 1230476  46344  15688 S   6.7  0.1 626:31.26 containerd                                                                                     
    root      20   0   51768   3836   2416 S   0.0  0.0 116:33.67 systemd                                                                                        
    root      20   0       0      0      0 S   0.0  0.0   0:07.89 kthreadd                                                                                       
    root      20   0       0      0      0 S   0.0  0.0   0:13.71 ksoftirqd/0                                                                                    
    root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                                   
    root      rt   0       0      0      0 S   0.0  0.0   0:15.24 migration/0                                                                                    
    root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                                                                         
    root      20   0       0      0      0 S   0.0  0.0 200:13.21 rcu_sched                                                                                      
    root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain

    与CPU使用情况相关的主要是前三行,显示的是整个系统的cpu使用状况。另外,%MEM列实时显示了每个进程的CPU使用率

    第一行是基本情况,分别是:当前时间,系统运行时长,当前登录用户数,系统平均负载(同cat /proc/loadavg命令前三个值)

    第二行是进程状况,分别是:进程总数,正在运行的进程数,睡眠的进程数,停止的进程数,僵尸进程数。

    第三行是CPU使用信息,分别是:用户空间占用CPU时间百分比,内核空间占用CPU时间百分比,用户进程空间内改变过优先级的进程占用CPU时间百分比,空闲CPU时间百分比,等待输入输出的CPU时间百分比,CPU服务于硬件中断的CPU时间百分比,CPU服务于软件中断的CPU时间百分比,被虚拟机偷走的CPU时间百分比。

    3.vmstat命令

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率, 内存使用, 虚拟内存,交换情况,IO读写情况。

    相比top,通过vmstat可以看到整个机器的 CPU,内存,IO的使用情况, 而不是单单看到各个进程的CPU使用率和内存使用率。

    vmstat如何运行 

    两个数字参数来完成的
    第一个参数: 采样的时间间隔数,单位是秒,
    第二个参数: 采样的次数
    # vmstat 2 12
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0      0 835920  80296 642904    0    0     1     1   14   69  0  0 100  0  0
     0  0      0 835920  80296 642936    0    0     0     0  216  304  1  1 99  0  0
     0  0      0 835920  80296 642936    0    0     0     0  208  313  0  1 99  0  0
     0  0      0 835920  80300 642936    0    0     0     8  186  292  0  0 99  1  0
     0  0      0 835920  80300 642936    0    0     0     0  115  274  0  0 99  0  0
     0  0      0 835920  80300 642936    0    0     0     0  115  278  0  0 100  0  0
     0  0      0 835920  80300 642936    0    0     0     0  115  280  1  0 100  0  0
     0  0      0 835920  80300 642936    0    0     0     0  117  284  0  1 99  0  0
     0  0      0 835920  80300 642936    0    0     0     0  113  276  0  0 100  0  0
     0  0      0 835920  80300 642936    0    0     0     0  114  281  0  1 100  0  0
     0  0      0 835920  80300 642936    0    0     0     0  119  285  1  0 99  0  0
     0  0      0 835920  80300 642936    0    0     0     0  111  274  0  0 100  0  0

    如果不需要加上监控时间的话, 那么就意味着每2秒监测,直到程序的结束:

    #vmstat 2
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     3  0      0 836068  80304 642936    0    0     1     1   14   69  0  0 100  0  0
     0  0      0 836044  80304 642936    0    0     0     0  228  324  0  0 100  0  0
     0  0      0 836044  80304 642936    0    0     0     0  233  334  1  1 99  0  0
    ... ...

    参数详解

    Linux 内存监控vmstat命令输出分成六个部分:

    (1)进程procs

    r:在运行队列中等待的进程数
    b:在等待io的进程数

    常见情况:

    假如 r 经常大于4 ,且 id 经常小于40,表示中央处理器的负荷很重。

    假如 bi,bo 长期不等于0,表示物理内存容量太小。

    参数含义:

    r:表示运行队列(就是说多少个进程真的分配到CPU),当前测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈 了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队 列。如果运行队列过大,表示CPU很繁忙,一般会造成CPU使用率很高。
    b:表示阻塞的进程。

    (2)内存memoy

    swpd:现时可用的交换内存(单位KB)
    free:空闲的内存(单位KB)
    buff: 缓冲去中的内存数(单位:KB)
    cache:被用来做为高速缓存的内存数(单位:KB)

    swpd:虚拟内存已使用的大小,如果大于0,表示机器物理内存不足了, 如果不是程序内存泄露的原因, 那么应该升级内存了或者把耗内存的任务迁移到其他机器。

    free: 空闲的物理内存的大小,当前显示的机器内存总共8G,剩余3415M。

    buff:Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,本机大概占用300多M。

    cache:cache直接用来记忆打开过的文件,给文件做缓冲, 这里本机大概占用300多M (这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存, 是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

    (3)swap交换页面

    si: 从磁盘交换到内存的交换页数量,单位:KB/秒
    so: 从内存交换到磁盘的交换页数量,单位:KB/秒

    si:每秒从磁盘读入虚拟内存的大小,如果这个值大于0, 表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。 

    so: 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

    (4)io块设备

    bi: 发送到块设备的块数,单位:块/秒
    bo: 从块设备接收到的块数,单位:块/秒

    bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备, 默认块大小是1024byte,此时本机上没什么IO操作,所以一直是0, 但是曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s, 磁盘写入速度差不多140M每秒

    bo: 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。 bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

    (5)system系统

    in: 每秒的中断数,包括时钟中断
    cs: 每秒的环境(上下文)转换次数

    in:每秒CPU的中断次数,包括时间中断

    cs: 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的 数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示CPU大部分浪费在上下文切换,导致CPU干正经事的 时间少了,CPU没有充分利用,是不可取的。

    (6)cpu中央处理器

    us:用户进程使用的时间,以百分比表示
    sy:系统进程使用的时间,以百分比表示
    id:中央处理器的空闲时间,以百分比表示
    wa:CPU 空闲时间,在此期间系统有未完成的磁盘/NFS I/O 请求
    st:来自于虚拟机偷取的CPU所占的百分比

    us:用户CPU时间,曾经在一个做加密解密很频繁的服务器上, 可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

    sy:系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

    id:空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率, us是用户CPU使用率,sy是系统CPU使用率。

    4. sar命令

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

    输出CPU使用率的统计信息

    sar 10 3    //每10秒采样一次,连续采样3次
    sar -u 10 3  //同上
    sar       //输出全天cpu使用率的统计信息
    sar -p     //同上
    sar -P ALL 2 3  //每2秒采样一次,连续采样3次,输出CPU每个核心的使用率

    例如每1秒采集一次CPU使用率,共采集5次。

    # 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 的使用情况。

    # 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

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

    # 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次。

    # 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命令也可以获取过去指定日期的性能参数。

    # 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

    5. mpstat

    mpstat是MultiProcessor Statistics的缩写,是一个实时系统监控工具,输出CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPU系统里,其不但能查看所有CPU的平均统计信息,而且能够查看特定CPU的信息

    显示所有CPU整体(平均)使用状况:

    # mpstat        //不带参数时,输出为从系统启动以来的平均值
    Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)
    
    03:14:40 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    03:14:40 PM  all    1.59    0.05    0.74    0.05    0.00    0.04    0.03    0.00   97.51
    
    # mpstat 1 5    //每1秒收集一次,共5次
    Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)
    
    03:25:58 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    03:25:59 PM  all    0.13    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.62
    03:26:00 PM  all    0.38    0.00    0.38    0.00    0.00    0.13    0.00    0.00   99.12
    03:26:01 PM  all    2.01    0.00    1.01    0.00    0.00    0.00    0.13    0.00   96.86
    03:26:02 PM  all    0.38    0.00    0.38    0.00    0.00    0.00    0.00    0.00   99.25
    03:26:03 PM  all    0.25    0.00    0.25    0.00    0.00    0.13    0.00    0.00   99.37
    Average:     all    0.63    0.00    0.45    0.00    0.00    0.05    0.03    0.00   98.85

    显示所有CPU的使用状况:

    # mpstat -P ALL 10 20  //每10秒收集一次数据,共20次
    Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)
    
    03:12:59 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    03:13:09 PM  all    0.41    0.00    0.34    0.03    0.00    0.05    0.04    0.00   99.13
    03:13:09 PM    0    1.01    0.00    0.70    0.20    0.00    0.00    0.00    0.00   98.09
    03:13:09 PM    1    1.21    0.00    0.71    0.00    0.00    0.40    0.20    0.00   97.47
    03:13:09 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:13:09 PM    3    0.10    0.00    0.30    0.00    0.00    0.00    0.00    0.00   99.60
    03:13:09 PM    4    0.30    0.00    0.30    0.00    0.00    0.00    0.00    0.00   99.40
    03:13:09 PM    5    0.50    0.00    0.40    0.00    0.00    0.00    0.00    0.00   99.10
    03:13:09 PM    6    0.10    0.00    0.10    0.00    0.00    0.00    0.00    0.00   99.80
    03:13:09 PM    7    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.80
    ....

    输出项说明:

    %usr:表示处理用户进程所使用CPU的百分比
    %nice:表示使用nice命令对进程进行降级时CPU的百分比
    %sys:表示内核进程使用的CPU百分比
    %iowait:表示等待进行I/O所使用的CPU时间百分比
    %irq:表示用于处理系统中断的CPU百分比
    %soft:表示用于软件中断的CPU百分比
    %steal:显示虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比
    %guest:显示运行虚拟处理器时CPU花费时间的百分比
    %idle:显示CPU的空闲时间百分比

    6. iostat

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

    # 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

    7. dstat

    每秒cpu使用率情况获取

    #  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的进程获取

    # 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

    8. uptime命令

    uptime命令是一个简单的获取系统总共运行时长,以及最近1分钟、5分钟、15分钟的平均负载的工具。uptime命令输出内容与top命令输出首行内容一样,不再赘述。

    # uptime
     15:40:19 up 203 days, 23:15,  2 users,  load average: 0.01, 0.01, 0.00

    9. pidstat命令

    pidstat命令主要用于监控全部或指定进程占用系统资源的情况。

    # pidstat
    Linux 2.6.32-642.13.1.el6.x86_64 (appstore-nginx-test)     01/03/2020     _x86_64_    (8 CPU)
    
    03:48:26 PM       PID    %usr %system  %guest    %CPU   CPU  Command
    03:48:26 PM         1    0.00    0.01    0.00    0.01     5  init
    03:48:26 PM         2    0.00    0.00    0.00    0.00     1  kthreadd
    03:48:26 PM         3    0.00    0.00    0.00    0.00     0  migration/0
    03:48:26 PM         4    0.00    0.00    0.00    0.00     0  ksoftirqd/0
    03:48:26 PM         6    0.00    0.00    0.00    0.00     0  watchdog/0
    03:48:26 PM         7    0.00    0.00    0.00    0.00     1  migration/1
    ....

    10. ps ux命令

    ps ux 命令列出的是当前服务器的所有进程状态信息,其中包括了各个进程的cpu使用率。

    # ps ux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.0  19364  1632 ?        Ss    2019  18:20 /sbin/init
    root          2  0.0  0.0      0     0 ?        S     2019   0:00 [kthreadd]
    root          3  0.0  0.0      0     0 ?        S     2019   0:46 [migration/0]
    root          4  0.0  0.0      0     0 ?        S     2019   3:13 [ksoftirqd/0]
    root          5  0.0  0.0      0     0 ?        S     2019   0:00 [stopper/0]
    root          6  0.0  0.0      0     0 ?        S     2019   0:39 [watchdog/0]
    root          7  0.0  0.0      0     0 ?        S     2019   0:35 [migration/1]
    ....

    二、查看内存使用率

    1. top命令

    内存使用率: used/ total

    2. free命令

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

    free [参数]

    free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略

    参数:

    -b  以Byte为单位显示内存使用情况。 
    
    -k  以KB为单位显示内存使用情况。 
    
    -m  以MB为单位显示内存使用情况。
    
    -g   以GB为单位显示内存使用情况。 
    
    -o  不显示缓冲区调节列。 
    
    -s<间隔秒数>  持续观察内存使用状况。 
    
    -t  显示内存总和列。 
    
    -V  显示版本信息。

    使用示例:

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

    实际输出: 

    # free
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384944
    Swap:             0           0           0

    解释:

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

    查看额定值:

    cat /proc/meminfo 
    # 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

    那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的内存太少了,也是该考虑优化程序或加内存了。

    以总和的形式显示内存的使用信息

    free -t 
    # free -t
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    Total:      1882232      331760      811004

    周期性的查询内存使用信息

    free -s 10
    # 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

    三、查看磁盘使用率

    # df

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

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

    (磁盘--也叫硬盘--或是U盘--或是移动硬盘):

    (1)硬盘与内存都是存储器,一个是内部,一个是外部。

    (2)硬盘与内存的区别是很大的,这里只谈最主要的三点:

             a. 内存是计算机的工作场所,硬盘用来存放暂时不用的信息;

             b. 内存是半导体材料制作,硬盘是磁性材料制作;

             c. 内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。

    (3)内存与硬盘的联系也非常密切:
            硬盘上的信息永远是暂时不用的,要用请装入内存!
            CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。

    (4)计算机的启动过程就是一个从硬盘上把最常用信息装入内存的过程。

    (5)硬盘则决定你的电脑可以装下多少东西,内存则决定你的电脑开机后一次最多可以运行多少程序(如手机运行内存)。
     

    参考博客:https://www.cnblogs.com/leaves1024/p/12143968.html

    参考博客:https://blog.csdn.net/wujizhishui/article/details/89333957

    参考博客:https://blog.csdn.net/wujizhishui/article/details/89333991

    参考博客:https://www.linuxidc.com/Linux/2016-12/138598.htm

    展开全文
  • 正确计算linux系统内存使用率

    万次阅读 2018-08-12 09:03:14
    图中的例子很典型,就是:多数的...具体的机制我们无需知道,我们需要知道的是,linux的内存管理机制的思想包括(不敢说就是)内存利用最大化。内核会把剩余的内存申请为cached,而cached不属于free范畴。当...
  • 环境介绍: ...注:使用模板监控的时候1、监控项只能获取到CPU的1分钟5分钟15分钟的平均值,不能查看到实时的CPU峰值。2、监控内存只能查看内存的剩余,无法查看实时峰值。 操作介绍: cpu 监控key 值:...
  • Zabbix 监控 内存 使用率

    千次阅读 2019-08-13 10:40:04
    1、编写脚本 cd /etc/zabbix/scripts touch mem_usage.sh vi mem_usage.sh #内容如下 #!/usr/bin/bash mem_used=`free -m | grep '^Mem:' | awk '{print $3}'` mem_total=`free -m | grep '^Mem:' | awk '{print...
  • 【服务器】关于内存使用率的问题

    千次阅读 2017-09-11 18:22:57
    内存使用率指的是此进程所开销的内存。占内存大的程序不一定会占用很多的CPU资源,而占CPU大的程序也不一定开销太大的内存。某一程序的CPU占用率过高会影响其他程序的运行。而某一程序占用内存过大,会影响机器的...
  • 内存使用量减少高达90%的方法 使用棒球比赛日志 数据帧的内部表示 了解子类型 使用子类型优化数值列 将Numeric与String存储进行比较 使用分类优化对象类型 读取数据时选择类型 分析棒球比赛 总结和后续...
  • Linux下内存使用率、CPU使用率、以及运行原理 Linux下怎样查看机器配置啊?cpu/内存/硬盘 dmesg 显示开机信息。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg...
  • 2. 每间隔10分钟收集所有物理服务器CPU、内存使用率、网络带宽流量  Python 版本说明 Python 是由 Guido van Rossum 开发的、可免费获得的、非常高级的解释型语言。其语法简单易懂,而其面向对
  • 说明:cpu使用率,可以采用jdk8原生的方法,但是有博客说不太准确,这里不做说明。 import cn.hzp.util.linuxinfo.bean.CpuInfoBean; import com.sun.management.OperatingSystemMXBean; import l
  • 2016-05-06中午11:56,收到“[sentry2]2016-05-06 11:56:09 xxxxxxhost xxx...马上到 Sentry 监控系统查看了该服务的“服务器监控”指标,发现其中2台机器的内存使用量都超过了90%,另外2台尽然没有监控数据(以前是...
  • 编程获取cpu、内存和硬盘的使用率

    千次阅读 2018-04-19 14:44:34
    1. 获取cpu使用率 #include &lt;stdio.h&gt; #include &lt;unistd.h&gt; /* cpu_info_t结构体存放cpu相关信息 */ typedef struct _cpu_info { char name[20]; unsigned int user; unsigned ...
  • "proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc... 1、从/proc文件系统获取相关的性能参数 cpu使用率
  • 打开performance_schema ...打开内存监控 update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%'; 查看监控 select * from sys.x$memory_by_host_by_current_by...
  • 一、基于SNMP通过OID获取思科交换机的CPU、内存使用率1.获取CPU使用率的OID:1.3.6.1.4.1.9.2.1.56.0 过去5秒中CPU使用率1.3.6.1.4.1.9.2.1.57.0 过去1分钟CPU使用率1.3.6.1.4.1.9.2.1.58.0 过去5分钟CPU使用率2....
  • HP UX内存使用率问题

    万次阅读 2011-03-18 19:38:00
     memory),前两个量都包含一个带括号的数据,表示的是活动(active)实存使用量或活动(active)虚存使用量,Eric  Herberholz 在 Memory Usage(What is using all of the memory?) 一文中对 active  的解释...
  • 本文详细介绍通过shell脚本实现对服务器性能的监控,宽带使用率,网卡流量、CPU占用率、内存和硬盘使用率,并设置某一参数超限,自动发邮件提醒 1、编写shell脚本 命令:vim checklinux.sh 输入下面脚本内容 #CPU、...
  • 查看linux系统中空闲内存/物理内存使用/剩余内存查看系统内存有很多方法,但主要的是用top命令和free 命令当执行top命令看到结果,要怎么看呢?这里说明一下:Mem: 666666k total, 55555k used,并不是代表你的应用...
  • 【Windows】获取内存及CPU使用率

    千次阅读 2012-12-17 16:33:29
    一、获取系统内存使用率 //内存使用率;使用方法:getMemoryUsage() //原理,直接调用windows.h中的系统api #include #include using namespace std; DWORD getMemoryUsgae() { MEMORYSTATUS ms; ::...
  • 想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了。 方法就是读取proc下的文件来获取了。 cpu使用率: /proc/stat ,内存使用情况: /proc/meminfo 看程序 : /*****************
  • "proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。"  这里将...
  • 获取CPU使用率脚本(vbs),另存为cpu.vbs:On Error Resume Next Set objProc = GetObject("winmgmts:\\.\root\cimv2:win32_processor='cpu0'") ...获取内存使用率脚本(vbs)...
  • 想从zabbix数据库里获取cpu内存使用率的值,具体在哪里的。 百度看,items表里的key值代表不同的内容,然后去不同的history表中找,但是itemid对不上啊=3=。 跪求大神告知去哪里找这些值。 万谢。
  • 3、查看cpu和内存的使用率 4、查看硬盘大小 1、查看cpu的方法 cat /proc/cpuinfo 2、查看内存使用 free -m total:表示物理,内存总量 used:总计分配给缓存(包含Buffer和cache)使用的数量,但其中可能...
  • 1、获取cpu占用情况 [root@localhost utx86]# top -n 1 |grep Cpu Cpu(s): 1.9%us, 1.3%sy, 0.0%ni, 95.9%id, 0.6%wa, 0.1%hi, 0.2%si, 0.0%st ...2、获得内存占用情况 [root@localhost utx86]# ...
  • linux查看内存使用情况

    千次阅读 2021-01-29 11:19:22
    df -k:以KB为单位显示磁盘使用量和占用 df -m:以Mb为单位显示磁盘使用量和占用 df –help:查看更多df命令及使用方法 查看内存占用情况: 1.top PID:当前运行进程的ID USER:进程属主 PR:每个进程的优先...
  • linux shell mem 内存总量 剩余 当前占用百分比 占用百分比动态平均值 #!/bin/bash #判断参数合法 if [[ $# -lt 1 ]];then echo "Usage:$0 DyAver" fi Time=`date "+%Y:%m;%d__%H:%M:%S"` DyAver=$1 if [[ ${...
  • python 监测内存和cpu的使用率

    千次阅读 2018-06-29 16:50:55
    查看内存使用率,并将信息写入到数据库中 mem = "cat /proc/meminfo|sed -n '1,4p'|awk '{print $2}'" stdin , stdout , stderr = ssh.exec_command(mem) mem = stdout.readlines() mem_total = round...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 207,896
精华内容 83,158
关键字:

平均内存使用量