writeBuffer 是预分配的anonymous pages, 并且mlock到物理内存了. 往里面写消息, 不会因为内存不足回收带来延迟. mmap的文件page cache, 在物理内存分配过快, background reclaim速度跟不上的时候, 线程会被block住, 进行direct reclaim, 带来延迟.
可参考: https://events.static.linuxfound.org/sites/events/files/lcjp13_moriya.pdf 祝好 2018-04-07 13:50 GMT+08:00 yuzhou li <iamzhou...@gmail.com>: > /** > * Message will put to here first, and then reput to FileChannel if > writeBuffer is not null. > */ > protected ByteBuffer writeBuffer = null; > > > 看MappedFile里面,有一个这样的buffer,然后查看他的用途,是消息先写到这个里面了,而每次rocketmq出现流控的时候,就是写这个buffer耗时很大的时候。。 > 所以我想问题这么设计的初衷是什么呢?直接用channel刷pageCache的话,和先写buffer,再刷channel的区别在什么地方呢? >