Linux常用监控命令

linux是当前在服务器领域最成功操作系统,不仅性能卓越,安全性高,更重要的是提供了一套完善的监控机制,来检测系统内存、网络、cpu等运转情况,从而让用户做出应对方案,确保系统稳健运行。在工作中,常用的监控方式主要有以下命令。

uptime

uptime命令可以查看当前系统的负载,运行结果如下:

11:34:31 up 86 days, 19:39,  2 users,  load average: 0.00, 0.01, 0.00

主要是最后3个数,表示1,5,15分钟内系统负载,如果该值除以逻辑cup个数,结果大于5表明系统负荷过大。

这里的系统负载定义为CPU在特定时间间隔内运行队列中的平均进程数,进程进入队要满足下列条件:

  • 没有在等待I/O操作的结果
  • 没有主动进入等待状态,即没有调用wait
  • 没有被停止

一般来说,每个cpu内核的负载不大于3,则系统表现良好。如果cpu是4核,那么只要负载不大于12说明系统良好,如果超过12,系统就处于高负载状态,需要注意了。

扩展:cat /proc/loadavg运行结果如下:

0.00 0.02 0.00 2/182 16802

前3个数和uptime命令后3个数含义相同,表示系统负载,后面的数是当前运行进程数/总进程数, 最后一个数表示最近运行的进程id。

vmstat

vmstat能够输出指定时间间隔的一些系统核心指标,包括cpu使用率、内存使用率、虚拟内存交换、IO读写等,以便让我们更详细的了解系统的运行状态,执行结果如下:

r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 466688 267644 1967496    0    0     0     5    1    1  2  0 98  0  0    
1  0      0 466672 267644 1967516    0    0     0    28  331  481  0  1 99  0  0    
0  0      0 466796 267644 1967520    0    0     0     4  468  518  2  1 97  0  0    
  • r:运行队列大小(队列中等待分配CPU资源的进程数),该数据比平均负载更能体现cpu的负载情况,不包含等待io的进程,如果该数据达到cpu核数,说明cup资源已经饱和并出现瓶颈,一般超过3就比较高,超过5就高,超过10就危险了。
  • b:阻塞进程数。
  • swpd:虚拟内存使用大小,如果大于0,则内存不足,不是OOM引起的话,就表明要升级内存了,或者把耗内存的任务移出。
  • free:空闲的物理内存。
  • buff:缓存文件的权限等元数据。
  • cache:缓存打开的文件,是为了提高程序运行的性能,当使用时,buff/cache会很快被使用。
  • si:每秒从磁盘读入虚拟内存的大小,如果该数据大于0,表示物理内存泄露或者不足。
  • so:每秒从虚拟内存读入磁盘的大小,大于0,同si。
  • bi:块设备(磁盘)每秒接收的块数量,默认块大小1kB,磁盘写入速度差不都140M/s。
  • bo:块设备(磁盘)每秒发送的块数量,bi、bo要接近0,否则就是io频繁,要处理。
  • in:每秒cpu中断次数。
  • cs:上下文切换频率。

线程上下文切换、系统函数调用等都会造成cpu上下文切换,该值越小越好,大了就要考虑减少线程/进程数量,使其有一个合适的值。
通常通过压测,调整进程/线程数量,直到cs的值满足要求,从而找到一个合适的值。(注:切换耗时10ms,则每秒每个cpu可切换100次,在10-20倍的范围算正常,即cs值在1000-2000内还正常)。上下文切换很消耗cpu资源,如果cpu大部分时间都用在上下文切换上,干正事的时间就少了,就不会充分利用cpu。

  • us:用户cpu时间。
  • sy:系统cpu时间,如果太高,表示系统调用时间过长,如IO操作频繁。
  • id(idle):空闲cpu时间,us+sy+id=100。
  • wa(wait):io等待造成的cup时间消耗,如果数值较大,可以说明系统的瓶颈在磁盘io。
  • st(stolen):cpu被偷走的时间,一般被虚拟机消耗。

mpstat

mpstat命令报告一些cpu的统计信息,在多核cpu中,不仅能查看全部cpu的指标均值,还能够查看一个cpu的指标信息,mpstat -P[] 1(internal) 2(count)运行如下:

