성배 퀘스트
5047 단어 performancelinuxdockerjava
알 수 없는 호스트 예외
첫 번째 문제는 정적으로 연결된 Graal Native Images가 libc
설정 없이는 일부 작업을 수행할 수 없다는 것입니다. 이 경우 DNS 조회를 수행할 수 없어 java.net.UnknownHostException
가 됩니다. 나는 이것이 얼마나 어리석은 지에 대해 생각하지 않고 그냥 넘어갈 것입니다. Graal site에서 이를 위해 musl
를 사용할 수 있는 대략적인 지침이 있지만 빠른 Google이 Google Cloud에서 뭔가를 생각해 냈습니다. 나는 이것을 Helidon에 넣었고 ... 빌드하지 않았습니다.
#11 274.5 [WARNING] Error: Detected a direct/mapped ByteBuffer in the image heap. A direct ByteBuffer has a pointer to unmanaged C memory, and C memory from the image generator is not available at image runtime.A mapped ByteBuffer references a file descriptor, which is no longer open and mapped at run time. To see how this object got instantiated use --trace-object-instantiation=java.nio.DirectByteBuffer. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
#11 274.5 [WARNING] Trace: Object was reached by
#11 274.5 [WARNING] reading field io.grpc.netty.shaded.io.netty.buffer.PoolChunk.memory of
#11 274.5 [WARNING] constant io.grpc.netty.shaded.io.netty.buffer.PoolChunk@42d125b0 reached by
...
인터넷 검색
빌드 문제는 gRPC 라이브러리 내에 내장된 Netty 때문이었습니다. 다행히도 이에 대한 수정은 매우 쉬웠습니다: Google have their own library:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-graalvm-support</artifactId>
<version>0.3.0</version>
</dependency>
이를 추가하여 빌드하고 실행했지만 이제 GCP 구성을 찾을 수 없습니다.
java.lang.IllegalArgumentException: A project ID is required for this service but could not be determined from the builder or the environment. Please set a project ID using the builder.
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:142)
at com.google.cloud.ServiceOptions.<init>(ServiceOptions.java:304)
당황
일반적으로 볼륨을 사용자 홈에 방금 마운트했지만 Graal에 user.home
값이 없는 것 같습니다. 나는 그것을 확인하기 위해 이것을 파헤치지 않았으므로 그냥 해결할 것이라고 생각했습니다.
docker run --rm -it -p 8080:8080 `
-e CLOUDSDK_CONFIG=/gcloud `
-v $Env:APPDATA/gcloud/:/gcloud:ro `
helidon-quickstart-mp:native
붐! 오류 없이 실행되었습니다.
아아, microsoft/WSL#5324에 의해 응답된 마지막 딸꾹질이 하나 있었습니다. 간단히 말해서 Windows를 절전 모드로 전환하면 WSL2의 시계가 드리프트됩니다. 즉, 타임스탬프가 잘못 지정되어 로그 메시지를 찾을 수 없었습니다. WSL을 다시 시작하면 Cloud Logging에 일부 로그가 표시됩니다. 만세!
결과 이미지는 다소 포동포동한 116MB로 Alpine JLink보다 24MB 더 크고 11MB만 떨어져 있습니다. 나는 여분의 라이브러리로 설명될 수 있다고 생각하지 않지만 다른 날에 대해 걱정할 것이 있습니다. 그러나 스니핑할 수 없는 도커 컨테이너에 설정된 -m 32m
로 약 160ms에서 시작됩니다. Graal의 매력에 관계없이 알아야 할 곰 덫이 많이 있습니다. 이것이 곧 개선되기를 바랍니다.
이제 측정항목 및 추적에 대해...
Reference
이 문제에 관하여(성배 퀘스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/dansiviter/quest-for-the-holy-graal-1hlg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#11 274.5 [WARNING] Error: Detected a direct/mapped ByteBuffer in the image heap. A direct ByteBuffer has a pointer to unmanaged C memory, and C memory from the image generator is not available at image runtime.A mapped ByteBuffer references a file descriptor, which is no longer open and mapped at run time. To see how this object got instantiated use --trace-object-instantiation=java.nio.DirectByteBuffer. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
#11 274.5 [WARNING] Trace: Object was reached by
#11 274.5 [WARNING] reading field io.grpc.netty.shaded.io.netty.buffer.PoolChunk.memory of
#11 274.5 [WARNING] constant io.grpc.netty.shaded.io.netty.buffer.PoolChunk@42d125b0 reached by
...
빌드 문제는 gRPC 라이브러리 내에 내장된 Netty 때문이었습니다. 다행히도 이에 대한 수정은 매우 쉬웠습니다: Google have their own library:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-graalvm-support</artifactId>
<version>0.3.0</version>
</dependency>
이를 추가하여 빌드하고 실행했지만 이제 GCP 구성을 찾을 수 없습니다.
java.lang.IllegalArgumentException: A project ID is required for this service but could not be determined from the builder or the environment. Please set a project ID using the builder.
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:142)
at com.google.cloud.ServiceOptions.<init>(ServiceOptions.java:304)
당황
일반적으로 볼륨을 사용자 홈에 방금 마운트했지만 Graal에 user.home
값이 없는 것 같습니다. 나는 그것을 확인하기 위해 이것을 파헤치지 않았으므로 그냥 해결할 것이라고 생각했습니다.
docker run --rm -it -p 8080:8080 `
-e CLOUDSDK_CONFIG=/gcloud `
-v $Env:APPDATA/gcloud/:/gcloud:ro `
helidon-quickstart-mp:native
붐! 오류 없이 실행되었습니다.
아아, microsoft/WSL#5324에 의해 응답된 마지막 딸꾹질이 하나 있었습니다. 간단히 말해서 Windows를 절전 모드로 전환하면 WSL2의 시계가 드리프트됩니다. 즉, 타임스탬프가 잘못 지정되어 로그 메시지를 찾을 수 없었습니다. WSL을 다시 시작하면 Cloud Logging에 일부 로그가 표시됩니다. 만세!
결과 이미지는 다소 포동포동한 116MB로 Alpine JLink보다 24MB 더 크고 11MB만 떨어져 있습니다. 나는 여분의 라이브러리로 설명될 수 있다고 생각하지 않지만 다른 날에 대해 걱정할 것이 있습니다. 그러나 스니핑할 수 없는 도커 컨테이너에 설정된 -m 32m
로 약 160ms에서 시작됩니다. Graal의 매력에 관계없이 알아야 할 곰 덫이 많이 있습니다. 이것이 곧 개선되기를 바랍니다.
이제 측정항목 및 추적에 대해...
Reference
이 문제에 관하여(성배 퀘스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/dansiviter/quest-for-the-holy-graal-1hlg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
docker run --rm -it -p 8080:8080 `
-e CLOUDSDK_CONFIG=/gcloud `
-v $Env:APPDATA/gcloud/:/gcloud:ro `
helidon-quickstart-mp:native
Reference
이 문제에 관하여(성배 퀘스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dansiviter/quest-for-the-holy-graal-1hlg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)