我有一个日志文件,每秒要写入几百行。我想在 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
我知道这不能解决您的问题,但请尝试将命令的输出通过管道传输less
到more
:
less
允许您从甚至不可滚动的终端内滚动:<command> | less
more
打印一页然后按回车键显示其后的每一行:<command> | more