Kubernetes中GC时长过长致网络连接断开但Pod未重启问题排查
Java应用GC冻结与Ceph存储关联排查请求
环境场景
- 运行包含1个主容器+2个Sidecar容器的Pod,三者均与7台服务器(含证券交易所服务器)维持网络连接,持续传输文件/获取数据
- Kubernetes版本:v1.24.7+rke2r1
- Java版本:openjdk_zulu8 (8.0.392-0) - jre1.8.0_362-amd64
- 镜像构建工具:docker 1.13.1
- 底层系统:RHEL 7.9 (Maipo)
- 自建K8s环境,采用Ceph作为存储
- JVM堆内存未指定限制,由JVM自行分配
- 容器资源配置:
主容器:
limits: cpu: 3000m memory: 10Gi requests: cpu: 3000m memory: 10Gi
Sidecar容器1:
limits: cpu: 3000m memory: 4400Mi requests: cpu: 2000m memory: 4000Mi
Sidecar容器2:
limits: cpu: 3000m memory: 4400Mi requests: cpu: 2000m memory: 4000Mi
- Prometheus/Grafana监控显示资源无异常
问题现象
三个容器内的应用突然因GC冻结数分钟,所有线程停滞,导致依赖心跳的网络连接全部断开,但Pod未触发重启。
已尝试操作
调整Java启动参数以增强GC日志输出,当前主Java进程启动参数:
/usr/java/jre1.8.0_362-amd64/bin/java -showversion -XX:+PrintFlagsFinal -XshowSettings:system -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:MaxGCPauseMillis=200 -Dsun.rmi.dgc.client.gcInterval=604800000 -Dsun.rmi.dgc.server.gcInterval=604800000 -XX:+SafepointTimeout -XX:SafepointTimeoutDelay=500 -Djava.net.preferIPv4Stack=true -XX:+UseContainerSupport -XX:ActiveProcessorCount=2 -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -javaagent:/opt/jhiccup/lib/jhiccup-2.0.10.jar=-d,5000,-i,1000,-s,3,-l
GC异常时观察到:
- CPU出现节流现象
- Safepoint统计中Sync数值极高,日志片段:
49335.605: RevokeBias [ 77 0 0 ] [ 0 0 0 0 0 ] 0 vmop [threads: total initially_running wait_to_block] [time: spin block sync cleanup vmop] page_trap_count 49335.605: RevokeBias [ 77 0 0 ] [ 0 0 0 0 0 ] 0 vmop [threads: total initially_running wait_to_block] [time: spin block sync cleanup vmop] page_trap_count 49340.629: RevokeBias [ 76 0 0 ] [ 0 0 21728 0 0 ] 0
通过TOP命令发现大量进程处于D状态(不可中断睡眠),怀疑Ceph存储导致应用冻结,求相关排查经验或解决方向。
内容的提问来源于stack exchange,提问作者Arthur Accioly
相关产品推荐
相关产品推荐

