top:top命令监控CPU利用率,进程状态和内存利用率并且可以详细列出每一个进程占用了多少CPU和多少内存。
[[email protected] sectionLocus]$ top
top - 10:52:24 up 99 days, 21:31, 6 users, load average: 1.67, 2.01, 1.83
Tasks: 665 total, 2 running, 663 sleeping, 0 stopped, 0 zombie
Cpu(s): 7.3%us, 2.4%sy, 0.0%ni, 84.8%id, 4.6%wa, 0.0%hi, 1.0%si, 0.0%st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20042 map 20 0 8681m 4.8g 10m S 165.4 30.7 59:46.66 java
3023 root 20 0 150m 5464 700 R 74.2 0.0 84883:39 redis-sentinel
8066 root 20 0 0 0 0 D 2.5 0.0 11:10.48 flush-8:16
第一行:10:52:24 up 99 days, 21:31 当前系统时间;6 users :当前有6个用户登录系统;load average: 1.67, 2.01, 1.83 后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
第二行:Tasks: 665 任务(进程) 总共665个,其中2个运行,663个睡眠,stoped状态的有0个,zombie状态(僵尸)的有0个
第三行:cpu状态
6.7% us 用户空间占用CPU的百分比。
0.4% sy 内核空间占用CPU的百分比。
0.0% ni 改变过优先级的进程占用CPU的百分比
92.9% id 空闲CPU百分比
0.0% wa IO等待占用CPU的百分比
0.0% hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si 软中断(Software Interrupts)占用CPU的百分比
在top基本视图中,按键盘数字1,可监控每个逻辑CPU的状况:
top - 13:44:20 up 100 days, 23 min, 7 users, load average: 3.32, 2.72, 2.25
Tasks: 664 total, 2 running, 662 sleeping, 0 stopped, 0 zombie
Cpu0 : 14.8%us, 38.5%sy, 0.0%ni, 21.9%id, 0.0%wa, 0.0%hi, 24.8%si, 0.0%st
Cpu1 : 1.0%us, 40.8%sy, 0.0%ni, 0.3%id, 57.8%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 1.3%us, 4.0%sy, 0.0%ni, 94.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 5.3%sy, 0.0%ni, 94.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 5.6%sy, 0.0%ni, 93.0%id, 1.3%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.7%us, 0.3%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu16 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu17 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu18 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu19 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu20 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu21 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu22 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu23 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16280412k total, 16117744k used, 162668k free, 324536k buffers
Swap: 32767992k total, 11516272k used, 21251720k free, 13336076k cached
[[email protected] sectionLocus]$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 1 12131504 163788 275616 8459504 0 0 29 23 0 0 8 2 90 0 0
r表示运行队列的大小,
b表示由于IO等待而block的线程数量,
in表示中断的数量,
cs表示上下文切换的数量,
us表示用户CPU时间,
sys表示系统CPU时间,
wa表示由于IO等待而是CPU处于idle状态的时间,
id表示CPU处于idle状态的总时间。
dstat可以给出每一个设备产生的中断数:
1.对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;
2.如果CPU在满负荷运行,应该符合下列分布,
a) User Time:65%~70%
b) System Time:30%~35%
c) Idle:0%~5%
mapstat:默认情况下,只会输出全部平均值
[[email protected] sectionLocus]$ mpstat
Linux 2.6.32-431.1.2.0.1.el6.x86_64 (ctb-test) 09/16/2014 _x86_64_ (24 CPU)
10:53:53 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
10:53:53 AM all 7.87 0.00 1.33 0.20 0.00 0.64 0.00 0.00 89.95
mpstat -P ALL
查看每一个CPU的情况
[[email protected] sectionLocus]$ mpstat -P ALL
Linux 2.6.32-431.1.2.0.1.el6.x86_64 (ctb-test) 09/16/2014 _x86_64_ (24 CPU)
10:53:26 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
10:53:26 AM all 7.87 0.00 1.33 0.20 0.00 0.64 0.00 0.00 89.95
10:53:26 AM 0 16.66 0.00 31.15 0.96 0.06 17.06 0.00 0.00 34.11
10:53:26 AM 1 8.80 0.00 0.46 2.30 0.00 0.01 0.00 0.00 88.42
10:53:26 AM 2 7.59 0.00 0.30 0.13 0.00 0.00 0.00 0.00 91.98
10:53:26 AM 3 7.92 0.00 0.10 0.05 0.00 0.00 0.00 0.00 91.94
10:53:26 AM 4 7.29 0.00 0.25 0.08 0.00 0.00 0.00 0.00 92.38
10:53:26 AM 5 7.48 0.00 0.09 0.03 0.00 0.00 0.00 0.00 92.40
10:53:26 AM 6 7.00 0.00 0.12 0.05 0.00 0.00 0.00 0.00 92.83
10:53:26 AM 7 7.30 0.00 0.07 0.03 0.00 0.00 0.00 0.00 92.60
10:53:26 AM 8 6.82 0.00 0.09 0.04 0.00 0.00 0.00 0.00 93.05
10:53:26 AM 9 7.19 0.00 0.07 0.02 0.00 0.00 0.00 0.00 92.72
10:53:26 AM 10 6.68 0.00 0.09 0.04 0.00 0.00 0.00 0.00 93.19
10:53:26 AM 11 7.08 0.00 0.06 0.02 0.00 0.00 0.00 0.00 92.83
10:53:26 AM 12 7.09 0.00 1.20 0.67 0.00 0.00 0.00 0.00 91.03
10:53:26 AM 13 8.16 0.00 0.13 0.25 0.00 0.00 0.00 0.00 91.46
10:53:26 AM 14 7.78 0.00 0.10 0.06 0.00 0.00 0.00 0.00 92.06
10:53:26 AM 15 7.60 0.00 0.13 0.03 0.00 0.00 0.00 0.00 92.24
10:53:26 AM 16 7.56 0.00 0.09 0.04 0.00 0.00 0.00 0.00 92.31
10:53:26 AM 17 7.79 0.00 0.05 0.02 0.00 0.00 0.00 0.00 92.14
10:53:26 AM 18 7.56 0.00 0.06 0.03 0.00 0.00 0.00 0.00 92.35
10:53:26 AM 19 7.80 0.00 0.05 0.01 0.00 0.00 0.00 0.00 92.14
10:53:26 AM 20 7.50 0.00 0.05 0.03 0.00 0.00 0.00 0.00 92.41
10:53:26 AM 21 7.81 0.00 0.05 0.01 0.00 0.00 0.00 0.00 92.13
10:53:26 AM 22 7.50 0.00 0.05 0.02 0.00 0.00 0.00 0.00 92.42
10:53:26 AM 23 7.80 0.00 0.05 0.01 0.00 0.00 0.00 0.00 92.13
通过使用ps命令,可以很清楚的看出到底是哪一条进程在吃CPU
[[email protected] sectionLocus]$ ps -eo pcpu,pid,user,args | sort -k 1 -r | head -16
%CPU PID USER COMMAND
6.2 17319 map sshd: [email protected]
59.0 3023 root ./src/redis-sentinel *:26379
1.6 17320 map /usr/libexec/openssh/sftp-server
内存
free -b,k,m,g
[[email protected] section]$ free
total used free shared buffers cached
Mem: 16280412 16114224 166188 0 305212 8181816
-/+ buffers/cache: 7627196 8653216
Swap: 32767992 12064588 20703404
total:物理内存的总大小
used:已经使用的物理内存大小
free:空闲的物理内存大小
shared:多个进程共享的内存大小
buffers/cached:磁盘缓存的大小
第二行Mem:代表物理内存使用情况
第三行(-/+ buffers/cached):代表磁盘缓存使用状态
第四行:Swap表示交换空间内存使用状态
free命令输出的内存状态,可以通过两个角度来查看:一个是从内核的角度来看,一个是从应用层的角度来看的。
IO 监控
top 的%wa指CPU等待磁盘写入完成的时间。莫非是磁盘忙,怎样证明是磁盘在忙?
df -h 查看硬盘的分区信息
[[email protected] sectionLocus]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-Lv_root 244G 164G 68G 71% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/sda1 485M 54M 406M 12% /boot
/dev/sdb1 1.8T 1.1T 687G 61% /map
[[email protected] sectionLocus]$ iostat -d -k -t 2
Linux 2.6.32-431.1.2.0.1.el6.x86_64 (ctb-test) 09/16/2014 _x86_64_ (24 CPU)
09/16/2014 11:35:05 AM
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 26.34 679.38 486.98 5865509664 4204394924
sda 8.41 12.06 51.23 104118766 442327556
dm-0 11.68 6.29 45.14 54302885 389705884
dm-1 2.97 5.77 6.09 49812588 52621612
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。