Linux系统监控工具

cpu信息

/proc/cpuinfo 查看cpu基本信息

uptime查看负载

load average这个输出值,它的3个值的大小一般不能大于系统CPU的个数

vmstat

proc - r 运行和等待cpu时间片的进程数量,如果长时间大于0(另说大于系统cpu个数), 表示cpu不足
proc - b 等待资源(IO、memory)的进程数量,如果长时间大于0, 表示cpu不足
cpu - us 用户态时间,如果us + sy 大于80, 表示cpu不足
cpu - sy 系统态时间,如果us + sy 大于80, 表示cpu不足
cpu - id 系统空闲时间
cpu - wa 等待IO时间 根据经验,wa的参考值为20%,如果wa超过20%,说明I/O等待严重,引起I/O等待的原因可能是磁盘大量随机读写造成的 ,也可能是磁盘或者磁盘控制器的带宽瓶颈(主要是块操作)造成的
cpu - st 非自愿等待时间(系统调度)
system-in 每秒设备中断数
system-cs 每秒产生的上下文切换次数

in, cs 这两个值越大,由内核消耗的CPU时间越多
us 表示用户进程消耗的CPU时间百分比,us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期大于50%,就需要考虑优化程序或算法
sy列显示了内核进程消耗的CPU时间百分比,sy的值较高时,说明内核消耗的CPU资源很多

sar

需要安装sysstat

%user 等同于vmstat的us
%nice 进程正常运行消耗的cpu(去除系统调度等其他开销)
%system 等同于vmstat的sy
%iowait 等同于vmstat的wa
%steal 内存紧张时, pagein强制对不同的页面做的steal
%idle 等同于vmstat的id

mpstat

包含在sysstat

%irq 中断消耗的cpu时间
%soft 软中断消耗的cpu时间
%intr/s cpu每秒收到的中断个数

top

  • 1看系统当前cpu负载
  • bx进入高亮模式, ><选择CPU列,能看到进程CPU消耗排行

Tasks-total 进程的总数
Tasks-running 正在运行的进程数
Tasks-sleeping 处于休眠的进程数
Tasks-stopped 停止的进程数
Tasks-zombie 僵死的进程数
Cpu(s)-%us 表示用户进程占用CPU的百分比
Cpu(s)-%sy 系统进程占用CPU的百分比
Cpu(s)-%ni 用户进程空间内改变过优先级的进程占用CPU的百分比
Cpu(s)-%id 空闲CPU占用的百分比
Cpu(s)-%wa 等待输入输出的进程占用CPU的

内存监控

free

total 物理总内存
used 已经使用的内存
free 剩余内存
shared 使用的共享内存
buffers 磁盘块的读写缓存
cached 文件读写的cache
- buffer/cache 实际使用的内存, userd - buffer - cache
+ buffer/cache 实际可用的内存, free + buffer + cache
swap 交换分区

一般的经验公式是: 实际使用内存/ 系统物理内存> 70%时, 需要引起注意,考虑加内存了

如果swap经常用到了很多, 这是真的内存不够了, 需要引起注意

有一种不推荐的方式可以清空cache和buffer: echo "3" > /proc/sys/vm/drop_caches, 这会降低磁盘IO的效率

vmstat

memory-swpd 切换到内存交换区的内存大小(以KB为单位),如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况一般不用担心 ,不会影响系统性能
memory-free 当前空闲的物理内存数量(以KB为单位)
memory-buff buffers cache的内存数量,一般对块设备的读写才需要缓冲
memory-cache page cached的内存数量,一般作为文件系统进行缓存,频繁访问的文件都会被缓存
如果cache值较大 说明缓存的文件数较多,如果此时io中的bi比较小,说明文件系统效率比较好
swap-si 由磁盘调入内存,每秒从交换区写到内存的大小 - Amount of memory swapped in from disk (/s)
swap-so 由内存调入磁盘,每秒写入交换区的内存大小 - Amount of memory swapped to disk (/s)

top

VIRT 进程占用总虚存, 包括了code, data, 动态链接库以及swap,一般看进程占用内存及内存泄漏, 关注这一项就对了
RES man上的解释是非swap内存,早期版本的kernel上man page里会说RES = CODE + DATA,但是实际漏了动态链接库的部分,现在的man page里已经不会有这个错误了
SHR 共享内存段, 包括mmap以及动态链接的部分.

