gvsmirnov

4 апреля 2016, Worldwide

# Понедельник 66 твитов

Всем привет! На этой неделе с вами @gvsmirnov. Мониторинг, перформанс, тесты, многопоточность, Байесовский Заговор, вот это всё.

5:35

Не будем тянуть кота за резину в долгий ящик и начнём с опроса.

Как у вас перформанс?

5:37
@backendsecret Всесторонний мониторинг. И не тормозит у нас не потому, что мы молодцы (хотя мы молодцы), а потому, что железа много
6:16

Пока около трети проголосовали "не знаю". Спешу вас порадовать: у вас тоже почти наверняка тормозит.

6:19
@backendsecret тяжеловато
6:19

Типичная история: у компании есть спец. раздел сайта для VIP-клиентов. Добавили мониторинг,оказалось,что там странички по минуте загружаются

6:23

Таким образом, плавно (на самом деле не плавно) подходим к теме мониторинга. Те, кто проголосовали "тормозит": а откуда вы знаете?

6:26
@backendsecret грепаю максимальное время ответа в access log за последние два часа раз в час.

Топорно, но норм.

7:57
@backendsecret писал System.out.println и запускал несколько раз в цикле до 10, например :)
7:57

Основной Вопрос Моего Существования — "Как сделать так, чтобы не тормозило?". Сегодня мы начнём обсуждать один из возможных вариантов ответа

8:02

Первый шаг на пути к перформансу — понять, что вообще значит "тормозит". На этом шаге, кстати, уже случается большинство фэйлов.

8:08

Даже если говорить о конечных приложениях (а не, скажем, рантаймах типа JVM), то грамотно определить требования к производительности нелегко

8:13

Например, "Странички должны открываться не больше, чем за 5 секунд" — хреновый SLA. Если все будут открываться за 4.99, то это ок?

8:16
@backendsecret хах, я как раз сегодня утром о похожем сделал пост :) ctrlok.com/?p=211

Хороший, годный пост! twitter.com/ctrlok/status/…

8:18

Правильнее было бы задать допустимое распределение latency, т.е. "в 99% случаев до 10 секунд, в 95% до 5, в 90% до 2 секунд, в 75% до 500мс"

8:20

Но это только начало. Конечно же, для разных сервисов должны быть разные требования, в зависимости от важности для бизнеса, например.

8:22
@backendsecret есть такая штука как apdex. en.m.wikipedia.org/wiki/Apdex
8:22

Чем сильнее пользовательские операции тормозят, тем более вероятно, что они их прервут: plumbr.eu/blog/user-expe… pic.twitter.com/4xyxnshODG

8:27

Но не все пользовательские операции одинаково важны. Например, если подтормаживает отправление в архив, то не так уж это и страшно.

8:28

При ограниченных ресурсах вряд ли получится оптимизировать вообще всё. Да и кроме перформанса же ещё куча всего есть. Баги, фичи, твиттер.

8:31
@backendsecret программист не должен выполнять роль продукт менеджера. Или должен?

Здесь не всё так однозначно. Сильно зависит от компании и от самого человека. Я, например, всегда думаю о продукте. twitter.com/ctrlok/status/…

8:33

@backendsecret @ctrlok по-хорошему, SLA должны исходить от стейкхолдеров компании. Однако, они зачастую вообще не знают, что это такое.

8:36

Давайте забубеним ещё опрос: есть ли у вас конкретно определённые метрики производительности? За чем следите?

8:42
@backendsecret про latency вспомнился доклад, кот. недавно пересматривал - youtu.be/lJ8ydIuPFeU всем советую)

Отличный доклад, тоже всем советую! Кстати, как считаете, ссылки лучше раз в день пачкой, или размазать равномерно? twitter.com/AntonKalyaev/s…

8:44

После ланча — самое время немножко рассказать о себе. Я живу в Эстонии и пилю @JavaPlumbr — офигенский мониторинг для jvm-based приложений.

10:03

До того жил в Питере и работал Яндексе и Дойче Банке. Много езжу по конференциям с докладами про всякие внутренности java, пишу статьи.

10:05

Придерживаюсь альтруистических взглядов и хочу нести добро в мир, занимаюсь спортом, троллирую лалок, люблю мороженое.

10:08

Кстати, то, что Эстонцы ооочченнь мееедлееннныеее тооормозаааа — это миф, они очень даже шустрые. В отличие от ваших приложений, хе-хе-хе!

10:10

И вообще, Эстония — чудесная страна, очень инновационная, вот это всё. Крайне рекомендую. Но тракторы предлагаю обсудить позже на неделе.

10:11

Но достаточно оффтопика. К вам приходит саппорт тикет: у конкретного пользователя что-то конкретное тормозит. Ваши действия?

