Zookeeper3.4.6之源码解读(二)

本文主要分析了Zookeeper 3.4.6中因fsync操作导致的警告问题。通过研究源码,定位到fsync.WarningThresholdMS的默认值为1000ms,当fsync时间超过这个阈值时,会发出警告。文中还探讨了解决方案,即在`java.env`配置文件中设置系统属性`fsync.warningthresholdms`以延长警告阈值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述:

最近使用storm之后发现zookeeper总是出现警告,故此跟踪了一下源码,知道问题产生在哪里。警告信息如下:

2014-09-19 13:41:29,400 [myid:1] - WARN  [SyncThread:1:FileTxnLog@321] - fsync-ing the write ahead log in SyncThread:1 took 4575ms which will adversely effect operation latency. See the ZooKeeper troubleshooting guide

2014-09-19 13:41:30,453 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@89] - Exception when following the leader

java.net.SocketTimeoutException: Read timed out

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.read(SocketInputStream.java:129)

at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)

at java.io.BufferedInputStream.read(BufferedInputStream.java:237)

at java.io.DataInputStream.readInt(DataInputStream.java:370)

at org.apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.java:63)

 

二、问题定位:(FileTxnLog)

org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.class



 

 

 /**

     * commit the logs. make sure that evertyhing hits the

     * disk

     */

    public synchronized void commit() throws IOException {

        if (logStream != null) {

            logStream.flush();

        }

        for (FileOutputStream log : streamsToFlush) {

            log.flush();

            if (forceSync) {

                long startSyncNS = System.nanoTime();

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值