I/O监控

vmstat

io-bi 表示从块设备读入数据的总量(即读磁盘)(kb/s) - Blocks received from a block device (blocks/s)
io-bo bo列表示写到块设备的数据总量(即写磁盘)(kb/s) - Blocks sent to a block device (blocks/s)

设置的bi+bo参考值为1000 | 如果超过1000 | 而且wa值较大 | 则表示系统磁盘I/O有问题 | 应该考虑提高磁盘的读写性能

iostat

Blk_read/s 每秒读取的数据块数
Blk_wrtn/s 每秒写入的数据块数
Blk_read 读取的所有块数
Blk_wrtn 写入的所有块数

第一行是系统从启动到统计时的所有传输信息 | 第二次输出的数据才代表在检测的时间段内系统的传输值

tps 每秒处理的请求
kB_read/s 每秒的读数据量, 单位kB
kB_wrtn/s 每秒的写数据量, 单位kB
kB_read 监控时间内的总读数据量, 单位kB
kB_wrtn 监控时间内的总写数据量, 单位kB

sar

  • sar -d 可以观察每一块磁盘设备的IO.
  • sar -b 可以监控IO速率, 类似iostat, 不过单位是block

  • 正常情况下svctm小于await, 而svctm的大小和磁盘性能有关, cpu和内存的负载也会对svctm有影响.
  • await的值, 是svctm加上IO队列等待的时间, 所以如果svctm与await非常接近, 说明IO队列几乎没有等待, 性能很好. 如果svctm和await相差比较大, 则说明IO队列等待的时间比较长, 可以做点优化了, 无论是应用层, 还是直接换硬件.
  • %util也是衡量IO的一个重要指标, 这个值如果长期比较高, 表示IO存在瓶颈.

磁盘IO的一些建议

  • 一般IO比较重的磁盘应用来做存储居多, 绝大部分会需要raid, 根据应用的不同, 选择合适的raid方式.
  • 努力的使用cache, 尽可能的使用内存, 减少IO的次数.
  • 读写分离, 轻重分离.

网络监控

ping & telnet

检测网络连通性和端口

netstat

获取网络基本情况

ethtool

获取网卡设备的信息

tcpdump

监听网络

tcpdump的语法, 是从pcap一脉相承下来的谓词语法过滤表达式, 再加了一些自己的命令行参数.

谓词语法, 简单来说就是"组合起来的一些简单条件", 具体的条件包括了: 类型(type)条件: host, port; 方向(dir)条件: src, dst; 协议(proto)条件: tcp, udp, ip, ip6等. 这些条件通过and, or和not就能组合起来, 形成一段过滤表达式.

tcpdump自己的命令行参数常用的有:

  • -i, 指定网卡设备.
  • -A, 以ascii码显示包内容.
  • -x, -X, -xx, -XX, 以16进制显示包.

抓取192.168.60.129的icmp包

sar

sar的n选项可以看到网络设备统计信息

进程监控

ps & pstree

ps

  • USER:运行进程的账号
  • PID :该进程的进程ID号。
  • %CPU:该进程使用掉的 CPU 资源百分比;
  • %MEM:该进程所占用的物理内存百分比;
  • VSZ :该进程使用掉的虚拟内存量 (Kbytes)
  • RSS :该进程实际使用物理内存 (Kbytes) resident set size, the non-swapped physical memory that a task has used (in kiloBytes).(alias rssize, rsz).
  • TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
  • STAT:该程序目前的状态,主要的状态有:
    • R :该程序目前正在运作,或者是可被运作;
    • S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
    • T :该程序目前正在侦测或者是停止了;
    • Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
    • < :高优先级
    • N :低优先级
    • L :有些页被锁进内存
    • s :包含子进程
    • + :位于后台的进程组;
    • l :多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
  • START:该进程被触发启动的时间;
  • TIME :该进程实际使用 CPU 运作的时间。
  • COMMAND:该程序的实际指令

pstree

top

S列是进程状态

watch

监控进程是否存在

其他

  • strace 查看系统调用
  • valgrind 内存调试和检测

参考资料



本文遵从CC版权协定,转载请以链接形式注明出处。
本文链接地址: http://www.annhe.net/article-3464.html