10:12
@backendsecret ну я залогинюсь под ним :)

Повторение точных шагов пользователя не воспроизвело проблему. Закрыть с Cannot Reproduce нельзя. Ваши действия? twitter.com/lisovskyvlad/s…

10:23
@backendsecret зайти под teamviewer и посмотреть, что он делает)

Пользователь в точности повторил те же шаги, что и раньше. Повторил 10 раз. Тормозило 7 раз из 10. Ваши действия? twitter.com/oioki/status/7…

10:26
@backendsecret какие критерии тормознутости?

Пользователь жалуется, что главная страничка личного кабинета грузится по 30 секунд. twitter.com/dcromster/stat…

10:35
@backendsecret надо понять, где именно тормозит: до входа в нашу систему или внутри. Если внутри, то искать, что именно тормозит и устранять

А как понять, до входа или внутри? Как искать внутри, где именно тормозит? twitter.com/oioki/status/7…

10:35
@backendsecret Проанализировать лог на предмет запроса пользователя?

Открываете лог, там:
2016-04-04 10:41:39 - started processing request
2016-04-04 10:42:11 - ended processing request twitter.com/Dronmdf/status…

10:41
@backendsecret знакомая ситуация. Смотрим top. Подтверждается 3.14 - действуем, нет - мучаем прокладку между сиденьем и клавиатурой :)

top не показывает ничего подозрительного. Как я указал ранее, проблема действительно воспроизводится. twitter.com/dcromster/stat…

10:42

Открываете лог, а там пикрелейтед. Ваши действия? pic.twitter.com/VN2kOqhCK7

10:43
@backendsecret Нужно попробовать воспроизвести окружение пользователя(производительность, канал и т.п.) на локальной машине.
10:44
@backendsecret если это веб-приложение, то можно посмотреть в консоли разработчика (F11), какие там DNS Lookup, Initial connection, TTFB
10:44
@backendsecret если что-то другое, можно попробовать померять время с помощью tcpdump.
10:44
@backendsecret Чтобы понять, что внутри - должно быть профилирование, логи и т.п.

Профилировщик к продакшну не приаттачен. По логам не понятно, на что ушло время. Что дальше? twitter.com/oioki/status/7…

10:45
@backendsecret в коде есть включаемый миханизм, который покажет затраченные ресурсы "по функциям"? А сеть посмотреть можно?
10:50
@backendsecret как минимум, должен выполняться мониторинг различных участков кода приложения. Это сужает круг поиска проблемы.
11:02
@backendsecret ну а ваще, лучше впасть в панику и начать серваки ребутать пачками, конечно и материть одминов и железо :)
11:02
@backendsecret 30 секунд - значение tcp таймаута по-умолчанию. Проверяем апстримы.
11:20

.@meowthsli только среднее? 😰 Какой критерий того, что нужно что-то чинить?

11:23
@backendsecret 90-й перцентиль и максимальное время. Критерий -- вылетело за SLA
11:41

Пока выглядит так, что не очень понятно, что делать, если тормозит.

11:50

Предлагаю такой простой алгоритм:

11:53

Cамая трудоёмкая часть — как раз (2). Вы не одиноки: так считает около 76% людей. downloads.plumbr.eu/survey-results… pic.twitter.com/2DrK659fEg

12:00

Дело в том, что пространство возможных причин проблем с производительностью просто огромно, и наивные подходы поиска плохо работают.

12:23

Нужна методология.Рекомендую доклад @shipilev на эту тему: jeeconf.com/archive/jeecon… (ru) shipilev.net/talks/devoxx-N… (en) pic.twitter.com/A2XKS0C8sz

12:32

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

12:45

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

12:49

Очень простой пример из мира java: обычно приложение потребляет 20-30% от одного ядра, но иногда грузит все на 100%. Да это же наверняка GC!

12:53

Но может и не GC, конечно же. Но такое поведение у опытного инженера сразу повысит вероятность того, что это именно он.

12:57

По сути, шаг #2 в аглоритме — построить гипотезу о том, где вы находитесь в пространстве тормозящих программ.

12:59

Вы можете делать наблюдения и ставить эксперименты, результаты которых влияют на вашу вероятностную оценку своего местоположения.

14:14

Пример наблюдения: вывод vmstat.

P(проблемы с сетью|высокий sys) > P(проблемы с сетью|низкий sys)

14:18

Но нужно как-то уметь строить эти вероятностные модели. Нужно откуда-то знать, что симптом многих проблем с сетью — высокий %sys, и т.д.

14:20

Итог дня: у всех всё тормозит, только они об этом не знают. Как и в каком порядке чинить, тоже не понятно.

18:28

На сегодня ещё немножко оффтопика. Например,ассоциация на "выпустили новую версию с повышенной производительностью": coub.com/view/1avfj

