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 파일에서는 기존 출시 버전 세 개 모두 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은 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
각 값은 세 번 실행한 중앙값입니다. 각 창의 실제 측정 범위는 아래 방법 표에서 확인할 수 있습니다.
현재의 실질적인 제약
파일 크기에 비례한 메모리가 아니라 저장 장치 속도가 처리 시간을 좌우합니다
첫 창을 반환하기 위해 원본 전체를 읽을 필요가 없어졌습니다. 다만 모든 바이트를 확인해야 하는 작업은 여전히 드라이브와 파일 시스템 속도의 영향을 받습니다.
별도로 진행한 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로 제한하고 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 기능입니다. 무료 미리보기에는 의도적인 제한이 있어 대용량 파일 기능을 잠금 해제하기 전에 작업 흐름을 확인할 수 있습니다.