pgcacher 的简单学习


学习地址

https://github.com/rfyiamcool/pgcacher
https://zhuanlan.zhihu.com/p/551833981
https://zhuanlan.zhihu.com/p/620860777

简单使用

下载pgcacher 之后进行一些简单的使用
其实发现 hcache 好像也可以进行查看 但是这些工具都有一些缺点. 仅可以分析存在进程的缓存占用信息
无法分析 已经消失(完成工作)的进程 所以会看到他分析的进程缓存大小比free 查询出来的大小要小很多.

使用过程

https://github.com/rfyiamcool/pgcacher/releases/tag/v0.3.3

可以下载编译好的二进制, 主要有x86 和 arm版本的

解压缩并且将文件放到 /usr/bin 目录下面

tar -zxvf pgcacher_v0.3.3_Linux_x86_64.tar.gz
scp pgcacher /usr/bin/ 查看整个系统的cache占用情况 pgcacher -top -limit 10
查看缓存占用最多的10个进程

结果分析-1

Oracle启动之后的处理
+-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------+
| Name | Size │ Pages │ Cached Size │ Cached Pages│ Percent │
|-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------|
| /u01/app/oracle/product/12.2.0.1/db_1/bin/oracle | 388.938M | 99569 | 252.177M | 64558 | 64.837 |
| /u01/app/oracle/oradata/ora12c/system01.dbf | 940.008M | 240642 | 232.914M | 59626 | 24.778 |
| /u01/app/oracle/oradata/ora12c/sysaux01.dbf | 980.008M | 250882 | 120.086M | 30742 | 12.254 |
| /usr/bin/dockerd | 77.257M | 19778 | 58.675M | 15021 | 75.948 |
| /u01/app/oracle/product/12.2.0.1/db_1/lib/libclntsh.so.12.1 | 68.259M | 17475 | 45.366M | 11614 | 66.461 |
| /usr/lib64/libLLVM-10.so | 80.121M | 20511 | 35.664M | 9130 | 44.513 |
| /u01/app/oracle/oradata/ora12c/redo06.log | 1.000G | 262145 | 30.039M | 7690 | 2.933 |
| /usr/bin/containerd | 28.168M | 7211 | 22.199M | 5683 | 78.810 |
| /u01/app/oracle/product/12.2.0.1/db_1/lib/libhasgen12.so | 30.013M | 7684 | 21.264M | 5444 | 70.849 |
| /usr/lib64/dri/swrast_dri.so | 20.584M | 5270 | 19.447M | 4979 | 94.478 |
|-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum │ 3.552G │ 931167 │ 837.831M │ 214487 │ 23.034 │
+-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------+ [root@oracle12c ~]# free -m
total used free shared buff/cache available
Mem: 47005 13788 31812 29 1404 32778
Swap: 8079 0 8079 发现前十名的占用 840M , 整个缓存 1400M 比较正常

结果分析-2

复制一个 6G大小的文件
复制完城后再查询发现 与步骤 1 里面的结果分析基本上一样. 但是free 出现了较大的变化
[root@oracle12c oracle]# free -m
total used free shared buff/cache available
Mem: 47005 13820 19552 28 13632 32733
Swap: 8079 0 8079

结果分析-3

复制文件的同时进行 pgcacher 检查:

复制中:
+-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------+
| Name | Size │ Pages │ Cached Size │ Cached Pages│ Percent │
|-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------|
| /home/oracle/filecopy301_9999.dump | 5.907G | 1548592 | 5.907G | 1548592 | 100.000 |
| /root/filecopy301_9999.dump2 | 2.712G | 710935 | 2.712G | 710935 | 100.000 | 接近复制完成
+-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------+
| Name | Size │ Pages │ Cached Size │ Cached Pages│ Percent │
|-------------------------------------------------------------+----------------+-------------+----------------+-------------+---------|
| /home/oracle/filecopy301_9999.dump | 5.907G | 1548592 | 5.907G | 1548592 | 100.000 |
| /root/filecopy301_9999.dump2 | 4.933G | 1293272 | 4.933G | 1293272 | 100.000 | 复制完成后 free 的内存情况
[root@oracle12c oracle]# free -m
total used free shared buff/cache available
Mem: 47005 13821 13487 28 19696 32724
Swap: 8079 0 8079