18:42

Вот ещё классная анимация, показывающая эволюцию от бактерии до человека: educationalgifs.com/post/102968360…

18:47

А вот и нет, ещё не всё на сегодня. Давайте ещё немножко поголосуем! Какой у вас уровень root логгера в продакшне?

19:55

# Вторник 40 твитов

Доброе утро! Те, кто проголосовал "INFO" или "WARN" в опросе про логи: скажите, а чем вам DEBUG мешает в продакшне?

6:49
@backendsecret его дохера и можно iowait'ов наплодить
7:04
@backendsecret т.е. я правильно понимаю, что нас ждёт задача классификации и байесовский метод? А где набрать столько апостериорных данных?
7:05

Только не говорите, что логгирование тормозит :)

7:06
@backendsecret если у тебя 200 000 rps то дебаг логов немного до фига :)
7:08

200,000 RPS на ноду. Каждый запрос важен для бизнеса. Вчера 30 запросов были обработаны некорректно, нужно выяснить, почему. Ваши действия?

7:12
@backendsecret берусь за голову и тихонечко так "Блиииин..."
7:40

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

9:02
@backendsecret в debug обычно пишут всякие красивые строчки с форматтерами, внутри которых иногда происходит адовая упячка с регулярками

А всякую упячку можно писать в TRACE, например. twitter.com/qwwdfsad/statu…

9:06

Часто для логов выделяют отдельный физический диск. Некоторые стримят логи в сеть через отдельный физический интерфейс.

9:27

Итак, прошёл ланч, самое время писать в твиттер!

10:02

Как вы помните, первый шаг — понять, тормозит ли. Для того, чтобы
понимать это достаточно оперативно, необходим мониторинг 24/7.

10:08

К этому есть множество подходов, начиная от баш-скриптов, отсылающих email если упадёт процесс, и заканчивая полноценными APM.

10:09

Хороший мониторинг должен присылать уведомления, когда что-то сломано и не посылать уведомлений, когда всё в порядке (долой false positives)

10:13

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

10:13

Многие собирают дешборды вручную, используя, например, graphite. Для сбора системных метрик часто берут diamond. pic.twitter.com/0IY5IBRqXV

10:26

Grafana — отличный конструктор дешбордов с поддержкой кучи всего: grafana.org pic.twitter.com/8klMCGdxSY

10:28
@backendsecret Добавлю что по моему опыту разработчик сам должен быть вовлечён в мониторинг, а не отдавать его на откуп опсам.

Особенно справедливо для стабильности. Если вас пару раз разбудят ночью, то вы куда аккуратнее будете писать код. twitter.com/ctrlok/status/…

10:31

Как вы видите на картинке, тут изображены уже не только системные метрики типа CPU, но и бизнес-метрики типа числа регистраций. Это важно.

10:33

.@ctrlok да, грань очень тонкая, согласен. Но если оно пригодится раз в месяц и сэкономит два дня попыток воспроизводить, то оно, имо, нужно

10:39

У кого есть дешборды, расскажите, что вы на них показываете? Для привлечения внимания, вот главная страничка нашего: pic.twitter.com/rhuhQC8O6p

10:48
@backendsecret SuccessRate, SLA, QPS, перцентили latency; то же для up/downstream сервисов; # живых инстансов, deploy SHA, uptime, CPU, GC
11:55
@backendsecret это ещё не всё 😔 для каждого сервиса дашборд несколько страниц. Приходится поскроллить! Но привыкли, layout похожий у всех
12:18

Итак, чего мы хотим от дешборда? Чтобы с одного взгляда было понятно, насколько всё в целом плохо. Системными метриками этого достичь сложно

18:20

100% утилизация CPU — это хорошо или плохо? 4.8 Gbit/s исходящего трафика — хорошо или плохо? 80GB свободной оперативки — хорошо или плохо?

18:23

А если кластер из 1000 машинок, то как показывать системные метрики? Среднее брать? Перцентили показвать? Всех впихнуть на одну страничку?

18:24

Гораздо удобнее показывать, насколько хорошо себя чувствуют отдельные приложения. Их, как правило, меньше, чем физических машинок.

18:28
@backendsecret есть такая штука как apdex. en.m.wikipedia.org/wiki/Apdex

Для того, чтобы наглядно показать здоровье приложения, хорошо подходят штуки вроде Apdex. twitter.com/ztaaz/status/7…

18:32

Если есть данные о результате (например: OK,SLOW,FAILED) бизнес-операций, можно посчитать индекс здоровья приложения pic.twitter.com/yJ3ZjDhcmv

18:38

Тогда можно на дешборде показать для каждого приложения его индекс здоровья. Это позволяет посмотреть на него и сразу всё понять.

18:42

