首页 > 系统相关 >系统性能之内存篇(二)

系统性能之内存篇(二)

时间:2023-06-08 15:32:53浏览次数:42  
标签:缓存 cachetop read 性能 MB 系统 内存 app 33554432

利用缓存来提升程序的运行效率,即命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好。所谓缓存命中率,是指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比。 如何查询缓存命中情况呢?

介绍两个工具;

  • cachestat 提供了整个操作系统缓存的读写命中情况。
  • cachetop 提供了每个进程的缓存命中情况。

使用这两个工具首先需要安装bcc软件包,要想安装bcc-tools 需要升级内核版本为 4.1 或者更新的版本, 然后yum install -y bcc-tools。

1.案例分析

运行应用及查看日志

$ docker run --privileged --name=app -itd feisky/app:io-direct
$ docker logs -f app 
Reading data from disk /dev/sda2 with buffer size 33554432
Time used: 0.448797 s to read 33554432 bytes
Time used: 0.063788 s to read 33554432 bytes
Time used: 0.088653 s to read 33554432 bytes
Time used: 0.079398 s to read 33554432 bytes

发现每读取32MB数据,需要花0.4s 时间。 那1s 时间就大概能读取70MB数据

同时在终端上执行cachetop 看看进程app 的缓存情况

#每5s刷新一次缓存
cachetop 5 
13:40:20 Buffers MB: 0 / Cached MB: 448 / Sort: HITS / Order: ascending
PID      UID      CMD              HITS     MISSES   DIRTIES  READ_HIT%  WRITE_HIT%
    7818 root     cachetop                9        0        0     100.0%       0.0%
    7671 root     app                  2048        0        0     100.0%       0.0%

2048次缓存全部命中,读命中率为100%,看起来全部读请求都经过了系统缓存。思考下。。。。

是不是可以得到每秒读了多少数据呢? 我们知道内存是以页进行管理的,每个页的大小为4KB, 所以计算:2048次 *4KB/1024KB / 5s = 1.6MB,也就是每秒能读取1.6MB数据。显然跟 日志中看到每秒70MB数据相差甚大。

比较疑惑的是,为什么只能看到1.6MB的HITS?  是因为cachetop 不会把直接I/O 算进来。 这个命中的少量数据是元数据。

判断应用是否用了直接i/o,简单的方式观察系统调用,我们想起来用strace工具

strace -p  app进程号
munmap(0x7f8811333000, 33558528)        = 0
nanosleep({tv_sec=1, tv_nsec=0}, 0x7fff13f37d90) = 0
openat(AT_FDCWD, "/dev/sda2", O_RDONLY|O_DIRECT) = 4
mmap(NULL, 33558528, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8811333000
read(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 33554432) = 33554432
write(1, "Time used: 0.056457 s to read 33"..., 45) = 45
close(4)

 分析可以看出系统调用了openat 来打开磁盘分区/dev/sdb2,并且传入参数为O_RDONLY|O_DIRECT(只读方或者直接读取),绕过了系统缓存。

总结:

buffers和cache 提升系统的i/o性能,用缓存命中率来衡量缓存的使用效率。不过,buffers和cache是操作系统来管理的,应用程序并不能直接控制这些缓存的内容和生命周期,因此一般用专门的缓存组件如redis来提升性能。






标签:缓存,cachetop,read,性能,MB,系统,内存,app,33554432
From: https://blog.51cto.com/u_12191723/6440621

相关文章

  • m基于自适应修复算法的AODV-SAR路由协议matlab性能仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要AODV-SAR,Self-AdaptiveRepair定义1自修复节点:任意选取路径S→A→B→C→D为MANET中一条业务传输路径,其中节点S为该传输路径的源节点,节点D为该传输路径的目的节点。如果在某一时间,节点B和节点C之间的路径发生......
  • m基于自适应修复算法的AODV-SAR路由协议matlab性能仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要AODV-SAR,Self-AdaptiveRepair          定义1自修复节点:任意选取路径S→A→B→C→D为MANET中一条业务传输路径,其中节点S为该传输路径的源节点,节点D为该传输路径的目的节点。如果在某......
  • 五、Redis内存消耗
    从性能上来说,内存占用过高会引起Reids响应变慢从高可用上来说,内存过大可能会会引起部分数据丢失,故障恢复变慢Redis内存消耗主要在于其主进程消耗和子进程消耗。而主进程消耗又主要包括自身内存、对象内存、缓冲区内存、内存碎片五个方面1、自身内存指Redis进程自身所占用的内......
  • 外观模式:隐藏了复杂系统的复杂性,并提供一个简单的接口来访问系统
    外观模式是一种结构型设计模式,它为复杂子系统提供了一个统一的接口,从而使其更易于使用。外观模式隐藏了子系统的复杂性,并将其封装在一个高级接口中。在使用外观模式时,客户端只需要与外观对象进行交互,而不需要直接与子系统中的各个组件交互。//子系统中的组件classCPU{pu......
  • 【解决方案】DMS驾驶员监测系统自动化测试方案
    什么是DMS?DMS是英文DriverMonitorSystem的缩写,即驾驶员监控系统。主要是实现对驾驶员的身份识别、驾驶员疲劳驾驶以及危险行为的检测功能。目前主流监测方式以通过摄像头等图像传感器获取驾驶员面部图像为基础,运用机器视觉中人脸检测、面部特征点定位等算法技术,对......
  • 汽车电子系统及其功能介绍
    汽车电子系统是指在现代汽车中应用的各种电子设备和系统,用于控制和监测车辆的各个方面。下面是一些常见的汽车电子系统及其功能的简要介绍:1、发动机管理系统(EngineManagementSystem):控制和监测发动机的运行,包括燃油供给、点火、气缸喷射、排放控制等。2、制动防抱死系统(Antilo......
  • 图数据库HugeGraph——这个无非是利用cassandra+ES作为后端来做的图数据库,支持分布式
    HugeGraph介绍#以下引自官方文档:CopyHugeGraph是一款易用、高效、通用的开源图数据库系统(GraphDatabase,GitHub项目地址),实现了ApacheTinkerPop3框架及完全兼容Gremlin查询语言,具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。HugeGraph支持百亿以上的顶点......
  • hncloud:常见的美国服务器操作系统
    常见的美国服务器操作系统包括:WindowsServer:WindowsServer是微软公司提供的服务器操作系统,适用于各种企业级应用和服务,如网站托管、数据库管理、应用程序部署等。Linux发行版:Linux是一种开源操作系统,有许多不同的发行版可供选择,包括但不限于以下几种常见的发行版:Ubuntu:一种基于De......
  • 如何设置Windows操作系统TIME_WAIT状态的TCP连接快速回收时间?
    大规模Windows环境下,采用Nginx反向代理服务后,操作系统会产生较多TIME_WAIT的TCP(TransmissionControlProtocol)连接,操作系统默认TIME_WAIT的TCP连接回收时间是4分钟,TCP默认动态端口范围为开始端口49152,结束端口65535。这样会使回收TCP过慢导致系统吞吐量下降,甚至出现502访问失败问......
  • 主动发现系统稳定性缺陷:混沌工程
    这是一篇较为详细的混沌工程调研报告,包含了背景,现状,京东混沌工程实践,希望帮助大家更好的了解到混沌工程技术,通过混沌工程实验,更好的为系统保驾护航。一、概述1.1研究背景Netflix公司最早系统化地提出了混沌工程的概念。2008年8月,Netflix公司由于数据库发生故障,导致了三天时......