当前位置: 首页 > news >正文

网站建设的基本要素比较好的网站开发教学网站

网站建设的基本要素,比较好的网站开发教学网站,小程序制作开发如意推,wordpress美食主题目录 内存碎片是如何形成的#xff1f; 如何判断是否有内存碎片#xff1f; 如何清理内存碎片#xff1f; INFO命令 面向 Prometheus 的 Redis-exporter 监控 实习期间#xff0c;了解到#xff0c;企业级开发中多个项目使用Redis#xff0c;运行Redis实例的有可能是…目录 内存碎片是如何形成的 如何判断是否有内存碎片 如何清理内存碎片 INFO命令 面向 Prometheus 的 Redis-exporter 监控 实习期间了解到企业级开发中多个项目使用Redis运行Redis实例的有可能是同一台物理机器那么前一个项目的数据过期了新的项目重新部署Redis就要关注Redis的内存存储效率了毕竟硬件资源成本高且有限。在使用 Redis 时经常会遇到这样一个问题做了数据删除数据量已经不大了使用 top 命令查看时为什么 Redis 还是占用了很多内存呢 实际上这是因为当数据删除后Redis 释放的内存空间会由内存分配器管理并不会立即返回给操作系统。所以操作系统仍然会记录着给 Redis 分配了大量内存。但是这往往会伴随一个潜在的风险点Redis 释放的内存空间可能并不是连续的那么这些不连续的内存空间很有可能处于一种闲置的状态。这就会导致一个问题虽然有空闲空间Redis 却无法用来保存数据不仅会减少 Redis 能够实际保存的数据量还会降低 Redis 运行机器的成本回报率。这就是内存碎片化 内存碎片是如何形成的 内存碎片的形成有两个原因一是操作系统的内存分配机制二是 Redis 的负载特征。 内存分配器的分配策略 内存分配器一般是按固定大小来分配内存而不是完全按照应用程序申请的内存空间大小给程序分配。Redis 可以使用 libc、jemalloc、tcmalloc 多种内存分配器来分配内存默认使用 jemalloc。jemalloc 的分配策略之一是按照一系列固定的大小划分内存空间例如 8 字节、16 字节、32 字节、48 字节…, 2KB、4KB、8KB 等。当程序申请的内存最接近某个固定值时jemalloc 会给它分配相应大小的空间。这样的分配方式本身是为了减少分配次数。但是如果 Redis 每次向分配器申请的内存空间大小不一样这种分配方式就会有形成碎片的风险。 键值对大小不一样和删改操作 Redis 作为缓存系统或键值数据库对外提供服务时不同业务的数据都可能保存在 Redis 中会带来不同大小的键值对。这样Redis 申请内存空间分配时本身就会有大小不一的空间需求。其次键值对会被修改和删除这会导致空间的扩容和释放。一方面如果修改后的键值对变大或变小了就需要占用额外的空间或者释放不用的空间。另一方面删除的键值对就不再需要内存空间了此时就会把空间释放出来形成空闲空间。 大量内存碎片的存在会造成 Redis 的内存实际利用率变低解决问题前要先判断 Redis 运行过程中是否存在内存碎片。 如何判断是否有内存碎片 Redis 是内存数据库内存利用率的高低直接关系到 Redis 运行效率的高低Redis 提供了 INFO 命令可以用来查询内存使用的详细信息 mem_fragmentation_ratio表示的就是 Redis 当前的内存碎片率。这个碎片率是上面命令中的两个指标 used_memory_rss 和 used_memory 相除的结果。  mem_fragmentation_ratio used_memory_rss/ used_memory used_memory_rss 是操作系统实际分配给 Redis 的物理内存空间里面就包含了碎片而 used_memory 是 Redis 为了保存数据实际申请使用的空间。 如何根据以上指标判断是否内存碎片化严重呢提供一些经验阈值 mem_fragmentation_ratio 大于 1 但小于 1.5。这种情况是合理的。因为上面介绍的那些因素是难以避免的。毕竟内因的内存分配器是一定要使用的分配策略都是通用的不会轻易修改而外因由 Redis 负载决定也无法限制。所以存在内存碎片也是正常的。mem_fragmentation_ratio 大于 1.5 。表明内存碎片率已经超过了 50%。这时就需要采取一些措施来降低内存碎片率。  通过上面我的Redis截图发现此时内存碎片率已经比较高了需要清理内存碎片了 如何清理内存碎片 Redis 自身提供了一种内存碎片自动清理的方法简单来说就是“搬家让位合并空间”。当有数据把一块连续的内存空间分割成好几块不连续的空间时操作系统就会把数据拷贝到别处。此时数据拷贝需要能把这些数据原来占用的空间都空出来把原本不连续的内存空间变成连续的空间。否则如果数据拷贝后并没有形成连续的内存空间这就不能算是清理了。 注意碎片清理是有代价的操作系统需要把多份数据拷贝到新位置把原有空间释放出来这会带来时间开销。因为 Redis 是单线程在数据拷贝时Redis 只能等着这就导致 Redis 无法及时处理请求性能就会降低。 Redis 专门为自动内存碎片清理功机制设置参数了可以通过设置参数来控制碎片清理的开始和结束时机以及占用的 CPU 比例从而减少碎片清理对 Redis 本身请求处理的性能影响。 把 activedefrag 配置项设置为 yes命令如下 config set activedefrag yes 这个命令只是启用了自动清理功能但是具体什么时候清理会受到下面这两个参数的控制。这两个参数分别设置了触发内存清理的一个条件如果同时满足这两个条件就开始清理。在清理的过程中只要有一个条件不满足了就停止自动清理。 1active-defrag-ignore-bytes 100mb表示内存碎片的字节数达到 100MB 时开始清理 2active-defrag-threshold-lower 10表示内存碎片空间占操作系统分配给 Redis 的总空间比例达到 10% 时开始清理。 为了尽可能减少碎片清理对 Redis 正常请求处理的影响自动内存碎片清理功能在执行时还会监控清理操作占用的 CPU 时间而且还设置了两个参数分别用于控制清理操作占用的 CPU 时间比例的上、下限既保证清理工作能正常进行又避免了降低 Redis 性能。如下 1active-defrag-cycle-min 25 表示自动清理过程所用 CPU 时间的比例不低于 25%保证清理能正常开展 2active-defrag-cycle-max 75表示自动清理过程所用 CPU 时间的比例不高于 75%一旦超过就停止清理从而避免在清理时大量的内存拷贝阻塞 Redis导致响应延迟升高。 小结 info memory 命令是一个好工具可以帮助查看碎片率的情况 碎片率阈值是一个好经验可以帮忙有效地判断是否要进行碎片清理了 内存碎片自动清理是一个好方法可以避免因为碎片导致 Redis 的内存实际利用率降低提升成本收益率。 建议 内存碎片自动清理涉及内存拷贝这对 Redis 而言是个潜在的风险。如果在实践过程中遇到 Redis 性能变慢记得通过日志看下是否正在进行碎片清理。如果 Redis 的确正在清理碎片那么建议调小 active-defrag-cycle-max 的值以减轻对正常请求处理的影响。 最后INFO命令中的返回参数有很多也很有用值得总结下 INFO命令 Redis 本身提供的 INFO 命令会返回丰富的实例运行监控信息这个命令是 Redis 监控工具的基础。通过给定可选的参数 section 可以让命令只返回某一部分的信息 redis 127.0.0.1:6379 INFO [section] section可选项 1. Server 服务器运行的环境参数 2. Clients 客户端相关信息 3. Memory 服务器运行内存统计数据 4. Persistence 持久化信息 5. Stats 通用统计数据 6. Replication 主从复制相关信息 7. CPU CPU 使用情况 8. Cluster 集群信息 9. KeySpace 键值对统计数量信息 默认显示所有的信息通过指定section可以只显示想看的内容。 把 INFO 命令的返回信息分成 5 大类其中有的类别当中又包含了不同的监控内容如下表所示 在监控 Redis 运行状态时INFO 命令返回的结果非常有用。无论是运行单实例或是集群建议重点关注一下 stat、commandstat、cpu 和 memory 这四个参数的返回结果这些里面包含了命令的执行情况比如命令的执行次数和执行时间、命令使用的 CPU 资源内存资源的使用情况比如内存已使用量、内存碎片率CPU 资源使用情况等可以帮助程序员判断实例的运行状态和资源消耗情况。 不过INFO 命令只是提供了文本形式的监控结果并没有可视化所以在实际应用中还可以使用一些第三方开源工具将 INFO 命令的返回结果可视化。当前最流行应该就是Prometheus Grafana工具的使用了。 面向 Prometheus 的 Redis-exporter 监控 Prometheus是一套开源的系统监控报警框架。它的核心功能是从被监控系统中拉取监控数据结合Grafana工具进行可视化展示。而且监控数据可以保存到时序数据库中以便程序员进行历史查询。同时Prometheus 会检测系统的监控指标是否超过了预设的阈值一旦超过阈值Prometheus 就会触发报警。根据下图更好理解这些工具组件之间的关系 prometheus采集数据Grafana进行数据展示 grafana是一款采用go语言编写的开源应用主要用于大规模指标数据的可视化展示是网络架构和应用分析中最流行的时序数据展示工具目前已经支持大部分常用的时序数据库。  Prometheus 提供插件功能来实现对一个系统的监控把插件称为 exporter每一个 exporter 实际是一个采集监控数据的组件。Redis-exporter就是用来监控 Redis 的它将 INFO 命令监控到的运行状态和各种统计信息提供给 Prometheus从而进行可视化展示和报警设置。当然了除了监控Redis的插件还有别的从官网(Download | Prometheus上截取部分 下面是我学习prometheus时参考的文章帮助更高效使用这个工具 Prometheus部署、操作及Grafana展示、告警 Prometheus监控Redis集群Grafana实现可视化图文详解 Promethus(普罗米修斯安装与配置 其它linux常见的性能监控命令看这篇文章 Linux常见的一些性能监控命令
http://www.dnsts.com.cn/news/246799.html

