【Linux】随记一个Linux全缓冲机制带来的小坑

在日常工作中,通过 tail+grep 查看日志,可能是一个程序员最常用的操作之一了。但最近遇到了一个由于Linux全缓冲机制带来的小坑,特此记录一下。

在进行用户行为打点日志文件的实时监控时,遇到这样一个问题:

采用的命令如下:

tail -300f  XXX.log | grep "XXX" | grep "YYY"

发现并没有实时grep出符合条件的日志记录,经过排查最后得出结论,原来是Linux中IO的缓冲机制的锅。

于是研究一下缓冲机制

  • 无缓冲,就是不使用缓冲机制。
  • 行缓冲,缓冲,直到遇到换行符。一般用于终端设备。
  • 全缓冲,缓冲,直到buffer满。一般用于块设备。

在全缓冲的情况下,一般来说buffer_size为4096,有些是8192。只有达到buffer_size,才会进行输出。

对应到具体的环境中

  • 终端窗口中执行tail命令,是面向终端设备的,会使用行缓冲
  • 使用管道时,会变为使用全缓冲,要等到字节数达到buffer_size才会看到输出

全缓冲的Linux操作:

  • |
  • >>

【扩展】

  1. grep 可以通过–line-buffer 参数设置缓冲模式

    tail -f log | grep --line-buffer xxx | grep --line-buffer yyy
    
  2. 对于没有提供设置缓冲模式的Linux命令,可通过stdbuf命令设置缓冲模式,例如tcpdump:

    stdbuf -oL tcpdump ... | grep ...
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值