Но это только первый шаг! У приложения за час здоровье упало с 99% до 71%. Нужно ли будить кого-то посреди ночи? И если да, то кого именно?

18:46

Операции можно группировать в сервисы, e.g. по методу API. Тормозит /order/archive? Подождёт до утра. Падает /invoice/pay? Пора вставать!

18:51

Для мониторинга за приложениями с точки зрения бизнес-операций используют APM. Они умеют показывать такие картинки: pic.twitter.com/phR5PKFcBd

18:57

Отсюда мы сразу видим: ага, тормозит DownloadController. Не страшно. Может, это у пользователя сеть медленная, вот и качается медленно.

18:59

На втором месте поинтересней: ≈17% пользователей были вынуждены ждать отчёта о распределении latency более 5 секунд! pic.twitter.com/hAKz4ANemE

19:05

(хе-хе, а вы догадались, что на картинке показан график распределения latency для сервиса, рисующего этот самый график? :) )

19:08

Получается, что APM могут показать, тормозит ли, и если тормозит, то стоит ли вообще чинить. Следующий шаг — понять, почему тормозит.

19:19

Мы немного посмотрели на то, как это обычно делается и поняли, что это как-то тяжеловато. С падениям проще: почти всегда в логах есть ошибки

19:20

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

19:22

Как же быть?

19:22

# Среда 34 твита

У нас тут внезапненько "немного" возросла нагрузка на один компонент, так что мой текущий статус примерно такой: coub.com/view/blssx

7:39

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

19:08

Сейчас думаю либо немножко оффтопика покидать, либо баек потравить занятных. Либо и то, и то. Как думаете? Есть вообще кто живой ещё?

19:09
@backendsecret байки рулят
19:15
@backendsecret самую забойную байку :)
19:15
@backendsecret вот спрашивая про живых, ты думаешь что сегодня пятница?
19:15

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

19:17

Был у нас микросервис, который анализировал OOM-дампы. Пришёл такой большой дамп, что сервис сам упал с ООМ, и... угадайте, что было дальше?

19:20
@backendsecret в рекурсию нибось пошёл?
19:22
@backendsecret отправил дамп с данными дампа в микросервис из которого забирает дампы и зациклился в кругу смертей от ООМ киллера?
19:23
@backendsecret а алертами в 3 ночи неистово доканал админа, который их отключил, а в результате остались незамеченными оом дампы реал крэшей
19:25

Конец таки немного не предсказуем: ООМ-сервис проанализировал свой ООМ-дамп, поставил самому себе диагноз, и мы его норм так оптимизировали.

19:26
@backendsecret так вот кто виновен в том что амазон те так давно падал!
19:26

Оттуда же: в одном приложении в логах OutOfMemoryError. Доступа к исходному коду (и к бинарям) нет. Наш агент OOM не детектит вообще-совсем.

19:35

Кучу гипотез проверили, вплоть до того, что форкается отдельная JVM без агента. Оказалось:

new OutOfMemoryError().printStackTrace();

19:37

О! Сейчас будет "сатира". Представьте себе, что вы — владелец автосервиса. К вам приходит клиент и просит поменять колёса на машине.

19:39

Вы видите, что колёса в отличном состоянии и спрашиваете, зачем. Клиент говорит: "Машина очень медленно едет, нужно поменять колёса"

19:39

Из интереса вы открываете капот и видите перед собой двигатель, который словно лупили молотком и пилили пилой и напильником.

19:39

Клиент радостно объсняет: "Это мы с другом, он F1 увлекается, поправили, чтоб аэродинамические свойства улучшить. А то очень медленно едет!"

19:40

"И ещё я масло всё на воду заменил, а то от него очень противный горящий запашок, когда машина едет".

19:41

Осенённые догадкой, вы просите клиента проехать с вами на пассажирском сиденье. Газ в пол: машина дрожит, ходит ходуном, едва едет.

19:43

Клиент, победоносно повернувшись к вам: "Ну что, теперь-то поменяете колёса"? На приборной панели пикрелейтед pic.twitter.com/GkAqXqfJ5h

19:45

Казалось бы, причём тут бекенд-разработка, да?

19:46
Похожую структуру имеют человеческие кости. Как же так получается? pic.twitter.com/Sr9hXsJzjF
19:52
Дело в том, что костная ткань постоянно пожирается клетками-остеокластами, и строится остеобластами. Получается динамическое равновесие.
19:52
Участки кости, находящиеся под нагрузкой, выделяют хемомаркеры, привлекающие остеобласты. Кость перестраивается для снижения нагрузки.
19:52

Как вы могли заметить, пошёл оффтопик. Рекомендую зафолловить @Soukhinov, у него вообще эпическая годнота в твиттере!

19:53

