8 GiB 檔案,256 MiB Java heap
LogoRRR 26.8.0 · 效能實測
檔案大小不再受限於
Java heap 容量。
開啟數 GiB 的日誌,跳到中段或結尾,Java heap 仍維持在固定範圍。本次測試的最大檔案為 8 GiB,Java heap 上限僅 256 MiB。
$ 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 檔案時,三個已發佈版本都耗盡了 4 GiB Java heap。
存取 8 GiB 檔案的開頭、中段和結尾後,保留的 Java heap 只有 3.62 MiB;測試時 Java heap 上限為 256 MiB。
同一檔案 · 同為 4 GiB Java heap
四代 LogoRRR 開啟同一份 2 GiB 日誌
每個數值都是三次成功執行的中位數;每次執行前均清除該測試檔的快取。下方的小字範圍代表實測最快值與最慢值。
| 版本 | 引擎 | 就緒 | 保留的 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 降為原來的 1/918。 結果採用 2 GiB 測試檔,比較 26.8.0 與本次測試中最新的已發佈版本 26.2.0。
過去的記憶體上限
已發佈版本在 4 GiB 檔案耗盡 Java heap,26.8.0 仍能繼續
Java heap 設為 4 GiB 時,所有版本都通過 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
每個數值都是三次執行的中位數。下方方法表列出各視窗的實測範圍。
目前的實際限制
決定速度的是儲存吞吐量,而非與檔案大小成正比的記憶體
回傳第一個視窗不再需要讀取完整來源。不過,必須檢查每個位元組的作業仍受硬碟與檔案系統速度影響。
另一項使用 500 MiB 測試檔的精確搜尋中,3.38 s 後出現第一筆結果;完整掃描耗時 34.8 s,吞吐量為 14.4 MiB/s。
方法與資料來源
可重現,並採用保守邊界的測量
測試使用各建置版本的實際載入器程式碼與決定性產生的非稀疏檔案。每次執行都啟動獨立 JVM,程序記憶體資料來自作業系統測量。
受控輸入
使用固定行寬、決定性產生的 UTF-8 日誌行;非稀疏檔案在測量前建立。
冷檔案策略
每次執行前清除測試檔對應的作業系統快取,但不清空全域快取。
程序記憶體
垃圾回收後取樣保留的 Java heap。比例集大小峰值(PSS)讀取自 /proc/<pid>/smaps_rollup.
兩組測試
一組使用 4 GiB Java heap,比較每個版本直到失敗點;另一組將 26.8.0 限制在 256 MiB Java heap,測試 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 功能。免費預覽保留明確限制,讓你先體驗工作流程,再解鎖大型檔案處理能力。