Linux查看哪些进程占用的系统 buffer/cache 较高 (hcache,lsof)命令

2023-09-20 11:34:24

1、什么是buffer/cache ?

    buffer/cache 其实是作为服务器系统的文件数据缓存使用的,尤其是针对进程对文件存在 read/write 操作的时候,所以当你的服务进程在对文件进行读写的时候,Linux内核为了提高服务的读写速度,则将会把文件放在此处的 buffer/cache 中进行缓存使用,由于 Linux服务的特点便是任何事物都会以文件的形式进行存在,所以你会发现不管你是否对文件做了大规模的读写,机器的 buffer/cache 是一直都存在的,并且持续的增高不下,这是因为服务器所产生的网络连接也好,用户协议的(UDP)套接字也好,这部分的数据系统都会为应用程序创建对应的文件描述符,而这些文件描述符的使用,则又都会重新进入 buffer/cache 中做读写使用,所以这也是你的机器始终都会存在较高 buffer/cache 的原因,(因为所有的文件读写都会用到 buffer/cache,在内存合理的情况下)

2、buffer/cache 需要注意的一些特点

    在服务内存够用的情况下,Linux内核为了加快对文件的读写效率会将文件放入之buffer/cache 中 以保证读写效率,但其实,尽管当你的应用程序对文件的读写运行结束后,buffer/cache 也不会自动释放该部分内存,而是作为缓冲进行保留,等到你的服务进程在下一次进行相同文件的读写时就可以直接使用,省去了各种重新进行内存初始化的操作;所以这将会导致,当你的应用进程频繁对不同的文件进行读写时,你会发现服务所可以直接使用的free内存将会越来越少的一个重要原因;难道 buffer/cache 在这样无休止的缓存当中就不会自动释放?当然不是,当服务器在内存压力较大的情况下时,则将会自动进行内存的回收,作为free空间分给其它进程使用,这其中主要回收的一个内存则是 buffer/cache 的缓冲区内存块;

3、如何进行手动 buffer/cache 回收?

    除了在系统进程内存使用较大压力的情况下进行内存的回收外,我们也可以进行手动的buffer/cache回收,但由于buffer/cache主要是用于文件的读写使用,所以进行文件回收时,一般常伴随系统的IO彪高,因为系统内核也对比cache中的数据与硬盘中的数据是否一致,如果不一致需要写会,然后才能进行内存的回收

将内存中数据强制先刷新到磁盘中
sync;

清理Buffer缓存区域
echo 3 > /proc/sys/vm/drop_caches 表示清除pagecache和slab分配器中的缓存对象
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。

1、hcache的下载地址

      hcache的github地址:https://github.com/silenceshell/hcache

2、 hcache的使用方式

    当前下载完对应的hcache后,则直接是一个对应的 bin文件,此时直接将对应的bin文件进行 chmod 授权后即可使用

将该bin文件设置为可执行文件

chmod 755 hcache

将该hcache移动到usr的bin目录中,使其可以被全局调用该命令

mv  hcache  /usr/local/bin/

3、hcache常用命令

全局显示10个最大的被缓存文件

hcache --top 10

查看指定进程ID所使用的buffer/cache 的使用情况

hcache -pid 3090

通过上述所获取到的被缓存最大的文件名称后,可以直接通过 lsof   file_name 得到当前所开启该文件的所有进程信息;

显示使用/dev/shm/PostgreSQL.1268002820的进程信息

lsof /dev/shm/PostgreSQL.1268002820

获取当前进程号所打开的所有文件信息

lsof -p 3090

更多推荐

小谈设计模式(2)—简单工厂模式

小谈设计模式(2)—简单工厂模式专栏介绍专栏地址专栏介绍简单工厂模式简单工厂模式组成抽象产品(AbstractProduct)具体产品(ConcreteProduct)简单工厂(SimpleFactory)三者关系核心思想Java代码实现首先,我们定义一个抽象产品接口Product,其中包含一个抽象方法use():然后

Redis的缓存、消息队列、计数器应用

