在 Docker 中安装 GCP Profiler 代理时遇到问题
Posted
技术标签:
【中文标题】在 Docker 中安装 GCP Profiler 代理时遇到问题【英文标题】:Trouble in installing GCP Profiler agent in Docker 【发布时间】:2019-12-06 15:29:50 【问题描述】:我正在尝试为我在 GKE 中运行的应用安装 GCP Profiler 代理,请按照此处的说明进行操作:https://cloud.google.com/profiler/docs/profiling-java
我无法克服这个错误。有人可以帮忙吗?
在 /opt/cprof/profiler_java_agent.so 中找不到代理库 绝对路径,有错误:重定位错误 /opt/cprof/profiler_java_agent.so:__pthread_key_create:initial-exec TLS 解析为动态定义 /opt/cprof/profiler_java_agent.so
这是 Dockerfile
FROM openjdk:8-jdk-alpine
RUN apk update && apk add --no-cache gcompat
RUN apk update && apk add --no-cache libc6-compat
WORKDIR /app
# The application's jar file
ARG JAR_FILE=target/example-svc-*.jar
# Add the application's jar to the container
ADD $JAR_FILE example-svc.jar
EXPOSE 5050
RUN mkdir -p /opt/cprof && \
wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \
| tar xzv -C /opt/cprof
ENTRYPOINT ["java", \
"-agentpath:/opt/cprof/profiler_java_agent.so=-cprof_service=example-svc,-cprof_service_version=0.0.1-SNAPSHOT", \
"-jar", "/app/example-svc.jar"]
【问题讨论】:
【参考方案1】:问题似乎是您正在使用的容器映像的基本版本。查看您的 Dockerfile,您从以下位置开始:
openjdk:8-jdk-alpine
深入研究这个文档,我们发现:
需要注意的主要警告是它确实使用 musl libc 而不是 glibc 和朋友,因此某些软件可能会遇到问题,具体取决于 他们的 libc 要求的深度。
(参考:openjdk)
现在,如果我们查看找到 here 的 Google 文档,我们会发现定义了以下要求:
支持的操作系统:
使用 glibc 实现标准 C 库的 Linux 版本。
...这似乎是一个冲突。请尝试使用不基于 alpine
的 openjdk 映像的替代版本。
【讨论】:
感谢您指出这一点。 *-alpine 应该是最小的图像。你能推荐一些替代品吗? 如果我们看这里 ...hub.docker.com/_/openjdk ...我们发现您可以使用从 openjdk:8-jdk 提取的非高山版本虽然确实确实有 alpine 被记录为更小,如果它不适用于您手头的任务,那么它对您毫无用处。与其开始优化性能和大小,不如开始优化功能正确性......从那里开始......只有在需要时,您才能进行调整。 注明。感谢您的帮助。以上是关于在 Docker 中安装 GCP Profiler 代理时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章