结果分析-4

多次复制文件之后进行验证, 发现free到了 313M 左右 就停止减少, 应该是开始驱逐了前期灌入到内存里面的page cache.
[root@oracle12c oracle]# free -m
total used free shared buff/cache available
Mem: 47005 13828 313 20 32863 32707
Swap: 8079 8 8071 free 的内存会逐渐的变多, 但是速度非常慢. Linux 操作系统除非是遇到更大的内存需求, 一般不会直接将内存驱逐. 是惰性删除.

drop_cache 验证

[root@oracle12c oracle]# free -m
total used free shared buff/cache available
Mem: 47005 13832 448 20 32724 32703
Swap: 8079 8 8071
[root@oracle12c oracle]# echo 1 >/proc/sys/vm/drop_caches
[root@oracle12c oracle]# free -m
total used free shared buff/cache available
Mem: 47005 13828 32748 20 428 32747
Swap: 8079 8 8071
[root@oracle12c oracle]# echo 2 >/proc/sys/vm/drop_caches
[root@oracle12c oracle]# free -m
total used free shared buff/cache available
Mem: 47005 13806 32789 20 409 32777
Swap: 8079 8 8071
[root@oracle12c oracle]# echo 3 >/proc/sys/vm/drop_caches
[root@oracle12c oracle]# free -m
total used free shared buff/cache available
Mem: 47005 13806 32788 20 410 32778
Swap: 8079 8 8071

drop_cache 的学习与理解

 0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存 其实
1 释放的page caches 就会释放绝大部分内存
2 的时候释放的是 目录项目以及slab里面可能用不到的信息
3 会释放1和2的全部, 所以理论上可以一次使用 3 释放尽可能多的资源.

