性能测试首页投稿(暂停使用,暂停投稿)程序员

Linux常用监控命令

2017-07-01  本文已影响51人  刘建会

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在特定时间间隔内运行队列中的平均进程数,进程进入队要满足下列条件:

一般来说,每个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    

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

如果一个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

磁盘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

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。

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

如果%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

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显示全部。

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

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主要如下:

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

netstat

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

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

f:树显示进程。

java启动命令行参数:

进程状态:

dmsg

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

上一篇 下一篇

猜你喜欢

热点阅读