监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的命令有free、vmstat、top等
$ free
total used free shared buffers cached
Mem: 32872632 12393128 20479504 0 23308 7496048
-/+ buffers/cache: 4873772 27998860
Swap: 0 0 0
第一行(Mem):
第二行(-/+ buffers/cache):
第三行(Swap):表示交换分区的内存使用状态。
第一行内存状态是对于操作系统来说的,buffers/cached 都是属于被使用。
第二行内存状态是对于应用程序来说的,对于应用程序来说,buffers/cached占有的内存是可用的,因为buffers/cached是为了提高程序执行的性能,当应用程序需要用到内存的时候buffers/cached会很快地被回收,以供应用程序使用。
通常我们是从应用的角度来看的,所以只看第二行就行了。
另外,我们可以使用参数-m
、-g
来以MB
、GB
单位显示:
$ free -m
total used free shared buffers cached
Mem: 32102 12104 19998 0 22 7320
-/+ buffers/cache: 4760 27341
Swap: 0 0 0
vmstat(Virtual Meomory Statistics,虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。
$ vmstat 2 100 # 2表示刷新间隔,100表示输出次数
结果如下:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 192532 91788 88812 0 0 2 1 20 30 0 0 100 0 0
0 0 0 192492 91788 88812 0 0 0 0 31 35 0 1 99 0 0
0 0 0 192492 91788 88812 0 0 0 0 23 30 0 0 100 0 0
0 0 0 192492 91788 88812 0 0 0 0 22 30 0 0 100 0 0
0 0 0 192492 91788 88812 0 0 0 0 22 31 0 1 100 0 0
0 0 0 192492 91788 88812 0 0 0 0 21 29 0 0 100 0 0
0 0 0 192492 91788 88812 0 0 0 0 21 30 0 0 100 0 0
0 0 0 192492 91788 88812 0 0 0 0 21 28 0 0 100 0 0
1)procs
2)memory
3)swap
4)IO
5)system
6)CPU
$ vmstat -s # 查看内存使用的详细信息
32872632 total memory
25946240 used memory
21298968 active memory
3228124 inactive memory
6926392 free memory
79764 buffer memory
6767888 swap cache
0 total swap
0 used swap
0 free swap
5625247020 non-nice user cpu ticks
75476 nice user cpu ticks
3961269668 system cpu ticks
228172341381 idle cpu ticks
1685706618 IO-wait cpu ticks
11227 IRQ cpu ticks
537233093 softirq cpu ticks
0 stolen cpu ticks
817859502644 pages paged in
874791545051 pages paged out
0 pages swapped in
0 pages swapped out
1845948435 interrupts
2656703667 CPU context switches
1341191961 boot time
1691075642 forks
上面的信息主要来自于/proc/meminfo
,/proc/stat
和/proc/vmstat
。
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况及总体状况,类似于Windows的任务管理器。
top - 20:32:28 up 1149 days, 11:13, 2 users, load average: 2.97, 2.42, 1.67
Tasks: 671 total, 1 running, 669 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32872632k total, 12336240k used, 20536392k free, 23064k buffers
Swap: 0k total, 0k used, 0k free, 7441684k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2543 root 20 0 9204 636 396 S 0.7 0.0 614:57.76 irqbalance
4279 work 20 0 15.8g 1.4g 10m S 0.7 4.6 121:19.27 java
11761 work 20 0 153m 7192 1080 S 0.7 0.0 642:26.65 python
第一行:
$w
或$uptime
命令查看load average。第二行:
第三行:
按”1”查看单个CPU的状况:
top - 20:32:49 up 1149 days, 11:13, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 671 total, 1 running, 669 sleeping, 0 stopped, 1 zombie
Cpu0 : 1.0%us, 0.7%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.7%us, 0.0%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%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.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%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.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 1.0%us, 0.3%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.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.7%us, 0.0%sy, 0.0%ni, 99.3%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.7%us, 1.0%sy, 0.0%ni, 98.3%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: 32872632k total, 12336360k used, 20536272k free, 23080k buffers
Swap: 0k total, 0k used, 0k free, 7441976k cached
另外,下面的命令可以查看CPU的核数:
$ grep 'model name' /proc/cpuinfo | wc -l
24
mpstat(Multiprocessor Statistics,多处理器统计)是实时系统监控工具,它会报告与CPU相关的统计信息,这些信息存放在/proc/stat文件中。
$ mpstat -P ALL 2 # ALL表示显示所有CPUs,也可以指定某个CPU;2表示刷新间隔
Linux 2.6.32-2.0.0.1 (localhost) 2015年09月05日 _x86_64_ (24 CPU)
18时52分35秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
18时52分37秒 all 0.23 0.00 0.12 0.00 0.00 0.00 0.00 0.00 99.65
18时52分37秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 1 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
18时52分37秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 6 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.99
18时52分37秒 7 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
18时52分37秒 8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 9 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 10 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
18时52分37秒 11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 12 0.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.00
18时52分37秒 13 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
18时52分37秒 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 18 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
18时52分37秒 19 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.50
18时52分37秒 20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
18时52分37秒 21 0.50 0.00 1.50 0.00 0.00 0.00 0.00 0.00 98.00
18时52分37秒 22 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
18时52分37秒 23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
至于各百分比的含义前面已经介绍过了,这里就不再赘述。
使用ethtool
查看网卡带宽,需要root权限:
# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000003 (3)
Link detected: yes
可以看出网卡eth0
的带宽为1000Mbps(兆比特每秒),所以理论上的网速极限为1000÷8 = 125MB/s。
$ sar -n DEV 3 100
$ sar -n DEV 3 100
Linux 2.6.32-2.0.0.1 (localhost) 08/25/2015 _x86_64_ (24 CPU)
08:37:55 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
08:37:58 PM lo 2.01 2.01 0.44 0.44 0.00 0.00 0.00
08:37:58 PM eth0 5.35 0.00 0.49 0.00 0.00 0.00 0.00
08:37:58 PM eth1 12.04 3.01 0.95 0.86 0.00 0.00 0.00
08:37:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
08:38:01 PM lo 9.00 9.00 2.52 2.52 0.00 0.00 0.00
08:38:01 PM eth0 17.33 0.00 1.02 0.00 0.00 0.00 0.00
08:38:01 PM eth1 24.33 12.67 3.04 6.48 0.00 0.00 0.00
netstat
命令一般用于检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据。
部分选项如下:
-a, --all, --listening 显示所有连接中的Socket。 -n, --numeric 以数字形式显示地址和端口号。 -t, -–tcp 显示TCP传输协议的连线状况。 -u, -–udp 显示UDP传输协议的连线状况。 -p, --programs 显示正在使用socket的程序名/进程ID -l, --listening 显示监控中的服务器的Socket。 -o, --timers 显示计时器。 -s, --statistics 显示每个网络协议的统计信息(比如SNMP) -i, --interfaces 显示网络界面信息表单(网卡列表) -r, --route 显示路由表
常用的几种:
$ netstat -aup # 输出所有UDP连接状况
$ netstat -atp # 输出所有TCP连接状况
$ netstat -s # 显示各个协议的网络统计信息
$ netstat -i # 显示网卡列表
$ netstat -r # 显示路由表信息
找出程序运行的端口:
$ netstat -ap | grep ssh
找出运行在指定端口的进程:
$ netstat -anp | grep 60010
df
命令的功能是用来检查linux的文件系统的磁盘空间占用情况。如果没有文件名被指定,则显示当前所有被挂载的文件系统,默认以 KB 为单位。
常用选项如下:
-a 全部文件系统列表 -h 以方便阅读的方式显示 -i 显示inode信息 -T 显示文件系统类型 -l 只显示本地文件系统 -k 以KB为单位 -m 以MB为单位
最常用的就是$ df -h
。
上面在介绍CPU监控时,就可以看到%wa
或%iowait
这一项,它表示I/O等待所占用CPU的百分比。为了得到关于磁盘IO更详细的状态信息,可以使用 iostat(I/O statistics,输入输出统计)命令:
-c 显示CPU使用情况 -d 显示磁盘使用情况 -k 以 KB 为单位显示 -m 以 M 为单位显示 -x 显示详细信息
$ iostat -x -k 2 100 # 2表示刷新间隔,100表示刷新次数
Linux 2.6.32-2.0.0.1 (localhost) 2015年09月05日 _x86_64_ (24 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.34 0.00 1.87 0.70 0.00 95.08
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sdj 0.06 0.13 6.18 2.20 708.94 740.47 345.95 0.00 5.32 2.63 2.20
sdd 0.06 0.13 6.34 2.15 716.75 722.91 339.00 0.02 2.07 2.73 2.32
sdb 0.05 0.12 3.01 1.68 365.89 581.01 404.05 0.02 3.26 2.19 1.03
sdf 0.06 0.14 6.25 2.21 712.99 741.76 343.92 0.00 5.20 2.62 2.22
sda 0.30 1.86 9.34 5.54 705.95 766.81 197.98 0.03 1.88 2.72 4.05
iostat
主要是用来监控磁盘I/O,首先输出了CPUs的平均数据(avg-cpu),我们可以看%iowait
这一项,除此之外iostat还提供了一些更详细的I/O状态数据,比如
前面介绍过的top命令中可以对进程进行监控,其中一行就输出了进程的总体情况:
Tasks: 661 total, 1 running, 659 sleeping, 0 stopped, 1 zombie
默认情况下,top按照CPU使用率对各个进程进行排序。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2543 root 20 0 9204 636 396 S 0.7 0.0 614:57.76 irqbalance
4279 work 20 0 15.8g 1.4g 10m S 0.7 4.6 121:19.27 java
11761 work 20 0 153m 7192 1080 S 0.7 0.0 642:26.65 python
在top运行状态下,输入M
按内存使用率排序、输入P
按CPU占用率排序、输入T
按累计时间排序、输入c
显示进程的启动命令,输入u
显示指定用户的进程。
$ top -p <pid>
动态显示进程号为pid的进程的状态。
ps(Process Status,进程状态)命令是最基本同时也是非常强大的进程查看命令,最常用的命令就是ps aux
——显示当前所有进程
$ ps aux | grep root # 输出root用户的所有进程
$ ps -p <pid> -L # 显示进程<pid>的所有线程
$ ps -e -o pid,uname,pcpu,pmem,comm # 定制显示的列
$ ps -o lstart <pid> # 显示进程的启动时间
ps命令的输出可以按任意某一列进行排序,通过使用内部排序键(列的别名),例如:
$ ps aux --sort=+rss # 按内存升序排列
$ ps aux --sort=-rss # 按内存降序排列
$ ps aux --sort=+%cpu # 按cpu升序排列
$ ps aux --sort=-%cpu # 按cpu降序排列
ps
命令的用法太多了,掌握一些常用的用法就好。如需了解更多的可选项,可以查看man手册。
个人站点:http://songlee24.github.com