目录一、redis的应用场景二、redis如何用于缓存三、redis如何用于消息队列四、redis如何用于计数器一、redis的应用场景Redis在实际应用中有广泛的应用场景,以下是一些常见的Redis应用场景:缓存:Redis可以用作缓存层,将频繁读取的数据存储在内存中,提高数据读取速度,减轻数据库负载。计数器:Re

Vulnhub系列靶机---HarryPotter-Fawkes-哈利波特系列靶机-3

文章目录信息收集主机发现端口扫描dirsearch扫描gobuster扫描漏洞利用缓冲区溢出edb-debugger工具msf-pattern工具docker容器内提权tcpdump流量分析容器外-sudo漏洞提权靶机文档:HarryPotter:Fawkes下载地址:Download(Mirror)难易程度:难上难信

Redis 集合操作实战(全)

目录SADD插入集合SCARD取元素数量SPOP随机移除元素SREM移除多个元素SMOVE移动元素到别的集合SMEMBERS取所有成员SRANDMEMBER取指定数量元素SISMEMBER判断元素是否存在SUNION多集合求并集SUNIONSTORE多集合求并集(存储)SINTER多集合求交集SINTERSTORE多集

PY32F003F18之比较器问题

PY32F003F18的模拟模块,其内部参考电压容易受到电源电压影响。当我连接"USB转串口的RXD"时,PC接收到模拟数据均正常;当我连接“USB转串口的TXD”时,发现内部参考电压的AD值为0xFFF。断开连接的“USB转串口的TXD”,模拟功能模块又恢复正常。于是用万用表测量“USB转串口的TXD”的电压,开路电

Spring高手之路10——解锁Spring组件扫描的新视角

文章目录1.组件扫描路径2.按注解过滤组件(包含)3.按注解过滤组件(排除)4.通过正则表达式过滤组件5.Assignable类型过滤组件6.自定义组件过滤器7.组件扫描的其他特性7.1组合使用组件扫描8.组件扫描的组件名称生成8.1Spring是如何生成默认bean名称的(源码分析)8.2生成默认bean名称的特殊情

一文巩固Spring MVC的Bean加载机制

目录一、什么是SpringMVC的Bean二、SpringMVC的Bean加载机制三、SpringMVC如何动态装载Bean一、什么是SpringMVC的Bean在SpringMVC中,Bean指的是在SpringIoC容器中创建和管理的对象。这些对象可以是普通的Java类,也可以是服务层组件、数据访问对象(DAO)或

手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】之实现任务阶段 5- bean 后置处理器

😀前言手动实现Spring底层机制【初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP】的第五篇具体实现了任务阶段5-bean后置处理器🏠个人主页:尘觉主页🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉在csdn获奖荣誉:🏆csdn城市之星2名⁣⁣⁣

kafka rabbitmq 详细对比

Kafka&rabbitmqkafkaProducer:消息生产者,将消息push到Kafka集群中的Broker。Consumer:消息消费者,从Kafka集群中pull消息,消费消息。ConsumerGroup:组团消费,每个Consumer都属于一个ConsumerGroup。消费者组在逻辑上是同一个订阅者。消费

JavaScript学习记录 | DOM事件流 事件冒泡-事件捕获-事件委托

目录DOM事件流常见面试题事件冒泡与事件捕获事件冒泡使用场景事件捕获使用场景事件冒泡和事件捕获区别事件委托-利用事件冒泡机制事件委托应用场景支持事件委托的事件事件委托的优缺点DOM事件流DOM事件流的三个阶段:捕获阶段->目标阶段->冒泡阶段常见面试题事件冒泡和委托是什么?有什么使用场景?事件委托的优点和缺点JS事件绑

线性代数基础-矩阵

八、矩阵的基础概念1.矩阵我们忘掉之前行列式的一切,列一种全新的数表,虽然长得很像,但是大不相同,首先一个区别就是矩阵不能展开成一个值,这里不讨论矩阵的空间意义{a11x1+a12x2+a13x3+...+a1nxn=b1a21x1+a22x2+a23x3+...+a2nxn=b2...an1x1+an2x2+an3x

热文推荐