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 ...
随机推荐
- Spring Boot结合Element UI前后端分离的aixos的简单操作
1:axios是什么? 基于promise用于浏览器和node.js的http客户端 axios官网:http://www.axios-js.com/ 2:准备工作: 安装axios:npm ins ...
- javacv实现直播流
javacv实现直播流 javacv从入门到入土系列,音视频入门有一点门槛的延迟大概是2~4秒之间, 依赖 <!-- 需要注意,javacv主要是一组API为主,还需要加入对应的实现 --> ...
- C++ 学习宝藏网站分享
C++ 学习宝藏网站分享 1. C++ 在线参考手册 Cppreference https://zh.cppreference.com C++ 开发者必备的在线参考手册,是我最常访问的 C++ 网站之 ...
- 实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步
摘要:实践案例展示如何使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步. [业务场景及诉求] 希望将不同区域"华北-北京四"的rds与"亚太-新加坡&qu ...
- 提升数据决策时效,火山引擎DataLeapCDC分库分表能力升级!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,大数据研发治理套件DataLeap数据集成更新CDC分库分表能力,可做到将多个实例的多个数据库的多个分表 ...
- 大数据-业务数据采集-FlinkCDC 读取 MySQL 数据存入 Kafka
目录 作用 app 产生各层数据的 flink 任务 bean 数据对象 common 公共常量 utils 工具类 app.ods.FlinkCDC.java package com.atguigu ...
- 【django-Vue】项目day01 pip永久换源 虚拟环境搭建 项目前后端创建 项目目录调整
目录 昨日回顾 1 企业项目类型 2 企业项目开发流程 3 路飞项目需求 4 pip永久换源 5 虚拟环境搭建 5.1 使用pycharm创建虚拟环境 5.2 通用方案创建虚拟环境 6 luffy项目 ...
- IntelliJ IDEA项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
IntelliJ IDEA项目导入时报错: The import javax.servlet.http.HttpServletRequest cannot be resolved 翻译一下错误信息是说 ...
- AcWing 第 13 场周赛 补题记录
比赛链接:Here AcWing 3811. 排列 签到题, 先输出 \(n\) 然后输出 \(1\sim n -1\) 即可 AcWing 3812. 机器人走迷宫 不会什么特别高级的方法 qaq, ...
- 【教程】步兵 cocos2dx 加密和混淆
文章目录 摘要 引言 正文代码加密具体步骤代码加密具体步骤测试和配置阶段IPA 重签名操作步骤 总结 参考资料 摘要 本篇博客介绍了针对 iOS 应用中的 Lua 代码进行加密和混淆的相关技术.通过对 ...