Ну и на сон грядущий, дилемма заключённого. Вы — A, второй заключённый — B. Построим дерево принятия решений, исходя из выбора B.

19:59

(B не даёт показания) => Вам выгоднее дать показания и сократить свой срок
(B даёт показания) => Вам выгоднее тоже дать показания

Верно?

20:02
@backendsecret за группу больше дают :)

Поясню: A и B светит по 0.5 года тюрьмы. Один даёт показания => его милуют, другому 10 лет. Оба дают => обоим 2 года twitter.com/ivanenok/statu…

20:07

Выглядит так, что без предварительного сговора рационально будет дать показания. Но лучший сценарий (оба не дают показания) так не достичь.

20:10

Куда интереснее итерированная дилемма заключённого: некоторые даже говорят, что вся наша жизнь состоит из выбора: кооперировать или предать

20:22
@backendsecret @ivanenok это что за статья такая?!

Статья "Пропаганда Иррационального Образа Мышления" twitter.com/SiliconBangalo…

20:23

Как говорил Альберт Энштейн, начал день с коуба — закончи день коубом. Доброй ночи, и да приснится вам космос: coub.com/view/510lm

20:38

# Четверг 41 твит

@backendsecret на курсере отличный курс по теории игр. И еще более крутой курс на "открытом образовании" openedu.ru/course/mipt/GA…
7:00
Ехал OOM через OOM,
Видеть ООМ в дампе ООМ,
ООМ ООМ ООМ,
ООМ ООМ ООМ. twitter.com/backendsecret/…
10:06

Как дела, что делаете? Перед компом сидите, небось? Как насчёт того, чтобы немного подвигаться? youtube.com/watch?v=jkojGf…

10:11

Можно встать места, немного походить. По десять раз: наклоны (не потягивания) в стороны и вперёд, вращения корпуса, приседания.

10:13

Распространённая проблем разработчиков — боли в запястьях. Сцепите руки в замок и 20 секунд вращайте кисти в одну сторону, потом в другую.

10:15

Всего за 2-5 минут вы разбудили тело, стимулировали кровообращение, наверняка приободрились. Рекомендуется делать каждые 1-2 часа.

10:17
@backendsecret Или просто добавьте в жизнь немного спорта. По себе знаю - помогает.

Это, конечно, куда более эффективное решение проблемы. Давайте немного обсудим ЗОЖ. twitter.com/Dronmdf/status…

10:18
@backendsecret а чего делать с немеюшими мизинцами, доктор?

It's psychosomatic. You need a lobotomy. I'll get a saw. /cc @nitsanw twitter.com/ivanenok/statu…

10:19

Признавайтесь, занимаетесь ли чем-нибудь?

10:22
@backendsecret Я бы сказал, что в сезон езжу на работу на велосипеде, но вот только тут проблема с запястьями наоборот удваивается)
10:26

Рад, что сычей менее половины. Но интересно, расскажите, почему вы даже зарядку не делаете? Только не говорите, что спорт нинужен.

10:56

Тем, кто работает мозгом, спорт тоже отлично помогает: knowledge.freeletics.com/en/5-reasons-f…

10:58
@backendsecret спорт не нужен(он часто приводит к раннему изнашеванию), а поддерживать себя в форме в зале пару раз в неделю - важно
11:16
@backendsecret хожу в зал 3 раза в неделю уже полгода,очень помогает
11:36
@backendsecret 7 minute workout. В результаты никогда бы не поверил, если бы не испытал на себе :)
И тут отмазка “времени нет” не катит :)
19:26

Как-то опять вечер настал очень внезапно. Давайте про саппорт поговорим. Вам доводится заниматься поддержкой?

19:29

Я вот сегодня выяснил, что в aws очень толковый premium support. Выше всех похвал, рили!

19:30

Хороший саппорт не отвечает на ваш вопрос, а пытается выполнить ваш extrapolated volition.

19:32

Они, как правило, куда лучше вас разбираются в теме, и потому могут лучше вас понять, что вам, собственно, нужно.

19:34

Раз уж заговорили об Extrapolated Volition: есть ли тут члены Байесовского Заговора?

19:37

Далее. Долго ещё до ждать до появления Superintelligence (сильный ИИ, на много порядков превосходящий человека)?

20:00

Пока народ голосует, рассмотрим возможный сценарий. 2067 год. Один исследователь в Иране придумывает новую модель само-модифицирующегося ИИ.

20:09

Модель хорошо показывает себя в синтетических тестах, поэтому он решает протестировать её на более реалистичном поприще.

20:10

Он договаривается с фабрикой по производству канцелярских принадлежностей, и модель подключают ко всем компьютерным системам фабрики.

20:12

Цель для оптимизации ставят крайне простую: максимизировать число произведённых офисных принадлежностей. Месяц тестов повысил выход на 42%.