结果分析-5

 pgcacher /root/*dump*
+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name | Size │ Pages │ Cached Size │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/filecopy301_9999.dump | 5.907G | 1548592 | 5.907G | 1548592 | 100.000 |
| /root/filecopy301_9999.dump2 | 5.907G | 1548592 | 5.907G | 1548592 | 100.000 |
| /root/filecopy301_9999.dump3 | 5.907G | 1548592 | 5.907G | 1548592 | 100.000 |
| /root/filecopy301_9999.dump4 | 5.907G | 1548592 | 5.907G | 1548592 | 100.000 |
| /root/filecopy301_9999.dump5 | 5.907G | 1548592 | 0B | 0 | 0.000 |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum │ 29.537G │ 7742960 │ 23.630G │ 6194368 │ 80.000 │
+----------------------------+----------------+-------------+----------------+-------------+---------+ 可以通过 pgcacher 具体文件的方式来查看文件占用缓存的情况 echo 1 >/proc/sys/vm/drop_caches
然后效果为:
+----------------------------+----------------+-------------+----------------+-------------+---------+
| Name | Size │ Pages │ Cached Size │ Cached Pages│ Percent │
|----------------------------+----------------+-------------+----------------+-------------+---------|
| /root/filecopy301_9999.dump | 5.907G | 1548592 | 0B | 0 | 0.000 |
| /root/filecopy301_9999.dump2 | 5.907G | 1548592 | 0B | 0 | 0.000 |
| /root/filecopy301_9999.dump3 | 5.907G | 1548592 | 0B | 0 | 0.000 |
| /root/filecopy301_9999.dump4 | 5.907G | 1548592 | 0B | 0 | 0.000 |
| /root/filecopy301_9999.dump5 | 5.907G | 1548592 | 0B | 0 | 0.000 |
|----------------------------+----------------+-------------+----------------+-------------+---------|
│ Sum │ 29.537G │ 7742960 │ 0B │ 0 │ 0.000 │
+----------------------------+----------------+-------------+----------------+-------------+---------+

结论

我这边理解 linux 的 page caches 内存其实就与 JVM内部的堆区很类似.
如果进程还存在, 那么可以通过 进程的/proc/$pid/fd 进行汇总查看对应的内存使用.
如果进程已经不存在了, 那么page cache 内的理论上可以清除. 跟JVM里面的对象没有了与root对象的关联
可以使用gc进行进行回收.
因为系统的GC频率较低. 所以内存压力可能一直显得保持的比较高. 相对的 但是因为程序的时间局部性和空间局部性: linux 认为保留最近使用的文件的page caches 是非常有用的.
所以linux 其实除非是遇到了内存大量申请, 不然他是不会驱逐自己辛辛苦苦导入到内存里的缓存信息. [root@oracle12c oracle]# time scp filecopy301_9999.dump /root/filecopy301_9999.dump
real 0m30.726s [root@oracle12c oracle]# time scp filecopy301_9999.dump /root/filecopy301_9999.dump2
real 0m28.721s [root@oracle12c oracle]# time scp filecopy301_9999.dump /root/filecopy301_9999.dump3
real 0m12.372s [root@oracle12c oracle]# time scp filecopy301_9999.dump /root/filecopy301_9999.dump4
real 0m28.558s 发现清除缓存之后 第一次的时间是最久的
当被复制的文件进行缓存之后, 后面几次的复制都会有所性能提升.

pgcacher 的简单学习的更多相关文章

  1. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  2. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  3. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  4. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  5. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  6. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  7. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  8. mongodb,redis简单学习

     2.mongodb安装配置简单学习                   配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作                 ...

  9. html css的简单学习(三)

    html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...

  10. html css的简单学习(二)

    html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...

随机推荐

  1. 技本功|Hive优化之Spark执行引擎参数调优(二)

    Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主要有数据 ...

  2. libGDX游戏开发之文理打包(八)

    libGDX游戏开发之文理打包(八) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和googl ...

  3. Android开发之账号密码登录跳转、固定时间显示进度条实现

    登陆界面.登陆跳转和进度条功能实现 首先打开Android studio新建一个空项目,打开layout文件夹下的activity_main.xml文件,来设置登陆界面的布局.登陆界面需要两个输入框, ...

  4. 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(三)

    前言 今天的第三篇,感觉没啥人看呀,难道没有兄弟跟我有同样的整合需求吗???手动 , 本文会简短一些,介绍下 CastleCore 作为代理库的一些缺点甚至是硬伤 异步支持 先上代码 /// < ...

  5. $router.push跳转页面传参

    $router.push传参与收参 //传参 <el-button type="text" @click="$router.push('/games/Match?i ...

  6. 在线编辑Word——插入内容控件

    内容控件是可添加和自定义的以在模板.窗体和文档中使用的单个控件.Word中支持添加多种类型的控件用于不同文档的设计需求.本文,将通过在线编辑的方式展示如何在Word中插入内容控件,这里使用的在线编辑器 ...

  7. 为什么vacuum后表还是继续膨胀?

    摘要: 对于更新和删除操作频繁的表,会存在大量垃圾数据,导致磁盘空间的浪费和查询扫描时额外的IO开销,需要定期执行清理操作(vacuum)来控制行存表以及表上索引的膨胀.本文将对vacuum的原理以及 ...

  8. webpack原理(2):ES6 module在Webpack中如何Tree-shaking构建

    Tree-shaking 最早由打包工具 Rollup 提出 DCE 作用于模块内(webpack 的 DCE 通过 UglifyJS 完成),而 Tree-shaking 则是在打包的时候通过模块之 ...

  9. Axure 页面交互

  10. PPT 图片8大操作技巧

    如何实现图片的批量导入 插入相册 图片批量导出 7z 直接解压 修改扩展名 -> 解压 PPT 抠图 设备透明色 删除背景色 二次曝光效果 低版本 office 通过,形状来实现 图片融入背景 ...