8 GiB のファイル、256 MiB の Java heap
LogoRRR 26.8.0 · パフォーマンス実測
ファイル全体を Java heap に
収める必要がなくなりました。
数 GiB のログを開き、中央や末尾へ移動しても、Java heap は一定範囲に保たれます。最大 8 GiB のファイルを 256 MiB の Java heap で検証しました。
$ open production.log
- ファイル
- 8 GiB
- Java heap 上限
- 256 MiB
- 最初のウィンドウ
- 155 ms
- 保持 Java heap
- 3.62 MiB
- プロセス PSS
- 159.2 MiB
先頭 · 中央 · 末尾を表示可能
メモリを制限した 8 GiB テスト
先頭・中央・末尾の表示後
2 GiB のデータで 26.8.0 と 26.2.0 を比較
アーキテクチャ
ファイル全体の常駐から、必要な範囲だけを読む方式へ
26.8.0 より前は、ファイルが大きくなるほど保持する行オブジェクトも数百万単位で増えていました。out-of-core エンジンは作業データを一定量に保ち、要求された範囲をその都度読み込みます。
2 GiB のデータでは約 3.21 GiB の Java heap が保持されました。4 GiB のデータでは、公開済みの 3 バージョンすべてが 4 GiB の Java heap を使い切りました。
8 GiB のデータで先頭・中央・末尾を表示した後も、保持された Java heap は 3.62 MiB でした。Java heap の上限は 256 MiB です。
同じファイル · 同じ 4 GiB Java heap
2 GiB のログを 4 世代の LogoRRR で比較
各値は、ファイル固有のキャッシュを退避してから成功した 3 回の中央値です。小さく表示した範囲は、実測の最小値と最大値を示します。
| バージョン | エンジン | 表示可能 | 保持 Java heap | 最大 PSS | 実行回数 |
|---|---|---|---|---|---|
| 24.4.0 | 全体を常駐 | 7.66 s | 3.08 GiB | 4.19 GiB | 3 |
| 25.2.0 | 全体を常駐 | 8.41 s | 3.21 GiB | 4.21 GiB | 3 |
| 26.2.0 | 全体を常駐 | 9.89 s | 3.21 GiB | 4.21 GiB | 3 |
| 26.8.0 | out-of-core | 144 ms | 3.58 MiB | 159.2 MiB | 3 |
データ表示まで 69 倍高速、保持 Java heap は 918 分の 1。 2 GiB のデータを使い、26.8.0 と比較対象で最も新しい公開版 26.2.0 を比べた結果です。
従来のメモリ上限
公開済みバージョンは 4 GiB で Java heap が枯渇。26.8.0 はその先へ
4 GiB の Java heap では、すべてのバージョンが 2 GiB のテストに合格しました。データを 4 GiB にすると、全体を常駐させるエンジンはすべて heap を使い切りました。新しいエンジンは 4 GiB と 8 GiB の両方に合格しています。
| ファイル | 24.4.0 | 25.2.0 | 26.2.0 | 26.8.0 |
|---|---|---|---|---|
| 500 MiB | ✓ 合格 | ✓ 合格 | ✓ 合格 | ✓ 合格 |
| 1 GiB | ✓ 合格 | ✓ 合格 | ✓ 合格 | ✓ 合格 |
| 2 GiB | ✓ 合格 | ✓ 合格 | ✓ 合格 | ✓ 合格 |
| 4 GiB | × Java heap 枯渇 | × Java heap 枯渇 | × Java heap 枯渇 | ✓ 合格 |
| 8 GiB | — 再実行なし | — 再実行なし | — 再実行なし | ✓ 合格 |
Java heap が一度枯渇したバージョンでは、同じ失敗を繰り返さず、さらに大きなデータを「再実行なし」としました。
メモリ制限テスト
ファイルは 8 倍、メモリ使用量はほぼ一定
LogoRRR 26.8.0 の Java heap を 256 MiB に制限しました。ファイルを 1 GiB から 8 GiB へ増やしても、保持 Java heap は約 3.6 MiB、プロセス全体の PSS は約 159 MiB のままでした。
- 先頭
- 152 ms
- 中央
- 13 ms
- 末尾
- 6 ms
- Java heap
- 3.56 MiB
- PSS
- 157.3 MiB
- 先頭
- 146 ms
- 中央
- 13 ms
- 末尾
- 7 ms
- Java heap
- 3.58 MiB
- PSS
- 160.0 MiB
- 先頭
- 146 ms
- 中央
- 14 ms
- 末尾
- 9 ms
- Java heap
- 3.59 MiB
- PSS
- 158.9 MiB
- 先頭
- 155 ms
- 中央
- 18 ms
- 末尾
- 12 ms
- Java heap
- 3.62 MiB
- PSS
- 159.2 MiB
各値は 3 回の中央値です。各ウィンドウの実測範囲は、下の方法表に掲載しています。
現在の実用上の制約
ファイルサイズに比例するメモリではなく、ストレージ速度が処理時間を決める
最初の範囲を返すために、ソース全体を読む必要はありません。一方、全バイトを確認する処理時間は、引き続きドライブとファイルシステムに左右されます。
別途行った 500 MiB データの完全一致検索では、最初の一致を 3.38 s で取得しました。全体の走査には 34.8 s かかり、スループットは 14.4 MiB/s でした。
測定方法と出典
再現可能で、条件を控えめに定めた測定
各ビルドの実際のローダーコードと、決定的に生成した非スパースファイルを使用しました。実行ごとに別の JVM を起動し、プロセスメモリは OS の値を計測しています。
管理された入力
固定幅の決定的な UTF-8 ログ行を使用し、測定前に非スパースファイルとして生成しました。
コールドファイル条件
実行前に対象ファイルの OS キャッシュを退避します。システム全体のキャッシュは消去しません。
プロセスメモリ
保持 Java heap はガベージコレクション後に採取します。最大 proportional set size(PSS)は次のファイルから取得します: /proc/<pid>/smaps_rollup.
2 種類のテスト条件
4 GiB の Java heap で各バージョンを失敗点まで比較します。別の条件では 26.8.0 の heap を 256 MiB に制限し、1、2、4、8 GiB のデータで検証します。
| ファイル | 先頭 | 中央 | 末尾 | 保持 Java heap | 最大 PSS |
|---|---|---|---|---|---|
| 1 GiB | 152 ms 149–159 | 13 ms 12–14 | 6 ms 6–7 | 3.56 MiB | 157.3 MiB |
| 2 GiB | 146 ms 143–146 | 13 ms 12–13 | 7 ms 7–7 | 3.58 MiB | 160.0 MiB |
| 4 GiB | 146 ms 141–153 | 14 ms 13–15 | 9 ms 9–10 | 3.59 MiB | 158.9 MiB |
| 8 GiB | 155 ms 153–157 | 18 ms 15–18 | 12 ms 12–12 | 3.62 MiB | 159.2 MiB |
実行環境
Ubuntu 24.04.4 LTS, aarch64, 8 logical CPUs, openjdk version "25.0.2" 2026-01-20.
ビルド
- 24.4.0 — 公開日 2024-06-06, アセット
logorrr_24.4.0_arm64.deb, SHA-25627a4aea231dc78ba4b3838cc57361728bc714926f9270731bd7637eba8dda065 - 25.2.0 — 公開日 2025-12-23, アセット
logorrr_25.2.0_arm64.deb, SHA-256f8de52dccb4224a25b0689aaef9d64618e98102d7134e637b249d1830c516fb1 - 26.2.0 — 公開日 2026-03-03, アセット
logorrr_26.2.0_arm64.deb, SHA-256cfec5dd09753ba90167199aa5d94f388448fc518f7629bf598b7debb01489cca - 26.8.0 — リリース準備中のソーススナップショット
f5e31853, 26.8.0 としてビルド・測定
測定データの識別子
比較データ SHA-256: 7de25d018ba40d51504ccd265f03a5ef8167bd9ae52d543e66880444d5223024
負荷テスト SHA-256: 7f480db156fd24d6fa3d6946ea24c003ae8dd54abff5a3621c646aff2b58281e
この結果が示すのは、ここに記載したデータ、マシン、手順での挙動です。すべてのドライブや作業負荷を代表するものではありません。「ストレージ依存」とは、検証したファイルサイズの上限が保持 Java heap に比例しなくなったという意味です。ソース全体を読む処理は、引き続きストレージ速度に左右されます。検証した最大ファイル:8 GiB。
LogoRRR Pro
これまで大きすぎたログを開く
ファイル全体へのアクセスは LogoRRR Pro の機能です。無料プレビューには意図的に上限を設けているため、大容量ファイルを扱う機能を解除する前に操作感を確認できます。