java程序打包成jar包,通过通过dockerfile打成镜像,然后在服务器上通过DockerCompose文件进行部署,启动容器。遇到了进程卡死,没有报错日志什么日志也不输出的排除错误方式有哪些
1. 问题如下图所示,log日志输出到最后一个之后就结束了,没有新的日志输出了。


2. 查看docker 容器中的进程是否造成了内存溢出,查看内容使用情况
使用docker top 容器id
或者 docker exec -it 容器id /bin/bash 进入容器内部 输入 top
3. 是否是log日志存放文件满了,不会再继续打印日志了,但是进程仍在继续?
查看一下文件大小(这里可以问AI怎么查看)

4.是否是其中存在第三方请求,请求的链接/读取超时,但是没有操作,一直等在读取/链接,造成了阻塞
查看java堆栈信息,看一下正在执行的进程是否正在等待第三方请求做出回应。
容器内 Java 进程的线程堆栈信息会保存到宿主机的 thread_dump.txt 中

示例如下:
"scheduling-1" #34 prio=5 os_prio=0 cpu=16148.66ms elapsed=431224.16s tid=0x00007fe97d3d0f50 nid=0x31 runnable [0x00007fe94f6fd000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.SocketDispatcher.read0(java.base@17.0.17/Native Method)
at sun.nio.ch.SocketDispatcher.read(java.base@17.0.17/SocketDispatcher.java:47)
at sun.nio.ch.NioSocketImpl.tryRead(java.base@17.0.17/NioSocketImpl.java:266)
at sun.nio.ch.NioSocketImpl.implRead(java.base@17.0.17/NioSocketImpl.java:317)
at sun.nio.ch.NioSocketImpl.read(java.base@17.0.17/NioSocketImpl.java:355)
at sun.nio.ch.NioSocketImpl$1.read(java.base@17.0.17/NioSocketImpl.java:808)
at java.net.Socket$SocketInputStream.read(java.base@17.0.17/Socket.java:966)
at sun.security.ssl.SSLSocketInputRecord.read(java.base@17.0.17/SSLSocketInputRecord.java:484)
at sun.security.ssl.SSLSocketInputRecord.readFully(java.base@17.0.17/SSLSocketInputRecord.java:467)
at sun.security.ssl.SSLSocketInputRecord.decodeInputRecord(java.base@17.0.17/SSLSocketInputRecord.java:243)
at sun.security.ssl.SSLSocketInputRecord.decode(java.base@17.0.17/SSLSocketInputRecord.java:181)
at sun.security.ssl.SSLTransport.decode(java.base@17.0.17/SSLTransport.java:111)
at sun.security.ssl.SSLSocketImpl.decode(java.base@17.0.17/SSLSocketImpl.java:1513)
at sun.security.ssl.SSLSocketImpl.readApplicationRecord(java.base@17.0.17/SSLSocketImpl.java:1484)
at sun.security.ssl.SSLSocketImpl$AppInputStream.read(java.base@17.0.17/SSLSocketImpl.java:1069)
at java.io.BufferedInputStream.fill(java.base@17.0.17/BufferedInputStream.java:244)
at java.io.BufferedInputStream.read1(java.base@17.0.17/BufferedInputStream.java:284)
at java.io.BufferedInputStream.read(java.base@17.0.17/BufferedInputStream.java:343)
- locked <0x00000000849eced8> (a java.io.BufferedInputStream)
at sun.net.www.http.HttpClient.parseHTTPHeader(java.base@17.0.17/HttpClient.java:826)
at sun.net.www.http.HttpClient.parseHTTP(java.base@17.0.17/HttpClient.java:761)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(java.base@17.0.17/HttpURLConnection.java:1740)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(java.base@17.0.17/HttpURLConnection.java:1641)
at java.net.HttpURLConnection.getResponseCode(java.base@17.0.17/HttpURLConnection.java:529)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(java.base@17.0.17/HttpsURLConnectionImpl.java:308)
at org.springframework.http.client.SimpleClientHttpRequest.executeInternal(SimpleClientHttpRequest.java:88)
at org.springframework.http.client.AbstractStreamingClientHttpRequest.executeInternal(AbstractStreamingClientHttpRequest.java:71)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:81)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:900)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:801)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:683)
at com.example.datas.service.Impl.Plat2Service.getPointInfo(Plat2Service.java:187)
at com.example.datas.task.TimeTask.getPlatForm2(TimeTask.java:152)
at com.example.datas.task.TimeTask.run(TimeTask.java:80)
at jdk.internal.reflect.GeneratedMethodAccessor134.invoke(Unknown Source)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.17/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@17.0.17/Method.java:569)
at org.springframework.scheduling.support.ScheduledMethodRunnable.runInternal(ScheduledMethodRunnable.java:130)
at org.springframework.scheduling.support.ScheduledMethodRunnable.lambda$run$2(ScheduledMethodRunnable.java:124)
at org.springframework.scheduling.support.ScheduledMethodRunnable$$Lambda$1053/0x00007fe9044e0a00.run(Unknown Source)
at io.micrometer.observation.Observation.observe(Observation.java:498)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:124)
at org.springframework.scheduling.config.Task$OutcomeTrackingRunnable.run(Task.java:87)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:96)
at java.util.concurrent.Executors$RunnableAdapter.call(java.base@17.0.17/Executors.java:539)
at java.util.concurrent.FutureTask.run(java.base@17.0.17/FutureTask.java:264)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(java.base@17.0.17/ScheduledThreadPoolExecutor.java:304)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@17.0.17/ThreadPoolExecutor.java:1136)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@17.0.17/ThreadPoolExecutor.java:635)
at java.lang.Thread.run(java.base@17.0.17/Thread.java:840)
由上述的堆栈信息可以得到
线程状态为 RUNNABLE,但卡在 read0 Native方法,表明正在等待Socket数据返回(即HTTP响应)
即发生了HTTP响应阻塞导致了程序暂停。