相关文章:

  • 郴州品牌网站建设推广潍坊营销型网站制作
  • 网站制作开发的步骤和方法wordpress微信分享才能查看
  • 建站全过程wordpress close
  • 做牙科设计的网站中国电商建站程序
  • 源码站用dz wordpress免费手游推广平台
  • 主营商城网站建设wordpress需要什么环境
  • 网站开发课我的网站模板下载不了
  • 网站规划步骤有哪些浙江做公司网站多少钱
  • 做网站的图片尺寸怎么设定邯郸网上房地产官网
  • 手机网站设计公pythons网站开发
  • 网站建设分金手指专业十八建站优化内容
  • 网站建设培训总结手机app软件
  • 网站点播视频如何做考试报名费悦生活建设银行网站
  • 上海网站建设品牌杭州优化商务服务公司
  • 用php怎么做网站深圳装修公司前十强
  • 视频上传网站建设为网站吸引流量的方法
  • 建造网站 备案微信分销系统价格
  • 北京注销网站备案电商千万不要做虾皮
  • 瑞丽企业网站建设办公空间设计公司有哪些
  • 网络营销软件站wordpress禁止生成多个缩略图
  • 怎么在手机上做企业网站遂溪手机网站建设公司
  • photoshop+做网站logowordpress 二级目录 404
  • 做响应式网站是不是都用rem莱芜在线招聘
  • 嘉兴网站建设培训微信小程序怎么制作商城
  • 常规网站建设内容免费seo网站的工具
  • 眉山建设局网站模板下载网站
  • 网站页面怎么做导航大连免费营销型建站网络推广
  • 做ppt的动图下载哪些网站做企业网站需要买什么
  • 做教育门户网站法律风险网站开发app开发主营业务
  • 马拉松网站建设方案光伏电站建设的行业网站