07:21:21 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
07:21:22 PM  all    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00   99.50
07:21:23 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:     all    0.00    0.00    0.25    0.00    0.00    0.00    0.00    0.00   99.75

-P=[0,核数-1]

  • usr:用户cpu时间占比,不包含nice值为负数的进程。
  • nice:nice值为负数的进程cpu时间占比。
  • sys:系统(核心)cpu时间占比。
  • iowait:硬盘io等待cpu时间占比,如果过大,说明系统磁盘io频繁,磁盘io可能出现瓶颈。
  • irq:cpu中断时间占比。
  • soft:cup软中断时间占比。
  • steal:
  • guest:
  • idle:cpu空间时间占比,除去io等待空闲。

如果一个cpu占用率很高,可能是由一个单线程程序引起的。

pidstat

pidstat命令报告进程的cpu占用率(-u default),内存占用率(-r),io情况(-d),可统计所有进程数据,也可以查看指定进程数据(-p),cpu占用率结果如下:

07:39:46 PM       PID    %usr %system  %guest    %CPU   CPU  Command
07:39:47 PM     21609    0.00    1.00    0.00    1.00     0  java

07:39:47 PM       PID    %usr %system  %guest    %CPU   CPU  Command
07:39:48 PM     21609    1.00    0.00    0.00    1.00     0  java

内存占用率结果如下:

07:44:49 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
07:44:50 PM       497    198.00      0.00  101164   1036   0.03  pidstat
07:44:50 PM     21609      4.00      0.00 2439932  79172   2.02  java
  • minflt/s:每秒次缺页错误次数,次缺页错误指的是虚拟内存地址映射到物理内存地址产生的page default次数。
  • majflt/s:每秒主缺页错误次数,主缺页错误指的是虚拟内存地址映射到物理内存地址产生的major page default次数,通常在内存紧张时产生。
  • VSZ:使用的虚拟内存KB。
  • RSS:使用的物理内存KB。
  • MEM:使用的内存百分比。

磁盘io情况如下:

07:52:07 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
07:54:02 PM     13885      0.00      0.00      0.00  java
07:54:03 PM     13885      0.00      0.00      0.00  java
  • kB_rd/s:进程每秒读取的数据量。
  • kB_wr/s:进程每秒写入的数据量。

iostat

iostat主要查看磁盘io情况,iostat -k 1运行结果如下:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    0.00    0.00    0.00   99.50

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.55         0.03         3.72     156733   20788752
vdb               0.05         0.00         1.18       9273    6586332

-k 表示块单位转换为kb,-d表示显示设备名称(default),-x获得更多的统计信息,-c获取cpu的一些信息avg-cpu。

  • tps:每秒传输的次数,即每秒io请求次数。
  • kB_read/s:每秒从硬盘读取字节数。
  • kB_wrtn/s:每秒写入硬盘字节数。
  • kB_read:读取字节数。
  • kB_wrtn:写入字节数。

iostat -x -k 1运行结果如下:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
vdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
  • rrqm/s:每秒进行merge的读操作数目。
  • wrqm/s:每秒进行merge的写操作数据。
  • r/s:每秒读磁盘次数。
  • w/s:
  • rkB/s:
  • wkB/s
  • avgrq-sz:平均每次I/O操作数据大小。
  • avgqu-sz:平均每次I/O操作队列长度。
  • await:平均每次I/O操作等单时间。
  • r_await:
  • w_await:
  • svctm:平均每次设备I/O操作的服务时间。
  • %util:一秒中有百分之多少的时间用于 I/O 操作。

如果%util接近100%,则I/O请求过载,磁盘可能存在瓶颈。

free

free用来查看内存情况,free -m执行结果如下:

             total       used       free     shared    buffers     cached
Mem:          3832       3154        677          0        269       2075
-/+ buffers/cache:        810       3022
Swap:            0          0          0

-m以M单位显示,默认是kB

  • Mem:从OS层面来看内存情况。
    ** shared:被进程共享的内存,已经deprecated。
    ** buffers:被os buffer的内存。
    ** cached:被os cache的内存。
  • -/+ buffers/cache:从应用程序角度来看内存情况。
    ** -buffers/cache:应用程序认为系统被用掉多少内存。
    ** +buffers/cache:应用程序认为系统剩余多少内存。
  • Swap:交换区信息。

buffer和cache的进一步理解:

