Docker убивает Java-контейнер из-за OOM, но в статистике JMX нет признаков высокого использования памяти [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Docker убивает Java-контейнер из-за OOM, но в статистике JMX нет признаков высокого использования памяти [закрыто]

Сообщение Anonymous »

У нас есть контейнер Docker с приложением Java 11, работающим на AWS ECS. Служба настроена на завершение после использования 1,5 ГБ ОЗУ
"memory": 1500,
"memoryReservation": 1137,

Изображение

Проблема в том, что мы не видим отражения увеличения использования памяти на наших информационных панелях
Изображение
Изображение
Изображение
(p.s. плоская линия на информационных панелях Grafana связана с тем, что Prometheus больше не получает показатели).
Мы сделали почти все возможное, чтобы ограничить объем внутренней и внешней памяти, которую Java может использовать, и если я проверю выходные данные NMT, то зарезервированное использование составит не более 1,1 ГБ. Наша командная строка сейчас такая:
java ‑Xmx600m ‑XX:+UseG1GC ‑XX:MaxMetaspaceSize=220m
‑XX:+PrintFlagsFinal ‑XX:NewRatio=1 ‑XX:MaxDirectMemorySize=40m
‑Xss512k ‑XX:ProfiledCodeHeapSize=70M ‑XX:NonProfiledCodeHeapSize=50M
‑XX:NonNMethodCodeHeapSize=8M ‑XX:+UseCodeCacheFlushing
‑XX:CompressedClassSpaceSize=32M ‑XX:ReservedCodeCacheSize=128M
‑XX:+SegmentedCodeCache ‑javaagent:/opentelemetry‑javaagent.jar
‑Dotel.javaagent.extensions=/opentelemetry‑java‑ecs‑extension‑all.jar
‑Dotel.resource.attributes=xxx,aws.ecs.launchtype=ec2
‑XX:NativeMemoryTracking=summary ‑XX:‑OmitStackTraceInFastThrow
‑Dspring.profiles.active=prd‑ecs ‑Dspring.cloud.consul.host=172.17.42.1
‑Dspring.cloud.consul.config.watch.enabled=false
‑Dcom.sun.management.jmxremote.port=9999
‑Dcom.sun.management.jmxremote.authenticate=false
‑Dcom.sun.management.jmxremote.ssl=false
‑Dlog4j2.formatMsgNoLookups=true ‑Dserver.port=8080
‑Daws.paramstore.enabled=true
‑Daws.paramstore.region=eu‑west‑1
‑Dspring.main.banner‑mode=off ‑jar /1234‑service.jar

Мы понятия не имеем, как это возможно, что наши контейнеры внезапно используют 400 МБ памяти без каких-либо признаков этого в метриках JMX.
//edit: вывод NMT самого старого работающего контейнера
Native Memory Tracking:

Total: reserved=1180115KB, committed=700171KB
- Java Heap (reserved=614400KB, committed=260096KB)
(mmap: reserved=614400KB, committed=260096KB)

- Class (reserved=215344KB, committed=208080KB)
(classes #35567)
( instance classes #33401, array classes #2166)
(malloc=8496KB #125896)
(mmap: reserved=206848KB, committed=199584KB)
( Metadata: )
( reserved=174080KB, committed=173536KB)
( used=167363KB)
( free=6173KB)
( waste=0KB =0.00%)
( Class space:)
( reserved=32768KB, committed=26048KB)
( used=22342KB)
( free=3706KB)
( waste=0KB =0.00%)

- Thread (reserved=77858KB, committed=16034KB)
(thread #125)
(stack: reserved=77260KB, committed=15436KB)
(malloc=452KB #752)
(arena=146KB #249)

- Code (reserved=139426KB, committed=96022KB)
(malloc=7330KB #29103)
(mmap: reserved=132096KB, committed=88692KB)

- GC (reserved=70010KB, committed=56862KB)
(malloc=14362KB #61984)
(mmap: reserved=55648KB, committed=42500KB)

- Compiler (reserved=896KB, committed=896KB)
(malloc=764KB #2798)
(arena=133KB #5)

- Internal (reserved=4509KB, committed=4509KB)
(malloc=4477KB #3670)
(mmap: reserved=32KB, committed=32KB)

- Other (reserved=4359KB, committed=4359KB)
(malloc=4359KB #39)

- Symbol (reserved=37775KB, committed=37775KB)
(malloc=34219KB #439593)
(arena=3556KB #1)

- Native Memory Tracking (reserved=10765KB, committed=10765KB)
(malloc=34KB #437)
(tracking overhead=10731KB)

- Arena Chunk (reserved=190KB, committed=190KB)
(malloc=190KB)

- Logging (reserved=4KB, committed=4KB)
(malloc=4KB #194)

- Arguments (reserved=20KB, committed=20KB)
(malloc=20KB #545)

- Module (reserved=3692KB, committed=3692KB)
(malloc=3692KB #14082)

- Synchronizer (reserved=860KB, committed=860KB)
(malloc=860KB #7286)

- Safepoint (reserved=8KB, committed=8KB)
(mmap: reserved=8KB, committed=8KB)

//edit2: наш образ Docker, который мы используем в более чем 90 сервисах Docker
FROM --platform=$TARGETPLATFORM amazoncorretto:11

RUN yum install -y shadow-utils wget && yum clean all
RUN wget https://github.com/open-telemetry/opent ... aagent.jar -O /opentelemetry-javaagent.jar
ADD opentelemetry-java-ecs-extension-*-all.jar /opentelemetry-java-ecs-extension-all.jar
RUN adduser docker
RUN if [ -f $JAVA_HOME/conf/security/java.security ]; then sed -i 's/^networkaddress.cache.ttl/#networkaddress.cache.ttl/g' $JAVA_HOME/conf/security/java.security; fi && \
echo "networkaddress.cache.ttl=30" >> $JAVA_HOME/conf/security/java.security

USER docker

//edit3: забыл упомянуть, что мы также установили эту переменную окружения
{
"name": "MALLOC_ARENA_MAX",
"value": "4"
}


Подробнее здесь: https://stackoverflow.com/questions/777 ... age-in-jmx
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»