@jvmchat

Страница 1767 из 2890
Mikhail
06.09.2017
11:20:03
Нод 2, бэкенд

Wystan
06.09.2017
11:20:09
а для одной ноды самое то. да. я такие как раз на ажуре и беру.

Mikhail
06.09.2017
11:21:14
А шо там по нагрузке?
В пике шло порядка двух сотен сообщений в секунду, наверное, в центральную очередь, где 100 потоков. Она в процессе работы генерит сообщения в другие очереди

Google
Vyacheslav
06.09.2017
11:21:54
Хм

Ну на 2 может и многовато

Nick
06.09.2017
11:23:14
А потоки в тредпуле или самомтоятельные? А блокировки по ио в процессе работы есть?

Mikhail
06.09.2017
11:24:23
Блокировки есть, ходим синхронно на реальное железо за данными

Sherzod
06.09.2017
11:24:50
Toolbox App кто уже использует. Как он приложения обновляет? Как всегда, качает весь пакет, или патчами?

Nick
06.09.2017
11:25:30
Тогда без такого количества никак

Mikhail
06.09.2017
11:26:45
Счас поем и буду писать письмо

Лёг в 7, встал в 2)

Nick
06.09.2017
11:28:00
Удаленка?

Mikhail
06.09.2017
11:29:24
Удаленка?
Европа обновлялась ночью, я контролировал процесс

А это из дома комфортнее

Google
Mikhail
06.09.2017
11:29:46
Чем в офис ехать и ночь с пиццей сидеть

Ruslan
06.09.2017
11:33:40
Три сотни потоков листенеров - многовато таки на два ядра же?
Ядра два, потоков 300, значит планировщик JVM очень много работы делает по переключению контекста выполнения каждого потока, приводя его в соответствие физической модели. Проще говоря - чет дохрена потоков на 2 ядра.

Ruslan
06.09.2017
11:36:42
Но откровенно говоря вопрос такой: зачем вам вообще больше 1 листенера на ActiveMQ? Если говорить про распространенные практики - обычно берут Runtime.availableProcessors() * 2. Так, например, это дефолтная конфигурация Worker потоков для обработки запросов в Netty.

На 4 ещё куда ни шло
Даже на 4 много

Alexey
06.09.2017
11:38:54
тут еще дело в чем - сколько у этих потоков idle time. Если они все спящие и про запас - нет проблем, но есть у всех 100% running, тогда на переключениях контекста ты достойно теряешь

есть 100 load - нет смысла больше 3-4 на ядро

Ruslan
06.09.2017
11:40:03
тут еще дело в чем - сколько у этих потоков idle time. Если они все спящие и про запас - нет проблем, но есть у всех 100% running, тогда на переключениях контекста ты достойно теряешь
Ну даже если они припаркованы, они все равно бесполезные. Плюс каждому нужен локальный стек и пр. Каждый поток, даже припаркованный - это ресурсы вашей системы в никуда.

Alexey
06.09.2017
11:42:15
верно, но по производительности это не сильно ударит если все тихо а вот если во все сокеты начнется заливка данных - тогда держитесь

Ruslan
06.09.2017
11:42:34
Я вообще не вижу необходимости здесь городить тонну потоков. На мой взгляд, в базовом случае, будет достаточно 1 IO потока и Runtime.availableProcessors * 2 на обработку. Вспомним Node.JS, Java NIO, обработка входящего потока прекрасно выполняется без необходимости параллелить этот процесс

Mikhail
06.09.2017
11:43:02
Процессоры денег стоят

И просто так их мне никто не даст

Нагрузка на всё - только в пиках

Ruslan
06.09.2017
11:44:09
Так используйте 1 поток на IO и до 10 на обработку. В вашем случае - более, чем достаточно

Mikhail
06.09.2017
11:44:14
Большую часть времени - они припаркованы, у меня там вообще рост от 20 до 100, если не пик, то мы и не вырастем

Полный перезапуск - это как раз пик, поэтому вчера мы немного застряли

Но, на 4 ядрах мы это моделировали, прожуем без проблем

Ruslan
06.09.2017
11:49:08
Но тут вот какой момент с однопоточной моделью: не знаю про ActiveMQ, но RabbitMQ гарантирует доставку. Это работает так: Агент А отправляет сообщение агенту В через брокера. Брокер передал сообщение агенту В, но сообщение не удалил, лишь пометил. Если от агента В приходит флаг ACK на это сообщение, оно удаляется, в противном случае возвращается в очередь. Теперь вот что: если вы используете 1 поток на вычитку входящих сообщений, а обработку в пуле, то в случае, если обработка провалится, сообщение не вернётся в очередь ActiveMQ, т.к. IO поток после вычитки и перед передачей в пул обработки пометит сообщение как ACK (Acknowledge). Обычно это делается под капотом фреймворка интеграции с ActiveMQ, например. В общем, проектируя систему, держите это в голове. Проблема решается использованием более низкоуровневых транспортных абстракции, например.

Mikhail
06.09.2017
11:51:47
Но тут вот какой момент с однопоточной моделью: не знаю про ActiveMQ, но RabbitMQ гарантирует доставку. Это работает так: Агент А отправляет сообщение агенту В через брокера. Брокер передал сообщение агенту В, но сообщение не удалил, лишь пометил. Если от агента В приходит флаг ACK на это сообщение, оно удаляется, в противном случае возвращается в очередь. Теперь вот что: если вы используете 1 поток на вычитку входящих сообщений, а обработку в пуле, то в случае, если обработка провалится, сообщение не вернётся в очередь ActiveMQ, т.к. IO поток после вычитки и перед передачей в пул обработки пометит сообщение как ACK (Acknowledge). Обычно это делается под капотом фреймворка интеграции с ActiveMQ, например. В общем, проектируя систему, держите это в голове. Проблема решается использованием более низкоуровневых транспортных абстракции, например.
Да, это я знаю, насколько я знаю - нам не критично, если где-то что-то пропадет

