CPU和内存监测

CPU和内存监测

vmstat命令的VM模式

vmstat可以监测给定时间间隔的服务器的状态值,包括CPU的使用率,内存的使用,虚拟内存的交换情况,IO读写情况。
主要从/proc/meminfo,/proc/stat和/proc/*/stat中获取数据

常用手段vmstat [采样的时间间隔秒数] [采样的次数],举例如下:

[root@dtbase-master-2 /root]
#vmstat 5 10
procs    -----------memory----------   ---swap--  -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache       si   so    bi   bo    in    cs us sy id wa st
 1  0      0 4126684 314132 58308212    0    0     0   637     0     0  2  1 97  0  0
 1  0      0 4256016 314132 58308420    0    0     0 42898 19349 35174  3  2 95  0  0
 4  0      0 4010396 314132 58474112    0    0     0 68072 19846 37088  4  2 93  0  0
 1  0      0 4180556 314132 58308800    0    0     0 67730 19228 34979  4  2 94  0  0
 1  0      0 4158408 314140 58313740    0    0     1 36034 19217 39319  4  2 94  0  0
 2  0      0 4185816 314144 58313892    0    0     0 43252 19071 33302  3  2 95  0  0
 2  0      0 4237076 314144 58314180    0    0     0 43059 18850 36224  3  2 95  0  0
 1  0      0 4174432 314144 58314432    0    0     0 29495 18353 35612  3  2 95  0  0
 2  0      0 4168024 314144 58318984    0    0     0 49652 19954 38394  3  2 94  0  0
 0  0      0 4241088 314144 58319304    0    0     0 36272 17563 32637  2  1 97  0  0

上述命令表示每5秒采样一次,采样10次,因此输出10条记录,如果不指定采样次数的话,就一直采集直到用户手动停止采集。

上述显示中每一列的含义介绍如下:
*procs部分
* r 表示运行队列,表示Runnable状态的进程数,表示等待CPU的进程数量,越高意味着CPU越忙。
* b 表示阻塞的进程,表示uninterruptible sleep状态的进程数,通常可以认为表示等待IO的进程数量。
* memory部分
* swpd 表示已使用的交换空间大小,如果大于0,表示内存不足了。
* free 表示空闲的物理内存大小,单位是KB,上面表示还剩4G物理内存空闲
* buff 表示要输出到块设备但还缓存在内存中的数据
* cache 表示从块设备读入到内存中,缓存在内存中的数据,不包括tmpfs消耗的内存大小
* swap部分
* si 表示每秒有多少块从磁盘换入内存,如果这个值大于0,表示物理内存耗尽了
* so 表示每秒有多少块从内存换入磁盘,如果这个值大于0,表示物理内存耗尽了
* io部分
* bi 表示从块设备每秒收到的块数量,单位为blocks/s
* bo 表示每秒发到块设备的块数量,单位为blocks/s
* system部分
* in 表示每秒CPU的中断次数,包括时间中断
* cs 表示每秒上下文切换次数,越小越好
* cpu部分
* us 表示用户cpu时间,就是非内核态运行的CPU时间,单位是百分比
* sy 表示系统cpu时间,就是内核代码运行时间,单位是百分比
* id 表示空闲CPU时间,单位是百分比
* wa 表示等待IO的CPU时间,单位是百分比
* st 虚机占用的时间,单位是百分比
上述内存、交换区、IO统计的单位是块数,通常在Linux中一个块是1K字节。

free命令

参数和用法

free命令用于查看系统整体的内存使用情况,它的参数如下:
* -b/-k/-m/-g,调整显示单位,分别表示以字节/千字节/兆字节/吉字节为单位显示,默认是-k
* -t,增加一行显示内存总量,包括总内存量、总已用内存量和总空闲内存量
* -o,不显示buffer/cache调整行,就是-/+ buffers/cache行
* -l,增加两行显示低端和高端内存统计
* -s/-c,表示采样时间和采样次数

free命令的信息从/proc/meminfo中获取,meminfo函数可以解析meminfo的信息

输出分析

free命令输出举例如下:

#free -l -t 
             total       used       free     shared    buffers     cached
Mem:      99174024   95247820    3926204          0     314920   58382632
Low:      99174024   95247820    3926204
High:            0          0          0
-/+ buffers/cache:   36550268   62623756
Swap:      2097144          0    2097144
Total:   101271168   95247820    6023348

上述各行含义分别是:
* Mem:这行是表示从OS角度看系统内存的使用情况。
* total表示物理内存总量
* used表示
* free
* shared表示几个进程共享的内存,目前已经废弃,总是0。
* buffers,表示被OS buffer的内存,也就是缓冲要输出到块设备的数据
* cahced,表示被OS cache的内存,是OS从磁盘读出缓存到内存中的数据
* Low:表示从OS角度看的低端内存使用情况
* High:表示从OS角度看的高端内存使用情况,上面因为是64位系统,因此高端内存部分为0。
* -/+ buffers/cache:
* used,表示从一个应用程序的角度看,系统有多少内存被用掉了。
* free,表示从一个应用程序的角度看,系统还要多少剩余内存可用。
* Swap:表示交换区信息。
* Total:表示总量。
一般为了提高性能,操作系统总是会将磁盘的数据预先读到内存,而要写入磁盘的数据则先缓存在内存中,因此会看到free列比较小,而buffers/cache列比较大。

top命令

top命令用来实时监控系统的CPU、内存等负载状态,可以按照进程实时输出各进程占用的资源状态。

参数和用法

启动参数如下:
* -p 指定进程号,仅监控某个进程
* -c 显示整个命令行,而不仅仅是命令名

交互命令如下:
* h,输出帮助
* k,杀死进程,需要根据提示输入PID
* i,忽略闲置和僵尸进程,就是忽略掉不占用CPU的进程
* f,选择显示的列,是交互设置的,新版本还可以设置按照哪一列排序,老版本支持的字段较少。
* q,退出程序

输出分析

top - 16:44:59 up 3 days, 30 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
KiB Mem:   1883984 total,  1797296 used,    86688 free,   169388 buffers
KiB Swap:  2097148 total,        0 used,  2097148 free.   230428 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                        
15597 root      20   0 2809456 721308   9592 S  0.0 38.3  28:37.43 java                                          
  • 首行显示系统负载和系统运行时间,当前登录用户数
  • Tasks行显示当前系统进程按状态的统计数
  • %Cpus显示当前系统的CPU消耗百分比
  • Kib Mem显示内存使用量
  • Kib Swap显示交换空间使用了量

ps命令

用于显示进程信息,有两种参数格式,一种是标准格式ps -opt,一种是BSD格式ps opts

典型用法

  • 查看所有进程
    • ps aux / ps ax
    • ps -eF / ps -ef / ps -ely / ps -e
  • 显示线程信
    • ps -eLf
    • ps axms
  • 树形结构显示
    • ps -ejH
    • ps axjf
  • 格式化输出列,格式化输出支持的选项,具体可以查看man ps的STANDARD FORMAT SPECIFIERS部分
    • ps -eo [column1], [column2]
    • ps axo [column1], [column2]
  • 按用户输出
    • ps U [username]
  • 排序支持,使用–sort选项,–sort spec,这里的spec格式为[+|-]key[,[+|-]key],默认是+排序,表示升序
    • ps -e –sort=uid,-pid,表示按照uid升序,pid降序排序输出

输出分析

  • USER 用户名
  • UID 用户ID(User ID)
  • PID 进程ID(Process ID)
  • PPID 父进程的进程ID(Parent Process id)
  • SID 会话ID(Session id)
  • %CPU 进程的cpu占用率
  • %MEM 进程的内存占用率
  • VSZ 进程所使用的虚存的大小(Virtual Size)
  • RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
  • TTY 与进程关联的终端(tty)
  • STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
    • R 运行 Runnable (on run queue)
    • S 睡眠 Sleeping
    • I 空闲 Idle
    • Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
    • D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
    • T 终止 Terminate,进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
    • P 等待交换页
    • W 无驻留页 has no resident pages,没有足够的内存分页可分配。
    • X 死掉的进程
    • < 高优先级进程 高优先序的进程
    • N 低优先 级进程 低优先序的进程
    • L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
    • s 进程的领导者(在它之下有子进程);
    • l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
      • 位于后台的进程组
  • START 进程启动时间和日期
  • TIME 进程使用的总cpu时间
  • COMMAND 正在执行的命令行命令
  • NI 优先级(Nice)
  • PRI 进程优先级编号(Priority)
  • WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
  • FLAGS 与进程相关的数字标识

IO监测

iostat

参数和用法

iostat命令的参数介绍如下
* -c,显示CPU利用率,默认启用,单独指定后默认不输出设备利用率
* -d,显示设备利用率,默认启用,单独指定后默认不输出cpu利用率
* -h,配合-n选项使用,使NFS系统的报告更human readable
* -k/-m,调整输出单位,千字节每秒或者兆字节每秒,默认单位是块每秒
* -N,显示磁盘阵列信息
* -n,显示NFS网络文件系统的IO报告
* -p,可指定分区查看,格式为-p [{device [,…]} | ALL]
* -t,输出时打印时间
* -x,输出扩展信息,就是输出更详细的信息,一般都使用该参数。
* -z,忽略没有活动的设备的输出
用法如下
iostat [参数] [采样时间秒数] [采样次数]
iostat -c 2 每隔2秒显示1次CPU统计信息
iostat -d 2 每隔2秒显示1次设备统计信息
iostat -d -x 2 10每隔2秒显示1次设备扩展统计信息,共显示10次。
iostat -d sda sdb -x 2 10 每隔2秒显示1次设备sda和sdb的扩展统计信息,共显示10次。

输出分析

#iostat -x  1 6   
Linux 2.6.32-220.23.2.ali878.el6.x86_64 (dtbase-master-2)       07/08/2016      _x86_64_        (32 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.03    0.00    1.14    0.01    0.00   96.82

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.01  3964.69    0.17  591.78     7.41 41068.15    69.39     0.14    0.24   0.03   1.75

#iostat -d 5 1
Linux 2.6.32-220.23.2.ali878.el6.x86_64 (dtbase-master-2)       07/08/2016      _x86_64_        (32 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             593.11         7.39     41159.65    5836572 32509188906

上述输出中各部分信息描述如下:
* avg-cpu部分,对应-c输出的内容
* %user,表示用户CPU时间百分比
* %nice,表示用户态CPU的nice操作消耗的CPU时间百分比
* %system,表示内核CPU时间百分比
* %iowait,表示CPU花在io等待上的时间百分比
* %steal,表示虚机占用的CPU时间百分比
* %idle,表示CPU空闲时间百分比
* device部分,对应-d输出的内容
* rrqm/s,表示每秒这个设备有多少读取请求被Merge了,当系统调用读取数据时,VFS将请求发给各个FS,各个FS会根据请求是否是读取相同的block来合并读请求。
* wrqm/s,表示每秒这个设备有多少写请求被Merge了。
* r/s,表示每秒发送到设备的读取请求数
* w/s,表示每秒发送到设备的写入请求数
* rsec/s,表示每秒读取的扇区数量
* wsec/s,表示每秒写入的扇区数量
* avgrq-sz,表示发送到设备的请求的平均大小,单位是扇区
* avgqu-sz,表示发送到设备的请求的平均队列长度
* await,表示IO请求的平均执行时间,包括发送请求和执行的时间,但是为毫秒
* svctm,表示发送到设备的IO请求的平均执行时间,单位是毫秒,这里仅包含执行时间,不包含发送请求的时间
* %util,表示设备带宽利用率,实际是IO请求发送到设备期间占用的CPU时间的百分比。
* tps,表示该设备每秒的传输次数,一次传输是一次IO,多个逻辑IO可能被合并为一次物理IO,一次IO的大小未知。
* blk_read/s,表示每秒读入块的数量
* blk_wrtn/s,表示每秒写入块的数量
* blk_read,表示系统启动以来读入块的总数
* blk_wrtn,表示系统启动以来写入块的总数

vmstat的disk和partition模式

disk模式

vmstat -d [采样时间] [采样次数],列出所有块设备的读写情况,每个块设备一行。

[root@iZ2371imwx3Z ~]# vmstat -d 5 2
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
xvda  2143955  51246 98066178 79024080 787667 454849 30875448 26476350      0   2937
xvda  2143955  51246 98066178 79024080 787668 454849 30875456 26476352      0   2937

上述命令中各个字段的含义是:
* reads部分
* total,表示系统启动到现在完成读的总次数
* merged,表示系统启动到现在group读的次数,group read是反映为一次IO
* sectors,表示系统启动到现在读了多少个扇区
* ms,表示系统启动到现在读消耗的毫秒数
* writes部分
* total,表示系统启动到现在完成写的总次数
* merged,表示系统启动到现在group写的次数,group write反映为一次IO
* sectors,表示系统启动到现在写了多少个扇区
* ms,表示系统启动到现在写消耗的毫秒数
* IO部分
* cur:正在处理的IO数
* sec,表示系统启动到现在IO消耗的时间

partition模式

vmstat -p 设备分区 [采样时间] [采样次数],列出指定分区的读写情况

[root@iZ2371imwx3Z ~]# vmstat -p /dev/xvda1 5 2
xvda1         reads   read sectors  writes    requested writes
             2143776   98064746     788481   30893256
             2143776   98064746     788482   30893288

上述命令中各个字段的含义如下:
* reads,表示系统启动到现在此分区上总的读次数
* read sectors,表示系统启动到现在此分区上读的扇区总数
* writes,表示系统启动到现在此分区上总的写次数
* requested writes,表示系统启动到现在对此分区的写请求总数

网络监测

netstat

netstat命令用来显示网络连接状态信息,这个命令官方已经废弃,可以用ss代替

参数和用法

  • -r, 显示路由表信息,现在由ip route命令替代。
  • -g,显示组播信息,现在由ip maddr命令替代。
  • -i,显示接口信息,包括接口的MTU、二层包统计,接口标签信息。现在由ip -s link替代
  • -s,显示各协议的总的统计信息
  • -v,显示详细信息
  • -W,宽显示,不会截断ip地址
  • -n,以数字形式显示地址端口用户,而不是以DNS、协议名、用户名显示
  • –protocol=family,指定协议族,包括inet, inet6, unix, ipx, ax25, netrom, econet, ddp,可以简写为-4, -6 -x
  • -c,每秒连续输出
  • -e,显示扩展信息,目前主要是增加了user和inode列显示
  • -o,增加一列显示定时器信息
  • -p,增加一列显示该socket所属的进程号和进程信息
  • -l,仅显示监听端口,监听端口默认是不输出的
  • -a,显示监听和非监听的端口
  • -r -F,输出FIB的路由信息,内核路由表
  • -r -C,输出路由缓存的路由信息,内核路由缓存
  • delay 整数参数,指定每个多少秒输出一次

典型用法:
netstat -anp

输出分析

[root@iZ2371imwx3Z ~]# netstat --protocol=inet -a -W -e -o -v -p 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name     Timer
tcp        0      0 0.0.0.0:https           0.0.0.0:*               LISTEN      root       315002     15597/java           off (0.00/0/0)
tcp        0      0 localhost:mxi           0.0.0.0:*               LISTEN      root       315068     15597/java           off (0.00/0/0)
tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      root       314999     15597/java           off (0.00/0/0)
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      root       314998     15597/java           off (0.00/0/0)
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       13009      780/sshd             off (0.00/0/0)
tcp        1      0 iZ2371imwx3Z:http       iZ2371imwx3Z:55825      CLOSE_WAIT  root       906801     15597/java           off (0.00/0/0)
tcp        0      0 iZ2371imwx3Z:45708      69.172.201.153:http     ESTABLISHED root       734431     15597/java           off (0.00/0/0)
tcp        0      0 iZ2371imwx3Z:45613      69.172.201.153:http     ESTABLISHED root       882000     15597/java           off (0.00/0/0)
tcp        1      0 iZ2371imwx3Z:http       iZ2371imwx3Z:42164      CLOSE_WAIT  root       890885     15597/java           off (0.00/0/0)

#netstat -x -e -o -p
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  2      [ ]         DGRAM                    23365  9251/java           @alimonitor9251
unix  2      [ ]         DGRAM                    15468  2820/java           @alimonitor2820
unix  2      [ ]         DGRAM                    26408  9670/java           @alimonitor9670
unix  2      [ ]         DGRAM                    9514   1108/udevd          @/org/kernel/udev/udevd
unix  3      [ ]         STREAM     CONNECTED     62870049 19964/syslog-ng     /dev/log
unix  3      [ ]         STREAM     CONNECTED     62870048 17807/pickup        
  • Inet和Inet6域Socket的输出
    • Proto,当前socket的协议类型,tcp、udp、udpl、raw
    • Recv-Q
      • ESTABLISHED状态表示用户程序还没有从这个socket读取的字节数
      • LISTENING状态表示当前的syn backlog
    • Send-Q
      • ESTABLISHED状态表示对端没有ACK的字节数
      • LISTENING状态表示syn backlog的最大size
    • Local Address:本地地址和端口
    • Foreign Address:对端地址和端口
    • State,表示socket状态,一般仅在TCP下才有效,对应TCP的各个状态
    • User,表示这个socket的属主
    • PID/Program name,表示这个socket所属进程的PID和进程名
  • UNIX域socket的输出
    • Proto,当前协议类型,unix
    • RefCnt,当前socket关联的进程数
    • Flags,socket选项
    • Type,socket类型,包括数据报、流类型、RAW类型、RDM、SEQPACKET类型、SOCK_PACKET
    • State,Free未分配,CONNECTING表示连接建立,空表示未连接
    • Path,表示该socket路径

ss

ss用于替代netstat命令,用于输出socket的统计信息,输出类似netstat,可以显示更详细的TCP状态信息。

参数和用法

大部分参数和netstat一样,下面描述几个特有的参数
* -i,输出TCP内部的一些信息,包括各个连接的水位、选项的值。
* -m,输出socket的一些内存使用信息
* -s,按协议输出统计信息
* -D filename,dump socket原始信息到文件,这里是二进制信息。
* -t/-u/-4/-6/-x/-w/-0,指定协议的快捷选项,分别表示tcp、udp、ip、ipv6、unix、raw、packet

ifconfig

显示接口信息,目前ip命令可以实现其所有功能,这个命令正逐步被废弃。

参数和用法

  • -a,显示所有接口,包括down的接口,默认down接口不显示
  • -s,简要显示,类似netstat -i
  • up/down 启用/禁用接口
  • arp/-arp 在指定接口上启用/禁用ARP
  • promisc/-promisc 在指定接口上启用/禁用混杂模式
  • allmulti/-allmulti,在指定接口上启用/禁用组播
  • mtu N,设置MTU
  • dstaddr addr,点对点链路配置远端地址
  • netmask addr,设置网络掩码
  • add addr/prefixlen,添加地址
  • del addr/prefixlen,删除地址
  • media type,设置接口媒体类型
  • broadcast addr,设置或者取消接口广播地址
  • pointopoint [addr],设置接口为点对点模式,addr表示远端的协议层地址
  • hw class address,设置接口硬件地址,class包括ether、ax25、ARCnet、netrom

典型用法

ifconfig [接口名] 选项
ifconfig eth0 add 192.168.1.1/24

输出分析

[root@iZ2371imwx3Z ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.252.100.80  netmask 255.255.248.0  broadcast 10.252.103.255
        ether 00:16:3e:00:85:43  txqueuelen 1000  (Ethernet)
        RX packets 27674  bytes 5689074 (5.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 33051  bytes 4136017 (3.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ip

ip是显示和管理网络设备、路由、邻接表、策略路由、隧道的命令,功能强大。

参数和用法

链路管理

ip link

地址管理

ip addr

路由管理

ip route

ARP和邻接表管理

ip neigh
ip ntable

路由策略管理

ip rule

TCP Metric管理

ip tcp_metrics

ip隧道管理

ip tunnel

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值