现象 测试环境中某台机器连接数过多(ESTABLISHED连接数超过60K),发现无法再登陆该机器。 通过dmesg -T查看系统错误信息,如下: [Thu Oct 15 14:03:21 2015] nf_conntrack: table full, dropping packet. [Thu Oct 15 14:03:21 2015] nf_conntrack: table full, dropping packet. [Thu Oct 15 14:03:21 2015] nf_conntrack: table full, dropping packet. [Thu Oct 15 14:03:21 2015] nf_conntrack: table full, dropping packet. [Thu Oct 15 14:03:21 2015] nf_conntrack: table full, dropping packet. [Thu …

Continue reading nf_conntrack: table full, dropping packet解决办法

概述 本篇博客主要描述ext2文件系统中的各种典型元数据结构,其中包括文件系统级别的元数据,如超级块,块组描述符等,也包括文件级的元数据,如文件目录项,文件inode等。

Continue reading ext2系统元数据

纠删码算法主要用在网络编码方面,而这主要用在网络通信以及存储方面,我们就在这几篇博客来简单聊聊纠删码算法以及云存储方面的应用。 我们今天的目标是将纠删码算法基础原理讲清楚,在下一讲中我们再阐述现有分布式存储中如何使用这些纠删码算法。

Continue reading 纠删码算法基础

概述 从这篇博客开始,我们主要研究linux下ext2文件系统的设计和实现,我们的主要是目标是对ext2关键技术进行剖析,当然,ext2的年代比较久远了,可能研究它也不见得有多大的参考价值,但是,我的目标是将文件系统做成一个系列,ext2只是一个引子,后续会有ext3,ext4,reiserfs,btrfs,xfs等等,敬请期待。 本篇博客主要关注ext2文件系统的磁盘布局,即ext2会在格式化时将磁盘划分成什么样子。

Continue reading ext2磁盘布局

说明 Linux的IO路径可能是Linux系统中最纷繁复杂的模块了,而它又是如此的重要,直接决定了系统的性能。之前在看Linux IO模块源码时,就对IO模块的层次比较模糊,在对IO路径上的各个模块进行了较深入的理解后,将自己的理解写出来,希望对入门者能有所帮助。

Continue reading Linux 的IO层次

Go语言死锁检查工具,可以输出复杂的死锁链条信息,谁等在哪里等待,谁在哪里锁的,具体到行号,在不开启死锁检查时不会影响程序性能,可直接替代原生sync包。 这个包用来在开发调试期,帮助排查程序中的死锁情况。

Continue reading Go语言死锁检测工具

概述 Bitcask是由Riak提出的海量小文件存储场景下的解决方案,着眼解决以下问题: 读写低延迟 随机写请求的磁盘高吞吐量 故障时的快速恢复且不丢数据 使用简单 Bitcask论文中主要定义了文件存储格式以及相关API,感兴趣可见参考资料。 BeansDB是Douban参考Bitcask论文开发的适用于Douban使用场景的小文件存储系统。作者David通过匠心独具的设计和深厚的技术水平将这一复杂的问题解决的比较优雅,值得仔细品味一番。 近期阅读了Bitcask论文和部分BeansDB源码,在此基础上分析BeansDB的设计和实现上的一些关键技术,包括数据文件组织、内存hash tree索引等,拿出来与大家交流探讨。

Continue reading 优雅的Bitcask/BeansDB