一、内存监控
监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的命令有free、vmstat、top等
1.1 free
| |
- total:内存总数 32872632 KB
- used:已使用的内存数 12393128 KB
- free:空闲的内存数 20479504 KB
- shared:多个进程共享的内存,总是0
- buffers:缓存内存数 23308 KB
- cached:缓存内存数 7496048 KB
第二行(-/+ buffers/cache):
- used:第一行Mem中的 used - buffers - cached = 12393128 - 23308 - 7496048 = 4873772 KB
- free:第一行Mem中的 free + buffers + cached = 20479504 + 23308 + 7496048 = 27998860 KB
- 可见这一行【used-buffers/cache】反映的是被程序实实在在吃掉的内存,【used+buffers/cache】反映的是可以挪用的内存总数。
第三行(Swap):表示交换分区的内存使用状态。
第一行内存状态是对于操作系统来说的,buffers/cached 都是属于被使用。
第二行内存状态是对于应用程序来说的,对于应用程序来说,buffers/cached占有的内存是可用的,因为buffers/cached是为了提高程序执行的性能,当应用程序需要用到内存的时候buffers/cached会很快地被回收,以供应用程序使用。
通常我们是从应用的角度来看的,所以只看第二行就行了。
另外,我们可以使用参数-m
、-g
来以MB
、GB
单位显示:
| |
1.2 vmstat
vmstat(Virtual Meomory Statistics,虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。
| |
结果如下:
| |
1)procs
- r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
- b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
2)memory
- swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
- free列表示当前空闲的物理内存数量(以KB为单位);
- buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
- cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
3)swap
- si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
- so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
- 一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。
4)IO
- bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
- bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)
这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。
5)system
- in列表示在某一时间间隔中观察到的每秒设备中断数;
- cs列表示每秒产生的上下文切换次数。
上面这两个值越大,会看到内核消耗的CPU时间就越多。
6)CPU
- us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
- sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
- id列显示了CPU处在空闲状态的时间百分比;
- wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
- st列一般不关注,虚拟机占用的时间百分比。
| |
上面的信息主要来自于/proc/meminfo
,/proc/stat
和/proc/vmstat
。
二、CPU监控
2.1 top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况及总体状况,类似于Windows的任务管理器。
| |
第一行:
- 20:32:28: 当前时间
- up 1149 days, 11:13:系统运行时间,系统已经运行了1149天11小时13分钟了。
- 2 users:当前登录用户数
- load average:系统负载,即任务队列的平均长度。三个数值分别为最近1分钟、最近5分钟、最近15分钟的平均负载 —— 超过N(CPU核数)说明系统满负荷运行。也可以通过
$w
或$uptime
命令查看load average。
第二行:
- 显示进程总数、正在运行的进程数、休眠的进程数、停止的进程数、僵尸进程数
第三行:
- %us:用户进程消耗的CPU百分比
- %sy:内核进程消耗的CPU百分比
- %ni:改变过优先级的进程占用CPU的百分比
- %id:空闲CPU的百分比
- %wa:IO等待消耗的CPU百分比
按”1”查看单个CPU的状况:
| |
另外,下面的命令可以查看CPU的核数:
| |
2.2 mpstat
mpstat(Multiprocessor Statistics,多处理器统计)是实时系统监控工具,它会报告与CPU相关的统计信息,这些信息存放在/proc/stat文件中。
| |
| |
至于各百分比的含义前面已经介绍过了,这里就不再赘述。
三、网络监控
3.1 ethtool
使用ethtool
查看网卡带宽,需要root权限:
| |
可以看出网卡eth0
的带宽为1000Mbps(兆比特每秒),所以理论上的网速极限为1000÷8 = 125MB/s。
3.2 sar
| |
| |
- IFACE:网络设备的名称
- rxpck/s:每秒钟接收到的包数目
- txpck/s:每秒钟发送出去的包数目
- rxkB/s:每秒钟接收到的字节数
- txkB/s:每秒钟发送出去的字节数
3.3 netstat
netstat
命令一般用于检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据。
部分选项如下:
| |
常用的几种:
| |
找出程序运行的端口:
| |
找出运行在指定端口的进程:
| |
四、磁盘监控
4.1 df
df
命令的功能是用来检查linux的文件系统的磁盘空间占用情况。如果没有文件名被指定,则显示当前所有被挂载的文件系统,默认以 KB 为单位。
常用选项如下:
| |
最常用的就是$ df -h
。
4.2 iostat
上面在介绍CPU监控时,就可以看到%wa
或%iowait
这一项,它表示I/O等待所占用CPU的百分比。为了得到关于磁盘IO更详细的状态信息,可以使用 iostat(I/O statistics,输入输出统计)命令:
| |
| |
iostat
主要是用来监控磁盘I/O,首先输出了CPUs的平均数据(avg-cpu),我们可以看%iowait
这一项,除此之外iostat还提供了一些更详细的I/O状态数据,比如
- r/s: 每秒完成的读 I/O 设备次数。
- w/s: 每秒完成的写 I/O 设备次数。
- rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节。
- wkB/s: 每秒写K字节数.是 wsect/s 的一半。
- avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
- avgqu-sz: 平均I/O队列长度。
- await: 平均每次设备I/O操作的等待时间 (毫秒)。
- svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
- %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。
五、进程监控
5.1 top
前面介绍过的top命令中可以对进程进行监控,其中一行就输出了进程的总体情况:
| |
默认情况下,top按照CPU使用率对各个进程进行排序。
| |
- RES:进程使用的物理内存大小
- SHR:进程共享内存大小
- S:进程状态(R表示运行 ,S表示睡眠,Z表示僵死,D表示不可中断的睡眠)
在top运行状态下,输入M
按内存使用率排序、输入P
按CPU占用率排序、输入T
按累计时间排序、输入c
显示进程的启动命令,输入u
显示指定用户的进程。
| |
动态显示进程号为pid的进程的状态。
5.2 ps
ps(Process Status,进程状态)命令是最基本同时也是非常强大的进程查看命令,最常用的命令就是ps aux
——显示当前所有进程
| |
ps命令的输出可以按任意某一列进行排序,通过使用内部排序键(列的别名),例如:
| |
ps
命令的用法太多了,掌握一些常用的用法就好。如需了解更多的可选项,可以查看man手册。