web-dev-qa-db-ja.com

すぐに更新されたファイルをテーリングすると、tmuxが応答しなくなる

数百行から1秒に書き込むログファイルがあります。これをtmuxペインでテーリングします。

ただし、この操作を行うと、tmuxが応答しなくなります。ペインやウィンドウを変更できず、Ctrlキーを押しながらCキーを押してもテールを停止できません。

約3分後、最終的にCTRL + Cでテールが殺され、制御を取り戻しますが、それまで何もできません(端末からブラウザなどの別のウィンドウへの変更を除く)。

とにかくこれを解決する方法はありますか?ログファイルに非常に多くの行が書き込まれているため、問題が発生していると思われます。

4
Andy Smith

問題は、特にペインに垂直方向の分割がある場合、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は、1ミリ秒あたり20の制御シーケンスが画面に出力されている場合、更新間隔を1000ミリ秒(1/sec)に1回に変更する必要があることを示します。

3
William Everett

これは、tmux 2.1で大幅に改善されました。

他の回答で言及されたc0-オプションは削除され、バッファリングへのバックオフアプローチが導入されました: https://raw.githubusercontent.com/tmux/tmux/master/CHANGES

2
Andy Smith

これは、1秒あたり数百回書き込まれるログファイルの末尾が原因である可能性はありません。

ボックスにsshするか、別のターミナルセッションを開いて、straceを使用してtmuxプロセスにアタッチし、プロセスによって行われたシステムコールと受信したシグナルを確認します。これは間違いなく役立ちます。

例:strace -tT -pPID

ファイルへの出力strace -tT -pPID -o /path/to/tmux_output

注:straceは軽量のデバッガであり、過去のtmux関連の問題を解決するのに役立ちました。 tmuxは、/var/runまたは/runでファイル/ディレクトリを作成/削除できません。

1
Terry Wang

これで問題が解決しないことはわかっていますが、コマンドの出力をlessまたはmoreのいずれかにパイプしてみてください。

  • lessを使用すると、スクロールできない端末内からでもスクロールできます。

    <command> | less
    
  • moreはページを印刷し、その後Enterを押してその後のすべての行を表示します。

    <command> | more
    
0
Radu Rădeanu