由于早期的storm版本心跳信息严重依赖zookeeper,心跳风暴会导致zookeeper的事务日志频繁的写磁盘,带来的问题首当其冲的是磁盘IO会爆掉。

优化思路

将zookeeper事务的日志放入内存中,降低对磁盘的依赖,受内存空间容量限制,需要控制事务日志大小。

这个方案的风险就是一旦机房断电会导致zookeeper中的部分数据丢失,所以特别重要的数据不建议这样做,SSD会是个不错的选择。

方案步骤

  • 事务日志指向内存文件系统dataLogDir=/dev/shm
  • 关闭自动事务日志的管理#autopurge.purgeInterval=1
  • 启用脚本删除历史事务日志以便控制内存的使用

清理事务日志

  1. #!/bin/bash
  2. source /etc/profile
  3. #snapshot file dir
  4. dataDir=/opt/zookeeperdata/version-2
  5. #tran log dir
  6. dataLogDir=/dev/shm/version-2
  7. #leave transaction files
  8. leaveTran=10
  9. #leave snapshot files
  10. leaveSnap=10000
  11. echo ""
  12. echo ""
  13. echo "before purge memory:"
  14. free -m
  15. ls -t $dataLogDir/log.* | tail -n +$leaveTran  | xargs rm -f
  16. ls -t $dataDir/snapshot.* | tail -n +$leaveSnap | xargs rm -f
  17. echo "after purge memory:"
  18. free -m

zookeeper配置

  1. dataDir=/opt/zookeeperdata
  2. dataLogDir=/dev/shm
  3. #自动清理时保存在datadir里的数据快照数。最小值3
  4. #autopurge.snapRetainCount=3
  5. #自动清理任务的间隔小时数
  6. #autopurge.purgeInterval=1
  7. # 每当10000条事务日志写入时,创建snapshot文件
  8. snapCount=10000

磁盘IO低至可以忽略

为什么zookeeper会导致磁盘IO高【转】的更多相关文章

  1. 磁盘IO概念及优化入门知识

    在数据库优化和存储规划过程中,总会提到IO的一些重要概念,在这里就详细记录一下,对这个概念的熟悉程度也决定了对数据库与存储优化的理解程度,以下这些概念并非权威文档,权威程度肯定就不能说了. 读/写IO ...

  2. 集群瓶颈为什么是磁盘io

    阅读本文思考: 1.对磁盘IO了解多少 2.为什么是磁盘IO是瓶颈,有没有自己的答案 想了解磁盘io可以查看此帖:集群瓶颈:磁盘IO必读 (磁盘IO:磁盘输出输出) 集群的瓶颈提出多种看法,其中网络和 ...

  3. 磁盘IO的概念

    转载自:http://blog.csdn.net/letterwuyu/article/details/53542291 在数据库优化和存储规划过程中,总会提到IO的一些重要概念,在这里就详细记录一下 ...

  4. Linux系统 磁盘IO过高排查总结

    最近做的一个电商网站因为磁盘 I/O 过高导致访问速度奇慢,问题存在两个月有余未得到解决办法.此次排查原因的经验可以作下次问题的参考. 1.会看懂 top 系统命令出来的各项参数.此次是无意中发现 u ...

  5. 一次磁盘IO过高分析过程

    1.查看监控,发现整点时间有写IO过高情况

  6. linux 磁盘io利用率高,分析的正确姿势

    一.背景简介 作为一个DBA难免不了会遇到性能问题,那么我们遇到性能问题该如何进行排查呢?例如我们在高并发的业务下,出现业务响应慢,处理时间长我们又该如何入手进行排查,本片文章将分析io高的情况下如何 ...

  7. 针对系统中磁盘IO负载过高的指导性操作

    针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参考,如果磁盘IO确实比较大 ...

  8. 磁盘IO过高时的处理办法

    针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参考,如果磁盘IO确实比较大 ...

  9. mysql占用磁盘IO过高的解决办法

    一.现象 最近发现Mysql服务器磁盘IO一直很高 [root@push-- ~]# iostat -k -d -x Linux -.el7.x86_64 (push--) 2019年07月05日 _ ...

随机推荐

  1. MacBook快速入门

    入职新美大,全面进入Mac工作环境,果断"撸起袖子加油干","浪起来,逼格提起来".顺道提一嘴,这边的兄弟们的干劲是真心足,作为一名老兵痞,必须要虚心向身边NX ...

  2. SQL server学习(四)T-SQL编程之事务、索引和视图

    今天来分享下T-SQL高级编程中的事务.索引.视图,可以和之前的SQL server系列文章结合起来. 一.事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个 ...

  3. Bzoj4480: [Jsoi2013]快乐的jyy 广义后缀自动机 倍增 哈希 manacher

    国际惯例的题面:有人说这是回文自动机的板子题,然而我是不会这种东西的.于是,我选择用更一般性的方法去解决这个题,就是那一堆东西了.首先,我们把两个串同时插入一个广义SAM里,拓扑排序维护每个节点的pa ...

  4. python生成指定文件夹目录树

    # -*- coding: utf-8 -*- import sys from pathlib import Path class DirectionTree(object): "" ...

  5. Altium Designer Summer 09换成中文步骤

    1.打开Altium Designer Summer 09软件,在左上角file文件中点击,再打开Preferences出现如下,然后关闭软件在打开就完成了

  6. java参数转换为javaBean对象

    package com.tuxin.tool.json; import flexjson.JSONDeserializer;import flexjson.JSONSerializer;import ...

  7. java中的synchronized : 模拟取款

    1.定义账户类: public class Account { private int balance = 500; public int getBalance() { return balance; ...

  8. Java 中的“implements Runnable” 和“extends Thread”(转)

    知识点 “implements Runnable” 和“extends Thread”的不同 具体分析 最近在学习Android中的Handler消息传递机制时,创建新线程有两种方式:一种是实现Run ...

  9. [Visual studio] Visual studio 2017添加引用时报错未能正确加载ReferenceManagerPackage包的解决方法

    转载原文:http://www.ynpxrz.com/n1806804c2023.aspx 1.打开VS2017下的Developer Command Prompt for VS 2017 2.然后在 ...

  10. EF6 简单增删改查示例代码

    示例一: private DbContext _dbContext; public DbContext CurrentContext { get { if (_dbContext == null) { ...