gpt4 book ai didi

java - Dockerized Spring Boot 微服务无故卡住

转载 作者:行者123 更新时间:2023-12-02 11:01:53 31 4
gpt4 key购买 nike

我有一个基于微服务的项目。每个微服务都是一个 Spring Boot (v.2.0.0-RC2) 应用程序。我还有一个基于 Spring Cloud (Finchley) 的发现、配置和网关微服务。整个系统使用Docker Compose部署在测试机上。

我意识到其中一个微服务在短时间内从前端应用程序收到多个后续请求后卡住了。此后,它对进一步的请求变得无响应,并且我从网关收到读取超时。绕过网关直接调用此微服务时也会发生同样的情况。

我有一个 Spring Boot 管理实例,我意识到微服务每 5 分钟就会离线和再次上线。尽管如此,日志中没有发生任何有趣的事情。没有观察到内存问题。

下一个评论:只有当我同时从 docker compose 启动所有系统时才会出现此问题。当我重新启动这个单个微服务时,我无法再重现它。

最后:微服务的整个容器似乎被卡住了。当我对其执行“docker stop”时,终端挂起,但在另一个终端中检查容器状态后,容器显示为“已退出”。当我在容器上执行“docker Attach”时,发生了一件非常奇怪的事情。终端也挂断了,当我退出时,我有问题的微服务开始正常工作并成功接受传入请求。

谁能帮我解决这个奇怪的问题吗?我真的没有更多的想法,我能尝试解决什么问题。

预先感谢您提供任何线索。

编辑

docker-compose.yml

version: '3.4'

services:

config-service:
image: im/config-service
container_name: config-service
environment:
- SPRING_PROFILES_ACTIVE=native
volumes:
- ~/production-logs:/logs

discovery-service:
image: im/discovery-service
container_name: discovery-service
environment:
- SPRING_PROFILES_ACTIVE=production
volumes:
- ~/production-logs:/logs

gateway-service:
image: im/gateway-service
container_name: gateway-service
ports:
- "8080:8080"
depends_on:
- config-service
- discovery-service
environment:
- SPRING_PROFILES_ACTIVE=production
volumes:
- ~/production-logs:/logs

car-service_db:
image: postgres:9.5
container_name: car-service_db
environment:
- POSTGRES_DB=car
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass

car-service:
image: im/car-service
container_name: car-service
depends_on:
- config-service
- discovery-service
- car-service_db
environment:
- SPRING_PROFILES_ACTIVE=production
- CAR_SERVICE_DB_URL=jdbc:postgresql://car-service_db:5432/car
- CAR_SERVICE_DB_USER=user
- CAR_SERVICE_DB_PASSWORD=pass
volumes:
- ~/production-logs:/logs

car-service 的 Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 9005
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENV JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8001,server=y,suspend=n"
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

启动命令

docker-compose up

测试机:Ubuntu 服务器 16.04 LTS

最佳答案

已解决

原因是日志记录方面。我意识到有很多线程在等待:

sun.misc.Unsafe.park(Unsafe.java:-2) native
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
ch.qos.logback.core.OutputStreamAppender.writeBytes(OutputStreamAppender.java:197)
ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:231)
ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:102)
ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:84)
ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270)
ch.qos.logback.classic.Logger.callAppenders(Logger.java:257)
ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
ch.qos.logback.classic.Logger.filterAndLog_2(Logger.java:414)
ch.qos.logback.classic.Logger.debug(Logger.java:490)

关于java - Dockerized Spring Boot 微服务无故卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272560/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com