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 ...
随机推荐
- JPA object references an unsaved transient instance - save the transient instance before flushing
nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.Transi ...
- Java播放MP3播放音频
Java播放MP3播放音频 下面我演示用jdk自带包.框架等分别展示播放mp3.等music 一.使用javafx包 AudioClip 注意jdk11以上剥离了javafx public stati ...
- 《RAPL: A Relation-Aware Prototype Learning Approach for Few-Shot Document-Level Relation Extraction》阅读笔记
代码 原文地址 预备知识: 1.什么是元学习(Meta Learning)? 元学习或者叫做"学会学习"(Learning to learn),它是要"学会如何学 ...
- POJ 3003 DP 寻路 记录路径
POJ 3003 DP 寻路 记录路径 我一开始把M看成是每个a_i的上限了,这是致命的,因为这个题dfs暴力搜索+剪枝是过不了的因为M<=40,全部状态有2的四十次幂. 正解是DP,设dp[i ...
- 云图说|云数据库MySQL内核小版本升级全攻略
摘要:华为云数据库MySQL支持自动或手动升级内核小版本,内核小版本的升级涉及性能提升.新功能或问题修复等. 华为云有新的内核小版本发布时,您可以在"实例管理"页面看到内核小版本升 ...
- 独家下载!突破开源Redis,华为云十年自研内核修炼之路《企业级Redis技术与应用解读》重磅发布
摘要:互联网业务神器最新揭秘:GaussDB(for Redis)如何以自研架构,突破开源版本限制,带来企业级稳定可靠?通过入门篇.性能篇.测评篇.应用篇四个章节,聚焦问题解决.场景应用和开发实战,分 ...
- JavaScript继承的实现方式:原型语言对象继承对象原理剖析
面向对象编程:继承.封装.多态. 对象的继承:A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法.这对于代码的复用是非常有用的. 在经典的面向对象语言中,您可能倾向于定义类对象,然后您 ...
- DataLeap的全链路智能监控报警实践(二):概念介绍
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 概念介绍 基线监控 根据监控规则和任务运行情况,DataLeap的基线监控能够决策是否报警.何时报警.如何报警以及 ...
- MyBatis batchInsert 批量插入数据
mybatis 是一个 Java 的持久层框架,它支持定制化 SQL.存储过程以及高级映射.通过 MyBatis,开发者可以直接编写原生态 SQL,避免了 JDBC 代码的繁琐. 如何在 MyBati ...
- Java 图片、文件 Base64 互转
Java 图片.文件 Base64 互转 package com.thoth.his.base.util; import java.io.FileInputStream; import java.io ...