drop_cache-sar
查线上问题:
1、cpu idle 为0 ,I/O高,
pidstat 发现进程io 不高,那就是cache mem引起系统io高了
没有vmstat,只能使用sar工具了,使用sar -r 查看buddyinfo 发现内存碎片化严重。同时drop_cache值为3一直在释放cache ,
eg:对文件系统大量的随机读写,page cache 上涨,内存吃紧,page cache 不断换入换出,磁盘瓶颈,CPU 高,属于一种情况 ;设置drop_cache值为1;
另外一种类似的情况是reclaimable slab objects 占用高(dentries,inodes;可以设置drop_cache值为2 释放
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
echo 3 > /proc/sys/vm/drop_caches
echo 写入之后,值不会变,怎么办?会不会一直在drop?----不会,所以可以在内核代码里面加一个timer 定时释放
注意: * iostat 工具提供CPU使用率及硬盘吞吐效率的数据;
* mpstat 工具提供单个处理器或多个处理器相关数据;
* sar 工具负责收集、报告并存储系统活跃的信息;
sar 工具的使用
-A 显示所有历史数据,通过读取/var/log/sar 目录下的所有文件,并把它们分门别类的显示出来;
-b 通过设备的I/O中断读取设置的吞吐率;
-B 报告内存或虚拟内存交换统计;
-c 报告每秒创建的进程数;
-d 报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp
-f 从一个二进制的数据文件中读取内容,比如 sar -f filename
-i interval 指定数据收集的时间,时间单位是秒;
-n 分析网络设备状态的统计,后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV
-o 把统计信息写入一个文件,比如 -o filename ;
-P 报告每个处理器应用统计,用于多处理器机器,并且启用SMP内核才有效;
-p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np
-r 内存和交换区占用统计;
-R
-t 这个选项对从文件读取数据有用,如果没有这个参数,会以本地时间为标准 读出;
-u 报告CPU利用率的参数;
-v 报告inode, 文件或其它内核表的资源占用信息;
-w 报告系统交换活动的信息; 每少交换数据的个数;
-W 报告系统交换活动吞吐信息;
-x 用于监视进程的,在其后要指定进程的PID值;
-X 用于监视进程的,但指定的应该是一个子进程ID;
/var/tmp/debug_bin #free -m
total used free shared buffers
Mem: 238532 163460 75072 0 3752
-/+ buffers: 159708 78824
Swap: 0 0 0
-----------------
nux 3.6.5-Broadcom Linux ((none)) 03/27/20 _armv7l_ (1 CPU) 10:04:39 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
10:04:41 71696 0 116268 48.74 4444 33156 276800 116.04 85288 15052 0
10:04:43 72776 0 116248 48.73 4564 31976 276800 116.04 85280 13980 0
10:04:45 73976 0 116228 48.73 4456 30908 276800 116.04 85332 12744 0
Average: 72816 0 116248 48.73 4488 32013 276800 116.04 85300 13925 0
/var/tmp/debug_bin #sar -u 2 3
Linux 3.6.5-Broadcom Linux ((none)) 03/27/20 _armv7l_ (1 CPU) 10:13:45 CPU %user %nice %system %iowait %steal %idle
10:13:47 all 1.98 0.00 0.50 97.52 0.00 0.00
10:13:49 all 16.42 0.00 2.49 81.09 0.00 0.00
10:13:51 all 8.46 0.00 2.49 89.05 0.00 0.00
Average: all 8.94 0.00 1.82 89.24 0.00 0.00
/var/tmp/debug_bin #sar -d -p 2 2
Linux 3.6.5-Broadcom Linux ((none)) 03/27/20 _armv7l_ (1 CPU) 10:14:57 DEV tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util
10:14:59 mtdblock3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:15:01 mtdblock3 0.50 33.66 0.00 0.00 68.00 0.09 20.00 6.93
Average: mtdblock3 0.25 16.87 0.00 0.00 68.00 0.04 20.00 3.47
/var/tmp/debug_bin #sar -d -p 2 4
Linux 3.6.5-Broadcom Linux ((none)) 03/27/20 _armv7l_ (1 CPU) 10:15:10 DEV tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util
10:15:12 mtdblock3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:15:14 mtdblock3 0.00 21.89 0.00 0.00 0.00 0.17 0.00 3.48
10:15:16 mtdblock3 3.96 134.65 0.00 0.00 34.00 0.67 213.75 21.78
10:15:18 mtdblock3 4.98 179.10 0.00 0.00 36.00 1.21 234.00 44.78
Average: mtdblock3 2.24 83.98 0.00 0.00 37.56 0.51 225.00 17.52
/var/tmp/debug_bin #pidstat -d 2 2
Linux 3.6.5-Broadcom Linux ((none)) 03/27/20 _armv7l_ (1 CPU) 10:22:56 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 10:22:58 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command Average: UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
#sar -d 1 3
Linux 3.6.5-Broadcom Linux ((none)) 03/27/20 _armv7l_ (1 CPU) 10:24:09 DEV tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util
10:24:10 dev31-3 4.04 235.35 0.00 0.00 58.25 0.77 362.50 52.53
10:24:11 dev31-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:24:12 dev31-3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: dev31-3 1.32 77.15 0.00 0.00 58.25 0.25 362.50 17.22
Top:
Mem: 152892K used, 85640K free, 0K shrd, 400K buff, 23568K cached
CPU: 15% usr 1% sys 0% nic 0% idle 81% io 0% irq 0% sirq
Load average: 2.61 3.16 3.16 1/122 3289
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
Ps:
S UID PID PPID VSZ RSS TTY STIME TIME CMD
S 0 1 0 848 12 0:0 Mar20 00:00:07 /bin/busybox init
S 0 2 0 0 0 0:0 Mar20 00:00:00 [kthreadd]
S 0 3 2 0 0 0:0 Mar20 00:00:29 [ksoftirqd/0]
S 0 5 2 0 0 0:0 Mar20 00:00:00 [kworker/0:0H]
S 0 6 2 0 0 0:0 Mar20 00:00:00 [kworker/u:0]
S 0 7 2 0 0 0:0 Mar20 00:00:00 [kworker/u:0H]
S 0 8 2 0 0 0:0 Mar20 00:00:00 [migration/0]
(注意top中的vsz rss意义;
VSZ:virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject
to change. (alias vsize).虚拟内存,
RSS:是常驻内存的大小,也就是进程实际使用的物理内存大小,但不包括 Swap 和共享内存。)
结果:查看buddyinfo 有但是无大块, pid进程io不高,但是系统i.o高------> cachemem 原因了
eg:顺便说一下虚拟内存空间分布
通过这张图你可以看到,用户空间内存,从低到高分别是五种不同的内存段。
只读段,包括代码和常量等。
数据段,包括全局变量等。
堆,包括动态分配的内存,从低地址开始向上增长。
文件映射段,包括动态库、共享内存等,从高地址开始向下增长。
栈,包括局部变量和函数调用的上下文等。栈的大小是固定的,一般是 8 MB
在这五个内存段中,堆和文件映射段的内存是动态分配的。比如说,使用 C 标准库的 malloc() 或者 mmap() ,就可以分别在堆和文件映射段动态分配内存;
内存分配与回收malloc() 是 C 标准库提供的内存分配函数,对应到系统调用上,有两种实现方式,即 brk() 和 mmap()。对小块内存(小于 128K),C 标准库使用 brk() 来分配,也就是通过移动堆顶的位置来分配内存。这些内存释放后并不会立刻归还系统,而是被缓存起来,这样就可以重复使用。而大块内存(大于 128K),则直接使用内存映射 mmap() 来分配,也就是在文件映射段找一块空闲内存分配出去。
这两种方式,自然各有优缺点。brk() 方式的缓存,可以减少缺页异常的发生,提高内存访问效率。不过,由于这些内存没有归还系统,在内存工作繁忙时,频繁的内存分配和释放会造成内存碎片。
而 mmap() 方式分配的内存,会在释放时直接归还系统,所以每次 mmap 都会发生缺页异常。在内存工作繁忙时,频繁的内存分配会导致大量的缺页异常,使内核的管理负担增大。这也是 malloc 只对大块内存使用 mmap 的原因。
在发现内存紧张时,系统就会通过一系列机制来回收内存,比如下面这三种方式:
回收缓存,比如使用 LRU(Least Recently Used)算法,回收最近使用最少的内存页面;
回收不常访问的内存,把不常用的内存通过交换分区直接写到磁盘中;
杀死进程,内存紧张时系统还会通过 OOM(Out of Memory),直接杀掉占用大量内存的进程。
Swap 其实就是把一块磁盘空间当成内存来用。它可以把进程暂时不用的数据存储到磁盘中(这个过程称为换出),当进程访问这些内存时,再从磁盘读取这些数据到内存中。所以,你可以发现,Swap 把系统的可用内存变大了。不过要注意,通常只在内存不足时,才会发生 Swap 交换。并且由于磁盘读写的速度远比内存慢,Swap 会导致严重的内存性能问题。
目前一般讲软够守护进程设置为禁止oom :通过 /proc 文件系统,手动设置进程的 oom_adj ,从而调整进程的 oom_score。oom_adj 的范围是 [-17, 15],数值越大,表示进程越容易被 OOM 杀死;数值越小,表示进程越不容易被 OOM 杀死,其中 -17 表示禁止 OOM。
对free/top 中出现的buffer以及cache:
free Unused memory (MemFree and SwapFree in /proc/meminfo)
shared :Memory used (mostly) by tmpfs (Shmem in /proc/meminfo, available on kernels 2.6.32, displayed as zero if not available)
buffers:Memory used by kernel buffers (Buffers in /proc/meminfo):Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值
cache :Memory used by the page cache and slabs (Cached and Slab in /proc/meminfo)Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。
man proc可以看到如下信息
Buffers %lu:Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20MB or so).-----> 写磁盘用到Buffer??
Cached %lu:In-memory cache for files read from the disk (the page cache). Doesn't include SwapCached.Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘------>Cache 是对从文件读取数据的缓存?????
buffer/cache:
Buffer 既可以用作“将要写入磁盘数据的缓存”,也可以用作“从磁盘读取数据的缓存”。
Cache 既可以用作“从文件读取数据的页缓存”,也可以用作“写文件的页缓存”。------应该是这样的
dd if=/tmp/file of=/dev/null
dd if=/dev/sda3 of=/dev/null bs=1M count=200
测试
drop_cache-sar的更多相关文章
- Linux系统sar命令解析
安装 如果系统没有该命令请安装: apt-get install sysstat yum install sysstat 安装完毕: vi /etc/default/sysstat ENABLED=& ...
- Linux之sar命令介绍
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...
- Linux命令小结:crontab/netstat/iostat/sar
crontab cron可以设定在指定的时间运行任务. 1.查看定时任务 [root@client1 ~]# crontab -l -u root */1 * * * * date >> ...
- Linux系统性能统计工具Sar和实时系统性能监控脚本
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...
- [Linux 性能检测工具]SAR
SAR NAME: SAR报告,收集,保存系统活动信息 语法: sar [ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -i interval ] [ -m ...
- mpstat, pidstat, iostat和sar
在我们上一篇文章中,我们已经学习了如何去安装和更新sysstat,并且了解了包中的一些实用工具. 今天,我们将会通过一些有趣的实例来学习mpstat, pidstat, iostat和sar等工具,这 ...
- Linux 性能工具 - sar学习
简介 sar是一款在linux下的性能工具,可以观察到CPU,内存,IO,运行队列,每秒上下文切换等信息. 软件工具安装 #Ubuntu sudo apt-get install sysstat # ...
- Linux sar分析网卡流量
yum install sysstat sar -n { DEV | EDEV | NFS | NFSD | SOCK | ALL } sar 提供六种不同的语法选项来显示网络信息.-n选 ...
- sar 找出系统瓶颈的利器
sar 找出系统瓶颈的利器sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态.它的 ...
- Redhat Linux 性能 - 内置的 sar
缺省 / 默认 Redhat Linux 会自动使用 sar 采集系统性能信息,并记录到 /var/log/sa 每 10分钟采集一次, 记录 CPU / Memory / Disk / Networ ...
随机推荐
- Python数据类型--集合(set)
Python的集合是无序.可迭代的容器对象,所有元素放在一对大括号中{},元素之间使用逗号隔开,同一集合内的元素具有唯一性,不允许重复. 集合中只能包含数字.字符串.元组等不可变类型的数据,不能包含列 ...
- MeteoInfoLab脚本示例:SeaWiFS HDF Grid数据
SeaWiFS HDF Grid数据读取,特别是涉及到了文件的众多属性数据的读取,数据取对数后绘图.脚本程序: #Add data file f = addfile('D:/Temp/hdf/S199 ...
- MeteoInfoLab脚本示例:FY-2C 云分类HDF数据
脚本程序: #Add data file fn = 'D:/Temp/hdf/FY2C_CLC_MLT_NOM_20070730_1800.hdf' f = addfile(fn) #Get data ...
- swoole热启动
通过扫描指定的要扫描的目录,把所有文件找出来,分别md5 连接字符串,最后再md5返回 启动定时器,扫描,当前的加密值和以前一样不管,否则就重启服务,把当前赋值给旧值 . httpServer.php ...
- 转 mysql show processlist 查看当前连接
show processlist和show full processlist processlist命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的连接状态帮助识别 ...
- leaflet平台添加天地图方法
leaflet平台添加天地图得方法具体如下操作 var map = L.map('map', { crs: L.CRS.EPSG4326, zoomControl: true, edit ...
- Hexo相关配置
date: 2018-11-16 18:27:14 updated: 2018-11-16 20:06:16 1.配置Hexo基本信息 title: 猫熊小才天の书院 #博客标题 subtitle: ...
- SpringCloud Alibaba开篇:SpringCloud这么火,为何还要学习SpringCloud Alibaba?
写在前面 大家都知道,SpringCloud Alibaba是在SpringCloud基础上开发并开源的一套微服务架构体系.那么,肯定会有小伙伴要问:在微服务领域,SpringCloud已经很火了,为 ...
- Java基础之字面值
概要:什么是字面值 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值.比如在a = b * 2这个语句中,2就是一个字面值,它本身就是一个具体的值. 在Java源代码中,字面值用 ...
- 如何解决 Nginx 端口映射到外网后访问地址端口丢失的问题
1. 问题说明 一个手机h5页面的项目,使用nginx(监听80端口)进行访问,内网访问的地址是192.168.12.125/h5,访问正常,nginx中的配置如下: #微信H5页面访问 locati ...