buffer:A buffer is something that has yet to be "written" to disk.

cache:A cache is something that has been "read" from the disk and stored for later use.

都是为了提高I/O性能,由os管理,为了提高I/O性能,就要多cache数据,所以通常看cache比free大。

sar

sar命令格式 sar [options(-u)] [-o file] t n,该命令很强大,根据不同参数,报告不同的统计数据,可以统计cpu、硬盘、网卡等很多信息。
sar -n DEV 1报告网卡流量统计,执行结果如下:

04:01:05 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:01:06 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:01:06 PM      eth0      1.01      4.04      0.07      7.79      0.00      0.00      0.00
04:01:06 PM      eth1      1.01      2.02      0.08      0.11      0.00      0.00      0.00

-n网卡信息统计,DEV显示网络信息、EDEV显示关于网络错误信息、SOCK显示套接字信息、FULL显示全部。

  • rxpck/s:每秒接收数据包。
  • txpck/s:
  • rxkB/s:每秒接收字节。
  • txkB/s:
  • rxcmp/s:每秒接收压缩数据包。
  • txcmp/s:
  • rxmcst/s:每秒接收的多播数据包。

sar -b 1报告磁盘、缓冲区I/O情况,执行结果如下:

11:38:56 AM       tps      rtps      wtps   bread/s   bwrtn/s
11:38:57 AM      0.00      0.00      0.00      0.00      0.00
11:38:58 AM      0.00      0.00      0.00      0.00      0.00
11:38:59 AM      1.98      0.00      1.98      0.00     23.76
11:39:00 AM      0.00      0.00      0.00      0.00      0.00
  • tps:每秒进行磁盘读写的次数。
  • rtps:
  • wtps:
  • bread/s:每秒读取的字节数。
  • bwrtn/s:

sar -r 1报告swap空间使用情况,执行结果如下:

11:35:25 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
11:35:26 AM    707808   3216608     81.96    276200   2146784   2523160     64.29
11:35:27 AM    707808   3216608     81.96    276200   2146784   2523160     64.29
11:35:28 AM    707808   3216608     81.96    276200   2146784   2523160     64.29
11:35:29 AM    707808   3216608     81.96    276200   2146784   2523160     64.29
11:35:30 AM    707808   3216608     81.96    276200   2146784   2523160     64.29
11:35:31 AM    707808   3216608     81.96    276200   2146784   2523160     64.29

sar -u 1报告cpu使用情况,执行结果如下:

11:41:43 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:41:44 AM     all      0.50      0.00      0.00      0.00      0.00     99.50
11:41:45 AM     all      0.00      0.00      0.50      0.00      0.00     99.50
11:41:46 AM     all      0.00      0.00      0.00      0.00      0.00    100.00
11:41:47 AM     all      0.00      0.00      0.50      0.00      0.00     99.50
11:41:48 AM     all      2.00      0.00      0.50      0.00      0.00     97.50

sar -w 1报告上下文切换统计,执行结果如下:

11:42:44 AM    proc/s   cswch/s
11:42:45 AM      0.00    382.83
11:42:46 AM      0.00    364.00
11:42:47 AM      0.00    336.00
11:42:48 AM      1.00    379.00

-x报告指定进程的统计信息,如进程运行在那个cpu上、进程cpu占用情况等;-A显示全部信息,不在一个个说明。

top

top命令也很强大,包含了前面好几个命令检查的内容,如系统负载情况(uptime),内存使用情况(free),cpu使用情况(vmstat)等。通过top命令,可以相对全面查看系统的负载及其原因。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。
top [options] options主要如下:

  • -i设置时间间隔
  • -u设置用户
  • -p设置进程号
  • -n设置循环次数

top的输出是一个瞬时值,执行结果如下:

