Я создал Docker образ, который каждую минуту запускает команду java (через ExecutorService) и выводит ее на экран с помощью журнала.
В большинстве случаев вывод выглядит следующим образом : No requests found, sleeping for a minute
Он работает на движке Kubernetes на Google Cloud Platform. Я сталкиваюсь с проблемой, когда мой модуль выселяется каждые 5 часов со следующей ошибкой:
The node was low on resource: ephemeral-storage. Container ingestion-pager-remediation was using 216Ki, which exceeds its request of 0.
В чем причина этого? Сначала я подумал, что причина не в том, чтобы закрыть Input / OutputStreams и 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-подключений, чем спит.
Кто-нибудь знает, почему мое оверлейное пространство со временем увеличится до 300 ГБ?
(Изменить)
Я только регистрируюсь на стандартный вывод, используя эту конфигурацию отладки:
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