Pull to refresh
1
0
Дмитрий Зворыгин @zvorygin

User

Send message

У нас были настроены и метрики а алёрты и балансировщики нагрузки, а в итоге получилась смешная и страшная ситуация:

  1. Клиент присылает запрос на огромное количество данных.

  2. Сервер падает с OutOfMemoryException, но пишет дамп на диск. Но увы не успевает записать логи из-за буферизации.

  3. Клиент не получает ответ и отправляет запрос снова, который благодаря load balancer кладёт уже другой сервер.

  4. Сервера по очереди поднимаются и регистрируются на load balancer, но клиент продолжает их класть один за другим. Каждый heap dump сжирает 64 гигабайта на диске.

В итоге выгрузили один из дампов памяти, нашли в нём плохой запрос, нашли клиента, попросили его так не делать - потому что других протоколов на тот момент не было.

Ну и как postmortem

  1. Настроили приложение даже не пытаться обрабатывать запросы которые требуют аномально большого объёма памяти

  2. Настроили параметры JVM чтобы дампы памяти писались в один и тот же файл и переписывали друг друга.

В сервисе что сейчас пишу - логи пишутся на отдельный раздел, и в худшем случае останемся без логов на какое-то время.

10м - это уже 2 атмосферы - одна "воздушная" плюс одна водная. Так что мне кажется что хватит и одного-двух метров

Ну хотя бы по калорийности, а не переводили креветку в чистую энергию по E=mc^2 - так креветка может пол города снести

4 427 °C — температура при схлопывании кавитационного пузыря во время «щелчка» (в 4 раза горячее, чем лава).

А в википедии про кавитацию написано

Имеются расчётные данные, что температура внутри пузырьков может достигать 1500 °C.

четыре тысячи градусов это как-то многовато, и немного бессмысленно если не указывать количество воды нагретой до такой температуры. Иначе можно сказать что нас периодически пронзают нейтрино высоких энергий с "температурой" аж 10^15 °C (что в 100_000_000_000 горячее чем лава)

С одной стороны - хорошо, а с другой стороны - как скоро появятся Microsoft-специфичные PDF-файлы, которые только Edge и умеет отображать?

Например, если брокер обанкротится, потеряет лицензию или будет испытывать финансовые сложности, его клиенты не пострадают – использовать активы клиентов запрещено на законодательном уровне.

Например, если вы напились и заснули на улице, у вас ничего не украдут - воровать запрещено на законодательном уровне.

Очень интересно было читать эту статью сразу после https://habr.com/ru/post/460901/


И я думаю что "на работе" никому никогда не надо было понимать как работают регулярные выражения, и разницу между НКА и ДКА. И многие комментаторы из прошлой статьи на вопрос "как работает сборщик мусора регулярное выражение", обиделись бы и ушли со словами что на работе это не нужно. Но тут компании Cloudflare повезло, что в штате есть люди которые понимают стоимость выражений вида ...=. и считают что программисту полезно это знать.

Ну тогда не стоит удивляться что плохой код можно тестировать только с помощью костылей.

Идеальный вариант (если позволяет время и бюджет) сначала переписать этот код и покрыть тестами, затем добавить флаг и покрыть флаг тестами.

Я думаю что у каждого есть свой говнокод, который без костылей не протестировать. Применять ли тут паттерн «паблик морозов» я не знаю. Стоит ли рассказывать как тестировать говнокод с помощью костылей я тоже не знаю)
Есть мнение что плохой код сложно тестировать. В данном случае код плохой и он был плохим ДО добавления флага.

Почему есть метод Start() но нет метода Stop()? Зачем странно используемый lockObject?

Если всё это исправить(ну и многое другое) и сделать аккуратно и красиво то после 3) вызывается синхронный Stop() после которого проверяются все побочные эффекты
Он отбрасывается, но у него по-прежнему есть parent commit. На него теперь никто не ссылается, но он сам то указывает! И из reflog его всегда можно восстановить.
Отличная статья. Спасибо!
Как я понимаю, в картинке под фразой «Вот как будет выглядеть ваше дерево после soft reset и нового коммита» пропущена стрелочка от зеленого кружка к красному.
Видел несколько раз следующий код с ненужным промежуточным collect. Часто получается в процессе рефакторинга.

List<T> temp = collection.stream().filter(...).map(...).collect(Collectors.toList());
... some unrelated to "temp" stuff...
List<T> result = temp.stream().filter(...).map(...).collect(Collectors.toList());        


Вместо

List<T> result = collection.stream().filter(...).map(...).filter(...).map(...).collect(Collectors.toList());

В свое время, когда надо было отлавливать много всяких событий мыши — mouseover, dragover и т.д., просто запускал свое приложение под отладчиком на виртуальной машине, и подключался к нему снаружи. Тогда было легко ходить по шагам и делать что угодно, при этом приложение думало что мышь не двигается.
Следует уточнить, что для индексов используются не то что понимается под B-tree, а B* или B+ -tree. В обычных B-tree информация может храниться в узлах дерева, а в B+ — только в листьях, что дает некоторый простор для оптимизаций.
Обычно размер узла подбирается так, чтобы он был равен одной странице ввода/вывода(или нескольким 2/4/8).
Есть префиксные деревья, которые могут помочь решить эту задачу.
А почему не хранить все в копейках, а конвертацию в рубли производить только на границе с UI через MoneyFormatter какой нибудь?
А в чем проблема с SHA512? В случае с мытьем посуды — если я каким-то образом добыл NIST private key и умею менять SEED, то я просто перебираю SEED-ы пока не получится нужный мне результат(с вероятностью 50% он будет получаться на каждой итерации).

Если посуду выпало мыть мне — увеличиваем SEED на единицу и пропускаем через мясорубку. Если снова выпало мне — то продолжаем и.т.д.
Для этого необходимо и достаточно чтобы преподаватель информатики в школе заранее озаботился(лась) и позвал(а) кого-нибудь на этакий открытый урок. Не всем везет с «проактивными» учителями информатики.

Впрочем, никто не мешает Вам, прочитав методические пособия на сайте, рассказать все своему ребенку.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity