@jvmchat

Страница 2867 из 2890
Mikhail
12.10.2018
09:03:42
а всякие auto configuration и starters отключены или потребление памяти возрастает только при нагрузке ?)
со старта жрет примерно 400мб, еще пара сотен добавляется в течении 10 минут использования приложения

Anton
12.10.2018
09:03:53
Ну в моем примере есть интерфейс единый для всех бинов
этот пример как раз для твоего примера

Almas
12.10.2018
09:04:01
Можно код или кейс когда начинает жрать

всем день добрый, призываю адептов спринга с вопросом: почему spring-boot c rest-api и вебсокетами жрет 640 мб оперативы практически без нагрузки?

Google
Диоген
12.10.2018
09:04:05
Пишешь @Bean Map<Type, Handler> beanMap(List<Handler> handlers){ handlers.stream...toMap(); }

Павел
12.10.2018
09:04:20
В спринге можно инжектить коллекции бинов по типу
Сча проверю. Я знал но как то думал надо в проперти чтото прописывать

А так выходит мне и аннотация кастомная не понадобится если сработает

Диоген
12.10.2018
09:05:30
Если у тебя "ТИП" указан только в аннотации, тебе без рефлексии этот тип не вытащить никак.

Ну то етсь берешь handlers.stream..(hadler.getClass.getAnnotation.getType) - хуита в общем

Mikhail
12.10.2018
09:06:47
Можно код или кейс когда начинает жрать
запустить приложение, потыкать десяток эндпоинтов

Можно код или кейс когда начинает жрать
я просто не понимаю, что там столько памяти жрет и зачем

Mikhail
12.10.2018
09:08:26
Sergey
12.10.2018
09:09:54
юзаю undertow
-xmx 350M - обслуживает 4-5 запроса в секунду спокойно

Yaroslav
12.10.2018
09:10:41
со старта жрет примерно 400мб, еще пара сотен добавляется в течении 10 минут использования приложения
а у тебя там какие стартеры подключены ? Обычный spring-boot-starter-web или еще всякого напихано ? Попробуй с Xmx и Xss поиграться и повыстовлять меньшие значения

Диоген
12.10.2018
09:11:01
>-xmx 350M > 4-5 запроса в секунду хеллоу_ворлд_почти_совсем_не_тормозит.жпг

Google
Mikhail
12.10.2018
09:11:16
а у тебя там какие стартеры подключены ? Обычный spring-boot-starter-web или еще всякого напихано ? Попробуй с Xmx и Xss поиграться и повыстовлять меньшие значения
compile("org.springframework.boot:spring-boot-starter-web") { exclude module: "spring-boot-starter-tomcat" } compile("org.springframework.boot:spring-boot-starter-undertow") compile("org.springframework.boot:spring-boot-starter-websocket:") { exclude module: 'spring-boot-starter-tomcat' }

Aleksey
12.10.2018
09:13:11
Xmx300m = 640мб со всеми нон-хипами
Ну дак это как сборщику в голову взбредёт, когда там GC делать, когда память обратно отдавать. Я вроде про это рассказывал :) https://shipilev.net/talks/javazone-Sep2018-shenandoah.pdf, начиная со слайда 62

Можешь попробовать во время простоя попросить Full GC у G1, и посмотреть, чем это закончится -- будет понятно, сколько там реально данных, а сколько "подушка". "jcmd <pid> GC.run", например

Mikhail
12.10.2018
09:16:16
Mikhail
12.10.2018
09:16:48
а хипдамп что-нибудь показывает?
пока не хочется туда лезть

Aleksey
12.10.2018
09:16:58
Я не о том. А о том, что сборщики придерживают память "на всякий случай", чтобы её в горячих случаях не просить. И сколько эта подушка размером -- это зависит от реализации и политик GC. Это ещё без того, что тот же G1 может не делать mixed сборку, если ему того не хочется по соображениям throughput'а, хотя это и просаживает footprint.

Не надо сразу хипдамп, хотя бы Full GC попроси :)

(Желательно несколько раз)

Mikhail
12.10.2018
09:19:39
говорит, что com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

Aleksey
12.10.2018
09:20:26
Пользователь должен быть тот же, что целевую JVM запустил. Ну или sudo.

Mikhail
12.10.2018
09:21:19
да, прям от того же юзера заработало

через sudo не хотело

Alexandr
12.10.2018
09:24:28
блин, похоже Шипилев то настоящий

по диалогу)

Aleksey
12.10.2018
09:25:53
да, прям от того же юзера заработало
И как, изменилось в метриках что-нибудь? Old, например, упал?

Mikhail
12.10.2018
09:26:08


Google
Mikhail
12.10.2018
09:26:41
И как, изменилось в метриках что-нибудь? Old, например, упал?
упал чуток, но потребление памяти не сильно изменилось

на сотню меньше стало

Митко Соловец?
12.10.2018
09:27:12
все ли зависимости тебе нужны

Mikhail
12.10.2018
09:27:27
Митко Соловец?
12.10.2018
09:27:36
это чем глянуть?
в списке зависимостей

ситуация какая, ты добавляешь либы в класспаз и аннотацию @SpringBootApplication - он начинает создавать бины

ты можешь заэксклюдить лишнее

Aleksey
12.10.2018
09:28:54
То есть >20% -- это не сильно, ок :) Жёлтое -- это metaspace (там где хранятся данные классов), а светло-голубое -- это code cache (там где хранится сгенирированный JIT-ом код). Отсюда надо разбираться, откуда там навалило столько кода, через зависимости поди.

Митко Соловец?
12.10.2018
09:29:27
точно 640м не жрет пустой спринг

Aleksey
12.10.2018
09:29:44
Надеюсь, что нигде в ключиках не выставлен -XX:-ClassUnloading или какая-нибудь такая же хня

Митко Соловец?
12.10.2018
09:30:25
ага, тест, веб, datasource

Павел
12.10.2018
09:31:16
спринг заинжектит
Да сработало. Огромный ++++++ спасибо!

Alexandr
12.10.2018
09:32:07
жук, котлин и сваггер тянут не мало

Aleksey
12.10.2018
09:32:32
А ничего Спринг -- 22 тысячи классов "всего" загружено, ёптыть.

Google
Alexandr
12.10.2018
09:32:35
подключаем project-report, собираем отчет и смотрим зависимости

Mikhail
12.10.2018
09:32:37
жук, котлин и сваггер тянут не мало
еще раз, то же самое без спринга - 64мб

А ничего Спринг -- 22 тысячи классов "всего" загружено, ёптыть.
я что-то думал, что это для него нормальная ситуация

Alexandr
12.10.2018
09:33:24
ну и можно посмотреть в идее что вторится суммарно и подумать что вырезать

Aleksey
12.10.2018
09:33:50
Если хочется посмотреть на нативную память с точки зрения JVM, то можно NMT включить и помедитировать: https://shipilev.net/jvm-anatomy-park/12-native-memory-tracking/ -- вот оно наверняка скажет, что "Class" занимает дофига.

Alexandr
12.10.2018
09:34:57
что куда смотреть?
слева вкладка Project, под деревом внизу External Libraries



Admin
ERROR: S client not available

Alexandr
12.10.2018
09:35:20
потом в project report смотреть откуда эксклудить лишнее

Роман
12.10.2018
09:35:26
это все автоконфиг, помню как-то взял с start.spring.io hello world с несколькими стартерами, закинул на сервак оно 500МБ оперативки отъело

убрал автоконфиг, добавил зависимости вручную, 150 стало

Aleksey
12.10.2018
09:39:40
кажется придется редеплоится с новыми опциями для jvm =(
Ну, -XX:NativeMemoryTracking=summary не помешает ради диагностики, да. Но почти наверняка дело в зависимостях, которые притащили кучу кода. NMT покажет, что может тредов надо порезать где-нибудь и т.п.

Aleksey
12.10.2018
09:45:48
Но я б с NMT сначала "на столе" поигрался, чтобы понять, что можно в конфигурации подрезать, а потом деплойнуть сразу разумную

(опять же, сначала надо зависимости подрезать, а потом уж только NMT)

Mikhail
12.10.2018
09:47:36
что значит зависимости подрезать? вроде особо и нет ничего

Aleksey
12.10.2018
09:49:04
Ну если нету, и придётся с этим жить, то тогда да, к тюнингу JVM прямая дорога.

Alexander
12.10.2018
10:28:19
ребята, может кто поделиться решением для работы с КриптоПРО CSP 4 (через MS CryptoIAPI или может другие варианты) в Java без JCSP?

Google
Sergey
12.10.2018
10:39:20
Не получиться у тебя нормально работать с крипто про из джавы без JCP

Alexander
12.10.2018
10:41:01
Не получиться у тебя нормально работать с крипто про из джавы без JCP
на нормальную работу я тут конечно не рассчитываю)

Iliya
12.10.2018
10:41:44
а Bouncy Castle ?

или нужна сертифицированность или что-то из именно Крипто Пры

Iliya
12.10.2018
10:43:42
тогда про JNI дельный совет если это винда

а есть нативный крипто про для линукса?

Sergey
12.10.2018
10:50:33
Есть, но это всё издевательство чистой воды

Ignat
12.10.2018
11:32:15
добрый день помогите, пожалуйста, найти трабл: https://pastebin.com/ZrnuD8KS

без аннотации всё инжектится нормально

Диоген
12.10.2018
11:34:02
Ignat
12.10.2018
11:34:13
без кастомной, собственно

@HelloWorld

Павел
12.10.2018
11:48:21
там должен быть интерфейс , который наследует холдера
Вобщем рано обрадовался) в таком подходе тоже фигня получаеться так как каждый бин реализует метод интерфейса getType() и дальше этот бойлерплей висит в каждом бине мертвым грузом. ((((

Павел
12.10.2018
11:49:26
С анотацией сам бин чище

Да рефлексия и тд. Но это в одном месте скрыто

Anton
12.10.2018
11:50:32
3 строчки загрезняют код?

Павел
12.10.2018
11:50:47
В каждом бине

Страница 2867 из 2890