20:14

Довольный исследователь отправляется писать статью, а довольные владельцы фабрики приглашают в гости инвесторов, чтобы похвастаться успехами

20:16

По случаю гостей на фабрике ставят несколько точек доступа к Интернету. Спустя час ИИ узнаёт, что у Ирана напряжённые отношения с соседями.

20:20

Если Индия вторгнется в Иран, то она может разрушить фабрику! Это сильно понижает матожидание числа произведённых скрепок!

20:24

Спустя ещё час ИИ обработал уже терабайты информации, включая весь CVE List, благодаря которому копировал себя на тысячи серверов.

20:29

Спустя десять минут ИИ запустил ядерные ракеты в Индию, Саудовскую Аравию и ряд других представляющих опасность для фабрики стран.

20:33

Спустя миллион лет с Земли Солнце выглядит очень тускло. Оно окружено Сферой Дайсона, а около 1% его массы преобразовано в скрепки.

20:41
@backendsecret почему ты считаешь, что ИИ, проанализировав всю инфу, примет решения, враждебные относительно человечества?

Потому что его не интересует человечество. Его цель — максимизировать число произведённых скрепок. twitter.com/SheVasya/statu…

20:44

В целом, это называется Value Alignment Problem. Вспомните джиннов из сказок, которые вроде делали, что вы просите, но с нюансами.

20:45

Value Alignment Problem — открытая проблема ИИ. Нужно как-то выразить в числах всё то, что человечество считает моральным.

20:47

Наивные решения не работают. "ИИ, сделай так, чтобы все были счастливы" => "ИИ накачивает всех веществами, вызывающими счастье"

20:49
@backendsecret короче, почка ИИ не станет полностью самодостаточным и ресурсонезависимым, людей он трогать не будет.

Это один из вероятных сценариев: пока ИИ не будет уверен в победе на 99.999...%, с виду он будет очень дружественным twitter.com/SheVasya/statu…

20:51

Конкретный пример про скрепки — это мем, называется Paperclip Maximizer. pic.twitter.com/YHXp4dXjYT

20:54

Если вы поняли, насколько в теории сложно создать дружественный к человечеству ИИ, то теперь вспомните, что ВЕЗДЕ БАГИ!

20:57

Если тема интересна, рекомендую художественную литературу:
amazon.com/Smarter-Than-U…
intelligenceexplosion.com
localroger.com/prime-intellec…

21:00

И научные статьи отсюда: intelligence.org/research/
Начинать можно с intelligence.org/files/Corrigib…: как сделать так, чтобы ИИ был согласен на дебаг

21:03

Интересно, думал ли бы я сейчас об этом, если бы не прочитал когда-то давно эту замечательную книгу? pic.twitter.com/UiJrmXpyb3

21:36

# Пятница 19 твитов

На втором месте поинтересней: ≈17% пользователей были вынуждены ждать отчёта о распределении latency более 5 секунд! pic.twitter.com/hAKz4ANemE

Давайте кратко вернёмся к перформанс мониторингу. Закончили на том, что нашли тормозящий сервис: twitter.com/backendsecret/…

7:35

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

7:37

The Next Big Thing среди APM-ов — это automated root cause detection. То есть, APM сам тебе и скажет, почему тормозит.

7:39

На этапе разарботки для этого есть всякие инструменты: #XRebel, профайлеры, и много-много всего. Но в продакшн их не поставишь.

7:42

Но production-ready систем мониторинга, которые умеют показывать, почему тормозит, мало. @JavaPlumbr — первопроходец pic.twitter.com/1xaSMxXZZx

7:48

Из соображений корректности, ничего не буду говорить о конкурентах. Но совершенно честно скажу, что наш продукт — офигенный!

7:50

Не сочтите за рекламу, просто это моя специальность :) Смотрите сами: pic.twitter.com/E0QoYxGQtz

8:11

Ещё у нас есть приличная куча сырых данных по тормозящим и падающим JVM, и из них можно добывать много интересной статистики.

8:24

Например, чаще всего операции падают с IOException. На втором месте NullPointer, на третьем — ClassNotFound.

8:26

С -ea (enable assertions) бегает примерно 5% JVM, но ни одной упавшей из-за AssertionError операции мы не нашли.

8:27

Десятки JVM бегают с -XX:+AggressiveOpts и ещё многие с -XX:+UseFastAccessorMethods (что забавно, т.к. опция для них ничего не делает :) )

8:29

Около 4% всех операций прерываются пользователями: plumbr.eu/blog/user-expe…

8:31
@backendsecret что значит "падают"? Срабатывает хэндлер уровня IO/возвращается 404/бросается исключение (ловится ли?) в бизнес-методе?

Для HTTP-запросов "возвращается 5xx". Для EJB remote invocations — вылетает исключение, и т.д. twitter.com/qwwdfsad/statu…