Google
Ruslan
06.09.2017
11:52:44
Да, это я знаю, насколько я знаю - нам не критично, если где-то что-то пропадет
Тем более. Делайте 1 листенер, который пихает задачи на обработку в пул из, например, 8 потоков.

300 потоков - в 99% случаев - ошибочное проектирование системы.

Sergey
06.09.2017
11:54:18
промежуточная очередь и пул потоков нынче не модно?

Mikhail
06.09.2017
11:54:35
Вообще на все очереди и не очереди

Начальный старт - где-то до сотни потоков

И максимальная сотня нужна только на одну очередь

Остальные надо покрутить

Чтобы в пике было потоков 150, из них 100 на главную очередь, в которую вся нагрузка приходит

Ruslan
06.09.2017
11:56:04
Вообще на все очереди и не очереди
Это все равно много. Старайтесь их сократить. 100 потоков это очень много. Очень много бесполезной работы вашего приложения уходит на переключение контекста. В вашем случае многопоточность не помогает, а скорее мешает. Если постоянно переключать множество потоков, работа будет выполнена неэффективно.

Mikhail
06.09.2017
11:56:48
Именно это и и было сегодня ночью

Поэтому, я полностью согласен

Ruslan
06.09.2017
11:57:59
Поэтому, я полностью согласен
Рад был помочь. Удачи вашему проекту!

Mukhammed
06.09.2017
12:05:38
как вы в хибере получаете некст значение сиквенца? без директ склл. (конкретного seq)

Mukhammed
06.09.2017
12:08:32
так это же текущий

Google
Sherzod
06.09.2017
12:08:35
он же написал без SQL

Ruslan
06.09.2017
12:08:55
Mukhammed
06.09.2017
12:09:04
но это с директ скл

Ruslan
06.09.2017
12:09:09
он же написал без SQL
Аа, этого я не понял из вопроса

Sherzod
06.09.2017
12:09:21
ии то что ты пишешь вроде только под оракл

Sherzod
06.09.2017
12:09:46
ну под те субд которые sequence поддерживают

Ruslan
06.09.2017
12:09:54
ну под те субд которые sequence поддерживают
H2, HSQLD, Postgres - эти точно работают с таким синтаксисом

Admin
ERROR: S client not available

Mukhammed
06.09.2017
12:11:33
оракл у меня. ну ок. придется через nextval. думал мб что красивое есть

Sherzod
06.09.2017
12:11:55
если оракл то выше метод нужно немного подправить

нужно будет писать SELECT sequence_name.nextval FROM dual

Mukhammed
06.09.2017
12:12:56
Sherzod
06.09.2017
12:12:57
в oracle нельзя SELECT 1

Там используется dummy таблица

Igor
06.09.2017
12:13:18
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_info_id_seq") @SequenceGenerator(name = "user_info_id_seq", sequenceName = "user_info_id_seq", allocationSize = 1) а такое с ораклом не катит?

Mukhammed
06.09.2017
12:13:25
только там SELECT sequence_name.nextval id FROM dual

Google
Ruslan
06.09.2017
12:15:03
в oracle нельзя SELECT 1
Ух ты! Спасибо! Не знал.

Igor
06.09.2017
12:15:48
но уже и ответили же

Mukhammed
06.09.2017
12:16:41
угу

значит никак

я думал ты предлагаешь другой вариант

Igor
06.09.2017
12:16:57
значит никак
https://stackoverflow.com/a/23267212/2262442

Sherzod
06.09.2017
12:17:35
Ух ты! Спасибо! Не знал.
еще нельзя в какой-то из IBM базы DB2 или Informix :P

Mukhammed
06.09.2017
12:18:32
ой впизду такое городить) нигде такое особо не используется больше

Igor
06.09.2017
12:18:54
Mukhammed
06.09.2017
12:19:08
да можно. думал че то есть красивое готовое уже

Igor
06.09.2017
12:19:17
не, красивее некуда)

Mukhammed
06.09.2017
12:19:42
главное чтобы имя seq не поменял никто))))0

Sherzod
06.09.2017
12:20:19
главное чтобы имя seq не поменял никто))))0
ого ) извращения можно придумать

хотя, вроде seq к таблице не привязываются, так что нет

думал решить проблему методом selectа seq из объектов

Mukhammed
06.09.2017
12:29:04
что то в торе решил проверить какой сек у меня щас. а без сессии никак

Boris
06.09.2017
15:23:24
Вероятно, не очень умный вопрос: private static KeyPair GenerateKeys() { return generateKeyPair(); } final String pubKey = Base64.getEncoder().encodeToString(GenerateKeys.getPublicKey()) final String privKey = Base64.getEncoder().encodeToString(GenerateKeys.getPrivateKey()) У меня будет два ключа которые между собой никак не связаны? Или это таки будет публичный сгенерированный на основе приватного? Алгоритм ECDSA от BouncyCastle

Aleksander
06.09.2017
15:29:38
а есть документация какая-нибудь к классу GenerateKeys и его статическим методам getPrivateKey и getPublicKey

Я бы рекомендовал почитать документацию

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