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 ...
随机推荐
- [Docker] redis 全配置
启动容器,加载配置文件并持久化数据 docker run -d --privileged=true -p 6379:6379 --restart always -v /usr/redis/conf:/ ...
- AntDesign初体验
AntDesign初体验 作为一个java开发也需要掌握一定的前端开发技能,毕竟靠人不如靠自己.再者,有时候一些小的改动自己就可以搞定了,就不用低三下四去求别人了: 安装Nodejs $ npm in ...
- 2016年 实验五 Internet与网络工具的使用
实验五 Internet与网络工具的使用 [实验目的] 本实验目的在于掌握 Telnet.FTP.Email的工作机理,并会在 Internet 上熟练使用相关工具软件. [实验条件] ⑴.个人计算机 ...
- 增强for循环的用法
一.增强for循环 增强for循环的作用: 简化迭代器的书写格式.(注意:增强for循环的底层还是使用了迭代器遍历.)增强for循环的适用范围: 如果是实现了Iterable接口的对象或者是数组对象都 ...
- map的key排序
java map的key排序吗 java为数据结构中的映射定义了一个接口java.util.Map,他实现了四个类,分别是:HashMap,HashTable,LinkedHashMapTreeMap ...
- 请求https接口时报错:Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi
如何解决SSL 根证书验错误: 一种解决方法是:verify=False 在session.request 里面: session.post(post_url,data=post_data,heade ...
- JavaScript数字与字母相互转换
数字 转换为 字母: const num = 'a'.charCodeAt() // num = 97 字母 转换为 数字: var str = String.fromCharCode(97) // ...
- Deployer 的使用
假设我们的项目在本地 /www/demo-project 下,那么我们切换到该目录: $ cd /www/demo-project 然后执行 Deployer 的初始化命令: $ dep init 它 ...
- Android面试题收录及解答10月刊
前言 嗨,大家好,好久不见.这里跟大家侃侃这中间发生了什么. 一个月前呢,想准备面试,就网上随便找找面试题什么的,发现要么就是卖课的,要么就是不给详细回答的或者回答不够深的(也许是我没找到).反正稍微 ...
- mysql 索引的原理(超细)
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...