About me

我的照片
目前就职于杭州某电子商务公司,工作兴趣包括高并发分布式架构,JVM性能优化等方面。

2012年1月20日星期五

Linux性能监控命令

CPU监控
  1. vmstat
  2. mpstat:可以看到每个核的利用率,中断次数
  3. top:从进程角度查看
  4. sar:看历史. sar -f /var/log/sa/sa07
TOP的交互命令中,f表示选择输出字段。F表示选择排序使用的字段。

内存监控
  1. free -m
  2. vmstat
  3. top
  4. pmap:查看进程所有的VMA(vm_area_struct)列表
这里解释一下free -m的输出内容。
-bash-3.2$ free -m
             total       used       free     shared    buffers     cached
Mem:         24098      23135        963          0        556      18022
-/+ buffers/cache:       4556      19542
Swap:         2047          0       2047


total = used + free
used  = AppUsed + buffers + cachedbuffers 表示块设备读写缓冲区大小。
cached  表示文件系统缓存大小。

第三行第一个字段,表示 used-buffer-cache,也就是被应用使用掉的物理内存大小。第二个字段,表示free+cache+buffer,也就是还可以被应用程序挪用的物理内存大小。

IO监控
  1. iostat -x 1:分辨顺序IO还是随机IO
  2. sar -B 1
  3. top

这里再说明一下iostat的输出。svctm是service time的缩写,表示块设备处理请求耗时。await字段是请求被处理前的等待时间。

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.43    0.00    0.56    0.00    0.00   90.01

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda3              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda4              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda5              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda6              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda7              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda8              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda9              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

使用strace监控java进程


监控java这样一般启动多线程的进程,简单的strace -p pid什么也看不到。需要增加 -f 这个参数,man上说这个参数的意思是监控该进程及其子进程。
strace -f -p pid

统计syscall的调用次数和耗时
strace -f -p 27847 -c



% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 66.10    6.520408        2443      2669       547 futex
 33.35    3.289478         534      6162           epoll_wait
  0.46    0.044990        1730        26           poll
  0.03    0.002859           0      8526           write
  0.03    0.002723           0     35537           clock_gettime
  0.03    0.002645           0      9916      3306 read
  0.01    0.001059           0      3379         9 epoll_ctl
  0.01    0.000501           0      3327           getsockopt
  0.00    0.000033           2        18           sendto
  0.00    0.000000           0         9           close
  0.00    0.000000           0         2           stat
  0.00    0.000000           0        20           mprotect
  0.00    0.000000           0         2           rt_sigreturn
  0.00    0.000000           0         3           sched_yield
  0.00    0.000000           0         9           dup2
  0.00    0.000000           0        10           accept
  0.00    0.000000           0        26           recvfrom
  0.00    0.000000           0        10           getsockname
  0.00    0.000000           0        45           setsockopt
  0.00    0.000000           0        30           fcntl
------ ----------- ----------- --------- --------- ----------------
100.00    9.864696                 69726      3862 total



没有评论:

发表评论