显示全文:
相信运维工程师,在linux系统环境中最容易遇到的问题就是各种IO瓶颈,内存使用率高,cpu使用率高等问题,我们如何来定位错误?linux提供了很多命令来协助我们快速定位到错误,这里先介绍下free命令 :
1,free 命令解释:
[root@www ~]# free 1 2 3 4 5 6 1 total used free shared buffers cached 2 Mem: 1906552 430788 1475764 0 60164 226684 3 -/+ buffers/cache: 143940 1762612 4 Swap: 2097144 0 2097144
参数:
usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V] -b,-k,-m,-g show output in Bytes, KB, MB, or GB 用来指定输出的单位。 -l show detailed low and high memory statistics 可以看到详细的最大最小值 -o use old format (no -/+buffers/cache line) 以老的格式显示,没有-/+buffers/cache line那一行 -t display total for RAM + swap :会显示内存的总和,包括物理内存和swap分区大小。 -s update every [delay] seconds : 输出结果每秒刷新一次 -c update [count] times :刷新次数 -V display version information and exit :显示版本信息。
接着介绍下free命令输出的各个参数:
MEM: total:总计物理内存大小 used:已经使用的物理内存大小 free: 空闲的物理内存大小 shared:多个进程共享的内存空间 buffer:缓冲 cache:缓存
这里详细介绍下buffer和cache,因为面试过程中,很容易问到这两者之间的区别。
buffer缓冲区: 将数据缓冲下来,解决速度慢和快的交接;速度快的需要通过缓冲区将数据一点一点传给速度慢的区域。例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后刷入硬盘中。
cached缓存:实现数据的重复使用,速度慢的需要通过缓存将经常要用到的数据缓存起来,缓存下来的数据可以提供高速的传输给速度快的设备。例如:将硬盘中的数据读取出来放在内存的缓存区中,这样以后再次访问同一个资源,速度回快很多。
这两个参数主要是为了提高IO的性能,性能调优,会涉及这两个参数的修改。
例如在之前内核那篇blog中提到我们可以通过修改内核参数清空buffer。
主要是和/proc/sys/vm/drop_caches那个内核参数有关
在Documentation/sysctl/vm.txt中有如下描述:
drop_caches Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free. To free pagecache: 清空buffer echo 1 > /proc/sys/vm/drop_caches To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches To free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches 清空cache As this is a non-destructive operation and dirty objects are not freeable, the user should run `sync' first. 在清空buffer和cache之前我们最好先进行sync将内存中的数据(特别是修改过的数据同步到磁盘中,防止改动没有改动就清空掉)
free命令输出第三行:
-/+ buffers/cache: 代表的是两个参数:- buffers/cache和+ buffers/cache
注意,buffer和cache是用来提高IO性能的,当应用程序需要新的内存空间的时候也会把buffer,cache回收。
- buffers/cache:表示一个应用程序认为系统被用掉多少内存。这个值是通过MEM已经使用的总值减去buffer和cache所占用的值。
例如:143940=430788(used) - 60164(buffer) - 226684(cached)
+ buffers/cache:表示一个应用程序认为系统还有多少内存。这个值时MEM的空闲free加上buffer和cache。
例如: 1762612 = 1475764(free) + 60164(buffer) + 226684(cached)
free命令输出第四行:是关于swap分区的。
total:总大小 used:已经使用的 free:空闲的
正常情况下,swap分区是不会被使用的。只有物理内存被使用完之后才会使用swap分区。
简单介绍下swap分区:
内存不够用的时候,从硬盘上找一部分空间,将内存中最近最少使用的数据挪到硬盘的空间里。这段在硬盘中的空间就是swap分区。
交换空间(swap):允许内存过载(超出本身内存空间)使用;不过会影响系统性能,一般用于应急。
page in , page out
swap out swap in 上下对应
交换分区最好放在最外面的磁道上,这样性能还有所提升;
添加交换分区:
步骤:
* 1),新建分区 fdisk。 * 2),使用L ;设置文件系统分类; t调整分区类型;82(千万不能忘了;) w保存退出 * 3,)partprobe 内存分区读取 * 4,)创建交换分区: mkswap /dev/sda8:格式化为交换分区; 或 -L LABEL指定卷标; * 5)交换分区的使用:,swapon /dev/sda8 :启用交换分区上的交换空间 swapoff /dev/sda8 关闭; swapon -a 启用所有的定义在/etc/fstab文件中交换设备; mount挂载的文件系统,在我们重启开机的时候就不再存在了。有些能自动挂载,有些不能。这就是fstab文件的功能;
特殊场景:
假如磁盘上已经没有空间创建新的分区了,但是某个分区里已经挂载的位置还有很多空间可以使用,我们急着在当前系统上创建swap分区;在当前系统上怎么应急:
**回环设备**:loopback:使用软件来模拟实现硬件; 创建一个镜像文件,假如1G空间,可以将它当做硬盘来用,模拟存储空间: * 1),dd if=/dev/zero of=/var/swapfile bs=1M count=1024 创建一个大小为1024M 的镜像文件; * 2)mkswap /var/swapfile 创建一个swap类型文件; * 3),swapon /var/swapfile 启用 free -m 查看