使用 vmstat, mpstat 和 sar 查看系统运行参数
vmstat
字段含义
Procs
r: The number of processes waiting for run time. 等待执行的进程, 数字越大意味着CPU越忙, 果该数字经常大于逻辑cpu个数则CPU资源存在瓶颈
b: The number of processes in uninterruptible sleep. 处在非中断睡眠状态的进程数, 即进程被阻塞, 主要是指被资源阻塞的进程对列数(比如IO资源, 页面调度等), 当这个值较大时需要根据应用程序来进行分析,比如数据库产品,中间件应用
Memory
swpd: the amount of virtual memory used. 已使用的虚拟内存大小. 如果虚拟内存使用较多, 可能系统的物理内存不足, 需要减少物理内存使用或增大物理内存. swapd不为0并不意味物理内存不足, 如果swapd长期稳定, si和so为0, 就是正常的
free: the amount of idle memory. 空闲的内存大小
buff: the amount of memory used as buffers. buffer(缓存, 主要用于块设备缓存)的大小, 单位KB
cache: the amount of memory used as cache. cache(缓存, 主要用于缓存文件)的大小, 单位KB
inact: the amount of inactive memory. (-a option) 非活跃的内存大小
active: the amount of active memory. (-a option) 活跃的内存大小
Swap
si: Amount of memory swapped in from disk (/s). 从swap交换到内存的数量, 单位KB/s
so: Amount of memory swapped to disk (/s). 从内存交换到swap的数量, 单位KB/s
关于free和si, so的说明: 内存充足的时候这2个值都是0, 如果这2个值一直大于0, 会影响系统性能(因为有磁盘IO和CPU消耗). 内存是否充足要结合free和si, so一起看, 如果free小但是si和so大多时候是0, 内存就是够用的.
IO
bi: Blocks received from a block device (blocks/s). 每秒从块设备接收到的块数, 单位: 块/秒
bo: Blocks sent to a block device (blocks/s). 每秒写到块设备的块数, 单位: 块/秒
System
in: The number of interrupts per second, including the clock. 每秒的中断数, 包括时钟中断
cs: The number of context switches per second. 每秒的环境上下文切换次数. 比如我们调用系统函数, 就要进行上下文切换, 而过多的上下文切换会浪费较多的cpu资源, 这个数值应该越小越好. 上下文切换数目高于中断数目,说明kernel中相当数量的时间都开销在上下文切换线程. 大量的上下文切换将导致CPU 利用率分类不均衡. 导致等待io请求的(wa)百分比非常高, 以及user time(us)百分比非常低
CPU
These are percentages of total CPU time. 以下的数值都是CPU总时间的百分比
us: Time spent running non-kernel code. (user time, including nice time): 用户CPU时间(非内核进程占用时间). us的值高说明用户进程消耗的CPU时间多
sy: Time spent running kernel code. (system time) 系统使用的CPU时间. sy的值高说明系统内核消耗的CPU资源多, 这种情况是有问题的
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time. 空闲的CPU时间, 在Linux 2.5.41之前这部分包含IO等待时间
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle. 等待IO的CPU时间. 在Linux 2.5.41之前这个值为0. 这个指标意味着CPU在等待硬盘读写操作的时间. wait越大则机器io性能就越差, 说明IO等待比较严重, 这可能由于磁盘大量作随机访问造成, 也有可能磁盘出现瓶颈
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
参数说明
vmstat [delay] [count]
-a
Displays active and inactive memory.
-f
Displays the number of forks since boot. This includes the fork, vfork, and clone system calls, and is equivalent to the total number of tasks created. Each process is represented by one or more tasks, depending on thread usage. This display does not repeat.
-m
Displays slab information.
-n
Specifies that the header will appear once, not periodically.
-s
Displays a table of various event counters and memory statistics. This display does not repeat.
delay
The delay between reports in seconds. If no delay is specified, only one report is printed, with the average values since the machine was last booted.
count
The number of times to report on the system. If no count is specified and delay is defined, vmstat reports indefinitely.
-d
Displays disk statistics. 每个磁盘设备为一行, 显示磁盘相关的读写统计
-p
Takes a partition name as a value, and reports detailed statistics for that partition.
-S
Defines the units output by the report. Valid values are k (1000 bytes), K (1024 bytes), m (1,000,000 bytes), or M (1,048,576 bytes).
-D
Report summary statistics about disk activity.
sar, sysstat
参数说明
-b Report I/O and transfer rate statistics -B Report paging statistics -d Report activity for each block device (kernels 2.4 and newer only) -H Report hugepages utilization statistics. --human Print sizes in human readable format (e.g. 1k, 1.23M, etc.) -I { int_list | SUM | ALL } Report statistics for interrupts. int_list is a list of comma-separated values or range of values (e.g., 0-16,35,400-). The SUM keyword indi‐cates that the total number of interrupts received per second is to be displayed. The ALL keyword indicates that statistics from all interrupts, including potential APIC interrupt sources, are to be reported -m Report power management statistics -n { keyword [,...] | ALL } Report network statistics. Possible keywords are DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6. -P { cpu [,...] | ALL } Report per-processor statistics for the specified processor or processors. -p retty-print device names. Use this option in conjunction with option -d. By default names are printed as dev m-n where m and n are the major and minor numbers for the device. -q Report queue length and load averages. -r [ ALL ] Report memory utilization statistics. The ALL keyword indicates that all the memory fields should be displayed.内存和交换分区使用率 -S Report swap space utilization statistics. -u [ ALL ] Report CPU utilization. The ALL keyword indicates that all the CPU fields should be displayed. -v Report status of inode, file and other kernel tables -W Report swapping statistics. -w Report task creation and system switching activity. -y Report TTY devices activity.
.
例子
# Report CPU utilization for each 2 seconds. 5 lines are displayed. sar -u 2 5 # sar -b 1 5 # sar -q 1 3 # Report statistics on IRQ 14 for each 2 seconds. 10 lines are displayed. Data are stored in a file called int14.file. sar -I 14 -o int14.file 2 10 # Display memory and network statistics saved in daily data file 'sa16'. sar -r -n DEV -f /var/log/sysstat/sa16 # Display all the statistics saved in current daily data file. sar -A
.
其他的单项查看工具
mpstat 是专用于查看CPU状态的工具
# Display five reports of global statistics among all processors at two second intervals. mpstat 2 5 # Display five reports of statistics for all processors at two second intervals. mpstat -P ALL 2 5
iostat 是用于查看CPU和设备IO状态的工具, 主要用于后者
# Display a single history since boot report for all CPU and Devices. iostat # Display the CPU utilization report at two second intervals. iostat -c 2 # Display a continuous device report at two second intervals. iostat -d 2 # Display six reports at two second intervals for all devices. iostat -d 2 6 # Display six reports of extended statistics at two second intervals for devices sda and sdb. iostat -x sda sdb 2 6 # Display six reports at two second intervals for device sda and all its partitions (sda1, etc.) iostat -p sda 2 6
netstat 用于显示网络连接, 路由表, 网口状态等信息的工具
-a, --all 显示所有连线中的Socket. -n, -–numeric 直接使用IP地址, 而不通过域名服务器 -p, -–programs 显示正在使用Socket的程序识别码和程序名称 -t, -–tcp 显示TCP传输协议的连线状况 # 显示正打开侦听端口的程序 netstat -lnp # 显示和本机端口已经建立的连接 netstat -antp
ps 用于查看系统进程的工具
# ps aux # ps -eLf