Java Docker图像覆盖空间不足,导致吊舱收回ok GKE
我创建了一个Docker映像,它每分钟运行一个java命令(通过ExecutorService),并使用log将其打印到屏幕上 大多数情况下,输出如下所示:Java Docker图像覆盖空间不足,导致吊舱收回ok GKE,java,docker,kubernetes,google-kubernetes-engine,Java,Docker,Kubernetes,Google Kubernetes Engine,我创建了一个Docker映像,它每分钟运行一个java命令(通过ExecutorService),并使用log将其打印到屏幕上 大多数情况下,输出如下所示: 未找到请求,正在睡眠一分钟 它运行在谷歌云平台上的Kubernetes引擎上。我遇到一个问题,我的pod每5小时就会被逐出一次,错误如下: 节点资源不足:临时存储。容器摄取寻呼机修正使用的是216Ki,超出了其0的请求。 这是什么原因?起初,我认为原因是无法关闭输入/输出流和HttpConnections。我检查了代码并确保关闭了所有连接,
未找到请求,正在睡眠一分钟
它运行在谷歌云平台上的Kubernetes引擎上。我遇到一个问题,我的pod每5小时就会被逐出一次,错误如下:
节点资源不足:临时存储。容器摄取寻呼机修正使用的是216Ki,超出了其0的请求。
这是什么原因?起初,我认为原因是无法关闭输入/输出流和HttpConnections。我检查了代码并确保关闭了所有连接,但随着时间的推移,连接的大小仍然会增加
当我查看磁盘使用情况时,我发现我的/覆盖空间随着时间的推移而增加。下面是仅运行一个java命令的“已使用”空间
/ # df -h
Filesystem Size Used Available Use% Mounted on
overlay 291.2G 172.3G 118.8G 59% /
tmpfs 64.0M 0 64.0M 0% /dev
tmpfs 102.3G 0 102.3G 0% /sys/fs/cgroup
/dev/sda1 291.2G 172.3G 118.8G 59% /dev/termination-log
/dev/sda1 291.2G 172.3G 118.8G 59% /mount/javakeystore
/dev/sda1 291.2G 172.3G 118.8G 59% /mount/json
/dev/sda1 291.2G 172.3G 118.8G 59% /etc/resolv.conf
/dev/sda1 291.2G 172.3G 118.8G 59% /etc/hostname
/dev/sda1 291.2G 172.3G 118.8G 59% /etc/hosts
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 102.3G 12.0K 102.3G 0% /run/secrets/kubernetes.io/serviceaccount
tmpfs 102.3G 0 102.3G 0% /proc/acpi
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/keys
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 102.3G 0 102.3G 0% /proc/scsi
tmpfs 102.3G 0 102.3G 0% /sys/firmware
/ # df -h
Filesystem Size Used Available Use% Mounted on
overlay 291.2G 172.4G 118.8G 59% /
tmpfs 64.0M 0 64.0M 0% /dev
tmpfs 102.3G 0 102.3G 0% /sys/fs/cgroup
/dev/sda1 291.2G 172.4G 118.8G 59% /dev/termination-log
/dev/sda1 291.2G 172.4G 118.8G 59% /mount/javakeystore
/dev/sda1 291.2G 172.4G 118.8G 59% /mount/json
/dev/sda1 291.2G 172.4G 118.8G 59% /etc/resolv.conf
/dev/sda1 291.2G 172.4G 118.8G 59% /etc/hostname
/dev/sda1 291.2G 172.4G 118.8G 59% /etc/hosts
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 102.3G 12.0K 102.3G 0% /run/secrets/kubernetes.io/serviceaccount
tmpfs 102.3G 0 102.3G 0% /proc/acpi
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/keys
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 102.3G 0 102.3G 0% /proc/scsi
tmpfs 102.3G 0 102.3G 0% /sys/firmware
这是吊舱上唯一运行的东西:
/ # ps -Af
PID USER TIME COMMAND
1 root 0:27 java -jar -Dlog4j.configurationFile=/ingestion-pager-remediation/log4j.properties -Dorg.slf4j.simpleLogger.defaultLogLevel=info /ingestion-pager-remediation/ingest-pa
222 root 0:00 sh
250 root 0:00 ps -Af
如前所述,这是一个简单的java命令,它运行一些http连接,而不是休眠
有人知道为什么我的覆盖空间会随时间增加到300GB吗
(编辑)
我仅使用此调试配置登录到标准输出:
log4j.rootLogger=DEBUG, STDOUT
log4j.logger.deng=INFO
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
org.slf4j.simpleLogger.defaultLogLevel = info
Java应用程序是否写入文件系统?写入Docker容器的可写层会消耗覆盖存储驱动程序中的空间。不,java应用程序不会写入文件系统。如上所示。您写入
System.out
(log4j配置中的STDOUT)的内容会发生什么变化?当代码无头执行时,它会写入/dev/nul
?或者将其重定向到一个文件(在WebSphere上,他们将其命名为system.out
…)?默认日志级别设置为INFO时,日志输出可能会非常大……输出很小,每10分钟仅运行10行。我不使用System.out做任何事情。我认为如果我重定向到/dev/null,我将无法通过“kubectl日志”查看控制台输出。您的Java应用程序是否写入文件系统?写入Docker容器的可写层会消耗覆盖存储驱动程序中的空间。不,java应用程序不会写入文件系统。如上所示。您写入System.out
(log4j配置中的STDOUT)的内容会发生什么变化?当代码无头执行时,它会写入/dev/nul
?或者将其重定向到一个文件(在WebSphere上,他们将其命名为system.out
…)?默认日志级别设置为INFO时,日志输出可能会非常大……输出很小,每10分钟仅运行10行。我不使用System.out做任何事情。我认为如果我重定向到/dev/null,我将无法通过“kubectl日志”查看控制台输出