gvsmirnov

4 апреля 2016, Worldwide

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

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

8:35

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

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

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

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

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

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

9:23

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

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

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

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

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

11:02

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

11:08

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

11:13

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

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

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

11:18

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

11:20

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

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

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

11:27

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

11:28

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

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

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

11:33

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

11:36

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

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

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

11:44

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

13:03

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

13:05

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

13:08

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

13:10

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

13:11

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

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

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

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

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

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

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

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

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

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

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

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

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

13:42

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

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

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

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

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

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

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

14:50

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

14:53

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

15:00

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

15:23

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

15:32

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

15:45

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

15:49

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

15:53

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

15:57

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

15:59

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

17:14

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

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

17:18

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

17:20

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

21:28

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

21:42

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

21:47

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

22:55

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

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

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

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

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

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

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

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

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

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

12:06

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

12:27

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

13:02

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

13:08

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

13:09

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

13:13

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

13:13

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

13:26

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

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

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

13:31

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

13:33

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

13:39

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

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

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

21:20

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

21:23

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

21:24

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

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

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

21:32

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

21:38

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

21:42

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

21:46

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

21:51

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

21:57

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

21:59

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

22:05

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

22:08

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

22:19

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

22:20

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

22:22

Как же быть?

22:22

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

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

10:39

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

22:08

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

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

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

22:17

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

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

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

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

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

22:35

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

new OutOfMemoryError().printStackTrace();

22:37

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

22:39

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

22:39

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

22:39

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

22:40

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

22:41

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

22:43

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

22:45

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

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

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

22:53

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

22:59

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

Верно?

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

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

23:07

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

23:10

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

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

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

23:23

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

23:38

# Четверг 38 твитов

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

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

13:11

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

13:13

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

13:15

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

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

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

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

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

13:19

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

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

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

13:56

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

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

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

22:29

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

22:30

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

22:32

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

22:34

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

22:37

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

23:00

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

23:09

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

23:10

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

23:12

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

23:14

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

23:16

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

23:20

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

23:24

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

23:29

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

23:33

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

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

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

23:44

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

23:45

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

23:47

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

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

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

23:51

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

23:54

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

23:57

# Пятница 22 твита

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

0:00

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

0:03

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

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

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

10:35

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

10:37

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

10:39

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

10:42

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

10:48

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

10:50

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

11:11

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

11:24

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

11:26

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

11:27

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

11:29

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

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

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

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

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

21:07

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

21:09

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

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

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

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

16:23

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

16:33

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

16:37

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

16:43

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

16:48

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

16:55

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

16:56

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

16:58

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

17:01

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

17:02
@backendsecret cache (non) friendly?

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

17:24

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

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

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

17:35

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

17:40

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

17:48

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

17:49

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

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

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

18:05

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

18:09

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

18:12

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

18:13

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

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

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

11:26

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

11:27

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

11:28

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

11:31

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

11:37

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

11:41

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

11:57

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

12:20

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

12:22

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

12:24

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

12:37

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

12:43

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

12:45

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

12:48

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

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

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

16:27

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

21:44

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

21:47

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

21:49

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

21:52

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

21:55

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

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

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

22:04

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

22:07

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

22:10

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

22:11

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

22:15

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

22:18

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

22:24

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

22:26

plumbr.eu

other


@estet