現在、gnome ターミナルのスクロールバック設定 (編集 -> プロファイル設定 -> スクロール) を 10000 行に設定しています。無制限にチェックを入れたいのですが、メモリ クラッシュが発生するのではないかと心配です (大量の出力を行うプログラムを一晩中実行したままにしておくと、このせいでクラッシュしてしまうのは避けたいです)。
私の質問は次のとおりです:
これらのスクロールバック ラインはメモリに保存されますか、それともディスク上のファイルにキャッシュされますか?
10000 から 100000 または 100 万に変更しても安全ですか? どのようなパラメータ (RAM、空きディスク容量、開いている端末の数) を考慮する必要がありますか? 無制限を選択しても安全ですか?
答え1
非常に興味深い情報によると、それはディスク上の削除されたファイルに保存されているようです。ブログ投稿:
助けになったのは
gnome-terminal
、開いているファイルを確認することだけでした。その後、それが巧妙に動いていることに気付きました。開いているというファイルがいくつかありましたが、それらはすでに削除されていました。したがって、参照時には表示されず、プログラムが終了すると削除されます。これは理にかなっています。つまり、プロセスが終了すると、ファイルのスペースを再利用する方法は関係ありません (少なくとも私はそう思います)。つまり、プログラムがクラッシュしたり、 が発生してもファイルが残されることはありません。ただし、それらは復元できます。私の方法 (おそらく他にもあるでしょう) は、 を実行してそれらが何を指しているかを確認することでした。次に、これらを使用して新しいファイルを作成できます。これらは、端末出力の単なる逐語的なコピーです。圧縮されていません。何もされていません。結局のところ、私の端末履歴の 1 つは 900 MB 近くありました。しかし、それはランダムなデータがかなり長い間非常に速く吐き出された後のことで、通常の使用で発生する可能性は低いです。lsof
/tmp/vteXYZ1tv
kill -9
ls -l
/proc/<gnome-terminal pid>/fd
cat
もう一度強調しておきますが、投稿者はbase64 < /dev/urandom
メモリまたはディスク使用量の増加を探しながらしばらく実行していましたが、900 MB は例外的な使用量です。
答え2
gnome-terminal
(実際にはvte
) は、スクロールバックを の下の即時削除ファイル/tmp
(より正確には、 の影響を受ける標準の一時ファイルの場所$TMPDIR
と、おそらくいくつかの類似の場所の下) に保存します。
この設計は、主に無制限のスクロールバックによって OOM エラーが発生しないようにするために選択されました。ディスクがいっぱいになる可能性は大幅に低くなり、たとえいっぱいになったとしても、メモリ不足になるよりもシステム全体への悪影響は小さくなります。
vte-0.40
(Ubuntu 15.10 WW で登場する可能性が高い) は、これらのファイルを圧縮して暗号化します。これにより、必要なストレージ サイズが約 3 分の 1 ~ 4 分の 1 に縮小されます (アプリがプレーン テキストとして X 量のデータを生成する場合、必要なストレージの妥当な見積もりは X/4 ~ X/3 です)。また、誰かがハード ドライブに直接アクセスした場合のプライバシー/セキュリティの問題も解消されます。
/tmp
スクロールバックをメモリに保存するオプションを追加する予定です。これは、 の場合とほぼ同じですtmpfs
。すべてが計画どおりに進んだ場合、これは に表示されvte-0.42
、Ubuntu 16.04 XX LTS にも表示されます。ただし、約束はできません。