pgcacher 的简单学习
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 的简单学习的更多相关文章
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- mongodb,redis简单学习
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
- html css的简单学习(三)
html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...
- html css的简单学习(二)
html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...
随机推荐
- [西湖论剑2023-Misc] 复现
MISC mp3 题目 我的解答: 010发现mp3藏有png图片 卡里分离得到图片 foremost cipher.mp3 zsteg发现里面有压缩包 提取出来 zsteg -e b1,r,lsb, ...
- GOF23--23种设计模式(三)
一.桥接模式 Java中的桥接模式(Bridge Pattern)是一种结构性设计模式,它将抽象部分和实现部分分离,使它们可以独立变化,同时通过桥接对象将它们连接起来. 这种模式将抽象与其实现解耦,使 ...
- 如何使用.NET在2.2秒内处理10亿行数据(1brc挑战)
译者注 在上周我就关注到了在github上有1brc这样一个挑战,当时看到了由Victor Baybekov提交了.NET下最快的实现,当时计划抽时间写一篇文章解析他的代码实现,今天突然看到作者自己写 ...
- PNG文件解读(1):PNG/APNG格式的前世今生
PNG格式的前世今生 png是一种无损压缩的位图片形格式,其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性.PNG使用从LZ77派生的无损数据压缩算法--LZW专 ...
- 9月活动回顾(免费领取PPT)|火山引擎DataLeap、ByteHouse多位专家带来DataOps、实时计算等前沿技术分享!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在上月举行的火山引擎开发者社区 Meetup 第12期暨超话数据专场<数智化转型背景下的火山引擎大数据技 ...
- 对话 BitSail Contributor | 梁奋杰:保持耐心,享受创造
2022 年 10 月,字节跳动 BitSail 数据引擎正式开源.同期,社区推出 Contributor 激励计划第一期,目前已有 13 位外部开发者为 BitSail 社区做出贡献,成为了首批 B ...
- Solon cloud 常用配置
一.配置示例: solon: app: name: "solon-consul-test" group: "test" solon.cloud.consul: ...
- PPT 动画-树叶摆动
插入树叶 插入矩形,长宽放大1倍 树叶和矩形组合
- VS IIS Express 启动项目后,绑IP让别人可以访问你的网站
如何VS IIS Express 启动项目后,绑本机IP,让别人可以访问你的网站,方便Debug 一.修改iis配置 1.在web服务器执行后,会运行IIS Express,右击它选择显示所有应用程序 ...
- 【python爬虫】 request模块介绍 http协议版本区别 双token认证 携带cookie的两种方式 requests.session的使用 post请求携带数据编码格式 request.text编码问题 下载图片,视频
目录 上节回顾 今日内容 1 爬虫介绍 2 request模块介绍 3 request发送get请求 4 request携带参数 5 url编码解码 6 携带请求头 http协议版本之间的区别 7 发 ...