跟踪快速更新的文件时,tmux 无响应

跟踪快速更新的文件时,tmux 无响应

我有一个日志文件,每秒要写入几百行。我想在 tmux 窗格中跟踪它。

但是,当我这样做时,tmux 变得没有响应——我无法更改窗格或窗口,甚至无法按 CTRL+C 来停止尾部。

大约 3 分钟后,tail 最终会被 CTRL+C 杀死,我将重新获得控制权 - 但在此之前我无法做任何事情(除了从终端切换到另一个窗口,例如我的浏览器)。

有什么办法可以解决这个问题吗?我怀疑这个问题是由于日志文件中写入了太多行而引起的。

答案1

问题更可能是 tmux 开销,尤其是当您的窗格上有垂直分割时。您可以将 tmux 设置为在写入一堆控制字符时不更新屏幕。请参阅man tmux以了解更多详细信息,但我的〜/ .tmux.conf

set -g c0-change-trigger 20 #default is 250
set -g c0-change-interval 1000 #default is 100

这告诉 tmux,当每毫秒有 20 个控制序列打印到屏幕上时,tmux 应该将其更新间隔更改为每 1000 毫秒一次(1/秒)。

答案2

这在 tmux 2.1 中得到了很大的改进。

其他答案中提到的 c0- 选项已被删除,并引入了缓冲的退避方法:https://raw.githubusercontent.com/tmux/tmux/master/CHANGES

答案3

这不太可能是由每秒写入几百次的拖尾日志文件引起的。

尝试通过 ssh 连接到该框或打开另一个终端会话,使用它strace附加到该tmux进程,查看该进程发出的系统调用和接收的信号。这肯定会有所帮助。

例子: strace -tT -pPID

输出到文件 strace -tT -pPID -o /path/to/tmux_output

注意:strace是一个轻量级调试器,它帮助我解决了过去的几个与 tmux 相关的问题,例如 tmux 无法在/var/run或中创建/删除文件/目录/run

答案4

我知道这不能解决您的问题,但请尝试将命令的输出通过管道传输lessmore

  • less允许您从甚至不可滚动的终端内滚动:

    <command> | less
    
  • more打印一页然后按回车键显示其后的每一行:

    <command> | more
    

相关内容