본문 바로가기
이슈

Apple 실리콘 시스템에서 실행되는 macOS 14의 Java 사용자는 macOS 14.4를 건너뛰고 macOS 14.4.1로 직접 업데이트해야 합니다.

by kakao-TAM 2024. 4. 1.

Apple 실리콘 프로세서(M1, M2 및 M3) 기반 macOS는 macOS 14.4 업데이트하면 Java 프로세스가 비정상종료하는 현상에 대한 오라클의 권고

 

https://blogs.oracle.com/java/post/java-on-macos-14-4

 

Java users on macOS 14 running on Apple silicon systems should skip macOS 14.4 and update directly to macOS 14.4.1

Java users on macOS 14 running on Apple silicon systems should consider delaying the macOS 14.4 update

blogs.oracle.com

2024년 3월 26일 업데이트:

2024년 3월 25일 Apple은 macOS 14.4.1을 출시하고 지원 사이트 에 이 문서에 설명된 문제를 해결한다고 표시했습니다. Oracle은 macOS 14.4.1을 적용한 후 문제를 재현할 수 없음을 확인할 수 있습니다. 이에 따라 이 문서를 업데이트했습니다.

Java 프로세스가 예기치 않게 종료되도록 하는 macOS 14.4에서 발생한 문제는 Java 8부터 JDK 22의 초기 액세스 빌드까지 모든 Java 버전에 영향을 미칩니다. 사용 가능한 해결 방법이 없으며 macOS 업데이트를 되돌릴 수 있는 쉬운 방법이 없기 때문에 , 영향을 받는 사용자는 OS 업데이트 전에 시스템을 완전히 백업하지 않으면 안정적인 구성으로 돌아가지 못할 수 있습니다.

이 문제는 macOS 14.4의 초기 액세스 릴리스에는 없었으므로 Apple이 업데이트를 출시한 후에야 발견되었습니다.

Apple 실리콘 프로세서(M1, M2 및 M3) 기반 macOS에는 동적으로 생성된 코드를 스레드별로 생성(쓰기)하거나 실행할 수 있는 방법과 시기를 제어하는 ​​기능이 포함되어 있습니다.

JIT(Just-In-Time) 컴파일 및 실행 주기의 일반적인 부분으로 macOS에서 실행되는 프로세스는 보호된 메모리 영역의 메모리에 액세스할 수 있습니다. macOS 14.4 업데이트 이전에는 특정 상황에서 macOS 커널이 SIGBUS 또는 SIGSEGV 신호를 프로세스에 전송하여 이러한 보호된 메모리 액세스에 응답했습니다. 그런 다음 프로세스는 신호를 처리하고 실행을 계속하도록 선택할 수 있습니다. macOS 14.4에서는 스레드가 쓰기 모드에서 작동 중일 때 보호된 메모리 영역에 대한 메모리 액세스가 시도되면 macOS는 대신 SIGKILL 신호를 보냅니다. 해당 신호는 프로세스에서 처리할 수 없으며 프로세스는 무조건 종료됩니다.

Java Virtual Machine은 코드를 동적으로 생성하고 정확성(예: 메모리 매핑된 파일의 잘림 처리)과 성능을 위해 보호된 메모리 액세스 신호 메커니즘을 활용합니다. macOS 14.4에서는 이를 시도하는 프로그램이 이제 신호를 처리할 기회를 갖지 못하고 종료됩니다.

GraalVM 기본 이미지로 생성된 AOT(Ahead-of-Time) 컴파일 애플리케이션은 영향을 받지 않지만 새 이미지를 빌드하는 기능은 영향을 받을 수 있습니다.

Oracle은 OpenJDK의 고객, Apple 및 파트너에게 이 상황을 알렸습니다. ARM 기반 Apple 장치의 Java 사용자는 macOS 14.4를 건너뛰고 macOS 14.4.1로 직접 업데이트하는 것이 좋습니다 .

댓글