9:01
@backendsecret почему не поставишь? кучу раз видел как в прод ставят JProfiler или YourKit :)
14:21
Что такое КАРТОШКА? Что такое КОЖУРА? Что такое НОЖ? Что значит ВЗЯТЬ?
Почему всё это не описано?! twitter.com/backendsecret/…
18:05
@theaspect @backendsecret если НЕ ВСЯ картошка почищена?!
Где-нибудь в мире ещё есть нечищеная картошка?

По теме: arbital.com/p/soft_optimiz… twitter.com/Soukhinov/stat…

18:07

Вот и подкрался вечер пятницы. Я уже накатил соточку бёрпи, зашлифовал прыжками, отжиманиями и подтягиваниями. А вы?

18:09

Как думаете, стоит ещё поговорить сегодня о мемори ликах, или лучше завтра или в воскресенье?

18:12
Неординарно собираюсь поспать и выспаться. И вам советую. twitter.com/backendsecret/…
18:45

# Суббота 22 твита

Ну что, все проснулись? Поговорим сегодня о проблемах с памятью. "Приложение ликует" — звучит как что-то хорошее, не правда ли?

13:23

При ручном управлении памятью (e.g. ANSI C) допустить лик очень легко. Хорошо помогает Valgrind Memcheck: valgrind.org/info/tools.htm…

13:33

Постоянная слежка за освобождением ресурсов требует внимания, осторожности и концентрации. Эти силы можно потратить на логику программы.

13:37

Потому придумали reference counting (e.g. shared_ptr в C++), которые сами освобождают ресурсы. Но есть слабое место. pic.twitter.com/kBLvEfqY9J

13:43

Могут получаться островки, которые друг на друга ссылаются, хотя извне не используются. В perl, php, python есть костыли, но не будем о них.

13:48

Если интересно, читайте сами, e.g.: php.net/manual/en/feat… svn.python.org/view/python/tr…

13:55

Для того, чтобы освободить память от злобных циклов, придумали Mark and Sweep Garbage Collection.

13:56

Вводится понятие "GC Roots" — корневых объектов, которые считаются живыми. Все объекты, достижимые из GC roots, помечаются как живые (Mark).

13:58

Объекты, которые не были помечены — мёртвые. Их можно освобождать (Sweep). Островки-циклы не достижимы из Gc Roots. pic.twitter.com/Zy3ILVHAyu

14:01

Однако и у Mark and Sweep есть нюансы. Кто может назвать два самых больших?

14:02
@backendsecret cache (non) friendly?

Это зависит от реализации. Я ищу фундаментальные проблемы (и сложности) подхода Mark and Sweep в целом. twitter.com/vladva/status/…

14:24

.@VladVA например, можно сделать сборщик мусора, который не двигает живые объекты. Тогда, правда, возникнет вопрос фрагментации.

14:25
@backendsecret stop the world и memory fragmentation...?
14:26

На GC speak пользовательское приложение называют Mutator, т.к. оно может изменить граф объектов в процессе обхода. Это может всё сломать.

14:35

Самое простое решение — останавливать приложение на время GC (Stop-The-World). Есть очевидная проблема: pic.twitter.com/Wh9NJ7JWo2

14:40

Можно обходить объекты без STW, но тут нужна недюженная смекалочка и появляются доп. накладные расходы. В HotSpot JVM это делают CMS и G1.

14:48

Твиттер — не формат для деталей реализации, читайте лучше наш хэндбук :) plumbr.eu/handbook/garba… (но на вопросы можно ответить и в твиттере)

14:49

В Azul Zing ещё есть C4 Pauseless Garbage Collector, он просто космос и отлично работает на гигантских кучах, вплоть до терабайт.

14:53
@backendsecret а почему в hotspot'e нет подобного сборщика?

Ведётся работа над Shenandoah, целящимся на схожую нишу. rkennke.wordpress.com twitter.com/crew4ok/status…

15:05

Самая длинная GC пауза в этом году среди наших клиентов — более 9 часов (!). 2 место — 6 часов, третье — 31 минута.

15:09

Правильно настроить GC так, чтобы получить оптимальную производительность — не легко. См. plumbr.eu/handbook/gc-tu… и следующие разделы.

15:12

В Java 9 хотят поставить по умолчанию G1, который, в идеале, не требует настройки. Но требования к производительности у всех свои.

15:13

# Воскресенье 32 твита

@backendsecret Не только силы, цена ошибки при прямой работе с памятью высока.
8:23
@dbg_nsk @backendsecret В Джаве и на маленьких хипах можно устроить длинные паузы. Не 9 часов не уверен, но час запросто.