top - 16:51:11 up 69 days, 21:54,  1 user,  load average: 0.00, 0.00, 0.00  (uptime)
Tasks: 101 total,   1 running, 100 sleeping,   0 stopped,   0 zombie【僵尸进程】
Cpu(s):  0.2%us,  0.2%sy,  0.0%ni(nice process,改变过优先级的进程占用cpu的百分比), 99.7%id,  0.0%wa(I/O等待占用cpu的百分比),  0.0%hi(硬中断进程占用cpu百分比),  0.0%si(软中断进程占cpu百分比),  0.0%st(被偷走的cpu百分比) (vmstat)
Mem:   3924416k total,  3501784k used(内核控制的内存数,内核控制的内存不一定被使用,因为使用后的内存不会被归还free,所以free会越来越小,不用担心),   422632k free(未被内核控制的内存数),   277996k buffers   (free)
Swap:        0k total,        0k used(要特别关注,如果大于0时,说明内核在进行内存与swap区的数据交换,表明内存不足),        0k free,  2261116k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND (pidstat)
22389 root      20   0 2382m  70m  10m S  0.7  1.8 527:36.10 java                                                                                            
 1548 root      20   0  1492  260  176 S  0.3  0.0  44:57.06 aliyun-service                                                                                  
24780 root      20   0 30732 2872 2216 S  0.3  0.1  10:06.78 AliYunDunUpdate
  • PR:进程优先级。
  • NI:nice值,PR代表进程的优先级,但是不能确定其高低级别,nice可以表示进程优先级的高低级别,负表示高优先级,正表示低优先级。
  • VIRT:进程使用的虚拟内存数,VIRT=SWAP+RES。
  • RES:进程使用的屋里内存数。
  • SHR:共享内存大小。
  • S:进程状态,R=运行,S=睡眠,T=停止,Z=僵尸,D=不可中断的睡眠状态。
  • %CPU:cpu占用百分比。
  • %MEM:物理内存占用百分比。
  • TIME+:进程使用cpu总时间。

netstat

netstat报告网络相关的各种信息,如网络链路,路由表,连接状态,协议,多播成员等,常见参数如下:

  • -a(all):显示所有,默认不显示状态为listen相关的
  • -t(tcp):显示tcp协议相关的
  • -u(udp):
  • -x(unix): 显示unix协议相关的
  • -l: 仅显示listen相关的
  • -p:显示建立连接的程序名
  • -r: 显示路由表
  • -c: 执行该命令的时间间隔

netstat执行结果如下:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 114.215.25.109:8802         124.202.245.102:58429       ESTABLISHED 
tcp        0      0 iZm5efx0fms2a5b051fm4:35696 10.29.110.3:eforward        ESTABLISHED 
tcp        0      0 iZm5efx0fms2a5b051fm4:56348 100.100.25.3:http           ESTABLISHED 
tcp      401      0 iZm5efx0fms2a5b051fm4:56040 100.100.25.3:http           CLOSE_WAIT  

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    7390   @/org/kernel/udev/udevd
unix  10     [ ]         DGRAM                    8615   /dev/log
unix  2      [ ]         DGRAM                    27784664 
unix  3      [ ]         STREAM     CONNECTED     27782671 
unix  3      [ ]         STREAM     CONNECTED     27782670 

整体上看,结果分为两部分:

一个是Active Internet connections,称为有源TCP连接,"Recv-Q"和"Send-Q"是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

ps

ps命令报告进程信息,常用ps aux |grep java, aux显示所有进程(包括其他用户的进程)的详细信息,执行结果如下:

USER       PID %CPU %MEM    VSZ   RSS   TTY    STAT START   TIME COMMAND
work      6660  0.1 18.0 3619892 709948 ?      S    Jun23   1:37 /home/work/jdk-1.8/bin/java -Djava.awt.headless=true -Dfile.encoding=utf-8 -Djava.io.tmpdir=/home/work/co-channel/temp -server -Xms2048M -Xmx2048M -Xmn800M -XX:-UseCompressedClassPointers -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -Xss256K -verbose:gc -Xloggc:/home/work/co-channel/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -classpath /home/work/co-channel/conf:/home/work/co-channel/lib/co-channel-2.0.0.jar:cn.passiontec.cochannel.ApplicationActivator
  • VSZ:进程使用虚拟内存大小(virtual size)。
  • RSS:进程使用的实际内存大小。
  • TTY:与进程关联的终端。
  • START:进程启动的日期。
  • TIME:进程使用cpu的总时间。

f:树显示进程。

java启动命令行参数:

进程状态:

  • 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 进程的领导者(在它之下有子进程)。
    • 位于后台的进程组。

dmsg

dmsg命令用来查看系统内核情况,如设备的链接、断开、故障等,以及系统运行内核日志,通过该命令查看内核日志、设备等情况,可以发现系统问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容