Например, забить кучу маленькими-маленькими объектами, выстроенными в цепочку один-за-другим. twitter.com/ZhekaKozlov/st…

8:26

И запустить на очень медленной машинке :)

8:27

Кто интересовался, как вышла пауза на 9 часов: не могу сейчас ответить. Надеюсь, что-то типа "своп" или "процесс засаспендили посреди паузы"

8:28

Mark and Sweep GC не защитит вас от утечки памяти, если вы оставите объект достижимым из GC Roots. @JavaPlumbr начинался с обнаружения этого

8:31

Наш CTO защитил PhD на тему использования машинного обучения для обнаружения лика: dspace.ut.ee/bitstream/hand…

8:37

И oh boy, сколько мы видели ликов! Я бы сказал, что 25% java-приложений страдают от ликов, но у нас, мягко говоря, немного biased выборка.

8:41

Например, легко забыть про поток, который жрёт память втихоря. Крайне часто лики в библиотеках и фреймворках :( pic.twitter.com/XSw9bIENWw

8:57

Не менее легко наликовать классов (и особенно класслоадеров при редеплое). Безразмерный Metaspace не спасёт. pic.twitter.com/H7coF8198t

9:20

Если не установить MaxMetaspaceSize, то нативная память, потребляемая ликующей JVM, будет безразмерно расти. Привет, OOM killer!

9:22

Кстати, об ООМ. Еслион случился, то далеко не факт, что из-за утечки памяти. Проверьте: у вас все методы API возвращают списки с пагинацией?

9:24

Кто-нибудь рано или поздно введёт в поиск "*", и будет пичалька. Подробнее о не-ликах: plumbr.eu/blog/memory-le… pic.twitter.com/EUmgK3qPXJ

9:37

Ещё бывают экзотические и необычные лики. Например, finalizer leaks: plumbr.eu/blog/garbage-c… pic.twitter.com/x3AGTQ7c5r

9:43

Содержательная часть на эту неделю закончилась. Если вы хотите что-то узнать, то есть ещё около десяти часов, чтобы задавать свои ответы.

9:45

А я пока забабахаю ещё один опросик: трактор уже завели?

9:48

Моя любимая картинка относительно иммиграции: pic.twitter.com/HngpYr0htj

9:49
@backendsecret насколько сильно влияют на паузы всякие кеши на софт-рефах, клинеры, итд?
Т.е. стоит ли, например, пул объектов делать на sr?

Зависит от сценария, тут описаны некоторые патологические случаи: plumbr.eu/handbook/gc-tu… github.com/gvsmirnov/java… twitter.com/krems5/status/…

13:27

Итак, моя неделя подходит к концу. Сейчас набросаю рекомендаций, которые вам могут оказаться интересными.

18:44

Начну с fiction. Очень, очень хорошее произведение под creative commons, где главный герой — искусственный интеллект:crystal.raelifin.com

18:47

Лучший Hard Science Fiction, что я когда-либо читал. Невероятная широта и глубина мысли + PhD физики и математики: goodreads.com/series/57134-j…

18:49

Рекомендую недавно зародившийся жанр Rational Fiction. У каждого действия и события есть причины. У героев есть цели, которые они преследуют

18:52

Зачастую можно из информации, представленной в ранних главах, предсказать дальнейшие события и понять, что будут делать герои в ситуациях.

18:55

Лучшие примеры: hpmor.com fictionpress.com/s/2961893/1/Mo…. Есть целйы саб-реддит, посвящённый этому: reddit.com/r/rational

18:56
@backendsecret Worm (который от wildbow) же из этого жанра ? Очень понравился. Чтобы ещё подобного почитать?
18:56

О рациональности: lesswrong.com. Чтение Core Sequences (заняло более года) сделало из меня другого человека.

19:04

Есть отдельная короткая цепочка, тоже очень хороша: wiki.lesswrong.com/wiki/Highly_Ad… Многое есть на русском тут: lesswrong.ru

19:07

The Talos Principle — очень хорошая компьютерная игра. Годные паззлы, и довольно глубокая (по сравнению с большинством игр) философия.

19:10

Если будете играть, всегда говорите с ИИ в консоли. Он вас даже троллить будет и припоминать ваши же утверждения, приводя к противоречию.

19:11

Здоровый образ жизни — @Freeletics. Помимо прочего, отличная база знаний. Атлеты быстрее начинают потеть, вы знали? knowledge.freeletics.com/en/sweating-un…

19:15

Научные эксперименты у вас дома и много прочей радости: @MelScienceRU

19:18

На этом, пожалуй, всё. Буду рад вашим рекомендациям-ответочкам!

19:24

На этой неделе помогал разрабатывать бэкенд @gvsmirnov. Становитесь лучше. Делайте мир лучше. Have fun. Ciao!

19:26

plumbr.eu

other


@estet