# Понедельник 66 твитов
Всем привет! На этой неделе с вами @gvsmirnov. Мониторинг, перформанс, тесты, многопоточность, Байесовский Заговор, вот это всё.
8:35@backendsecret Всесторонний мониторинг. И не тормозит у нас не потому, что мы молодцы (хотя мы молодцы), а потому, что железа много9:16
Пока около трети проголосовали "не знаю". Спешу вас порадовать: у вас тоже почти наверняка тормозит.
9:19@backendsecret тяжеловато9:19
Типичная история: у компании есть спец. раздел сайта для VIP-клиентов. Добавили мониторинг,оказалось,что там странички по минуте загружаются
9:23Таким образом, плавно (на самом деле не плавно) подходим к теме мониторинга. Те, кто проголосовали "тормозит": а откуда вы знаете?
9:26@backendsecret грепаю максимальное время ответа в access log за последние два часа раз в час.10:57Топорно, но норм.
@backendsecret newrelic10: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/Apdex11: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…
@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, TTFB13: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-й перцентиль и максимальное время. Критерий -- вылетело за SLA14:41
Пока выглядит так, что не очень понятно, что делать, если тормозит.
14:50Предлагаю такой простой алгоритм:
14:53Cамая трудоёмкая часть — как раз (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.
К этому есть множество подходов, начиная от баш-скриптов, отсылающих email если упадёт процесс, и заканчивая полноценными APM.
13:09Хороший мониторинг должен присылать уведомления, когда что-то сломано и не посылать уведомлений, когда всё в порядке (долой false positives)
13:13У хорошего мониторинга должен быть дешборд, одного взгляда на который должно быть достаточно, чтобы понять, какая сейчас ситуация.
13:13Многие собирают дешборды вручную, используя, например, graphite. Для сбора системных метрик часто берут diamond. pic.twitter.com/0IY5IBRqXV
13:26Grafana — отличный конструктор дешбордов с поддержкой кучи всего: 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, GC14:55
@backendsecret это ещё не всё 😔 для каждого сервиса дашборд несколько страниц. Приходится поскроллить! Но привыкли, layout похожий у всех15:18
Итак, чего мы хотим от дешборда? Чтобы с одного взгляда было понятно, насколько всё в целом плохо. Системными метриками этого достичь сложно
21:20100% утилизация 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/Sr9hXsJzjF22: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,13:06
Видеть ООМ в дампе ООМ,
ООМ ООМ ООМ,
ООМ ООМ ООМ. twitter.com/backendsecret/…
Как дела, что делаете? Перед компом сидите, небось? Как насчёт того, чтобы немного подвигаться? 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:45Value 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…
И научные статьи отсюда: intelligence.org/research/
Начинать можно с intelligence.org/files/Corrigib…: как сделать так, чтобы ИИ был согласен на дебаг
Интересно, думал ли бы я сейчас об этом, если бы не прочитал когда-то давно эту замечательную книгу? pic.twitter.com/UiJrmXpyb3
0:36На втором месте поинтересней: ≈17% пользователей были вынуждены ждать отчёта о распределении latency более 5 секунд! pic.twitter.com/hAKz4ANemE
Давайте кратко вернёмся к перформанс мониторингу. Закончили на том, что нашли тормозящий сервис: twitter.com/backendsecret/…
10:35Используя классический подход, нам бы, вероятно, пришлось потратить несколько дней, а то и недель, чтобы понять, почему сервис тормозит.
10:37The 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
Что такое КАРТОШКА? Что такое КОЖУРА? Что такое НОЖ? Что значит ВЗЯТЬ?21:05
Почему всё это не описано?! twitter.com/backendsecret/…
@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:28Mark 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:07The 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
- https://plumbr.eu/blog/user-experience/performance-causing-users-abandon-site
- https://plumbr.eu/blog/user-experience/how-fast-are-web-applications-in-2016
- https://plumbr.eu/handbook/garbage-collection-algorithms-implementations
- https://plumbr.eu/handbook/gc-tuning
- https://plumbr.eu/blog/memory-leaks/memory-leaks-fallacies-and-misconceptions
- https://plumbr.eu/blog/garbage-collection/debugging-to-understand-finalizer
- https://plumbr.eu/handbook/gc-tuning-in-practice#weak-soft-and-phantom-references
other
- https://en.m.wikipedia.org/wiki/Apdex
- http://coub.com/view/9va1a
- http://coub.com/view/1avfj
- http://coub.com/view/blssx
- http://coub.com/view/510lm
- http://www.catb.org/jargon/html/F/field-circus.html
- http://downloads.plumbr.eu/survey-results.pdf
- http://jeeconf.com/archive/jeeconf-2012/materials/performance/
- http://shipilev.net/talks/devoxx-Nov2012-perfMethodology.pdf
- http://educationalgifs.com/post/102968360377/evolution-from-bacteria-to-human-you-might-also
- http://grafana.org/
- https://openedu.ru/course/mipt/GAMETH/
- https://www.youtube.com/watch?v=jkojGf_u2uI
- https://knowledge.freeletics.com/en/5-reasons-freeletics-makes-smarter/
- https://knowledge.freeletics.com/en/sweating-unpleasant-but-important/
- http://www.amazon.com/Smarter-Than-Us-Machine-Intelligence-ebook/dp/B00IB4N4KU
- http://intelligenceexplosion.com/
- http://localroger.com/prime-intellect/
- https://intelligence.org/research/
- https://intelligence.org/files/Corrigibility.pdf
- https://xkcd.com/865/
- https://arbital.com/p/soft_optimizer/
- http://valgrind.org/info/tools.html#memcheck
- http://php.net/manual/en/features.gc.collecting-cycles.php
- http://svn.python.org/view/python/trunk/Modules/gcmodule.c?revision=81029&view=markup
- https://rkennke.wordpress.com/
- http://dspace.ut.ee/bitstream/handle/10062/43817/shor_vladimir.pdf;jsessionid=7728D0595A2D5893D9BC053A3114CA61?sequence=1
- https://github.com/gvsmirnov/java-perv/tree/master/labs-8/src/main/java/ru/gvsmirnov/perv/labs/gc
- http://crystal.raelifin.com/
- https://www.goodreads.com/series/57134-jean-le-flambeur
- http://hpmor.com/
- https://www.fictionpress.com/s/2961893/1/Mother-of-Learning
- https://www.reddit.com/r/rational
- http://lesswrong.com/
- https://wiki.lesswrong.com/wiki/Highly_Advanced_Epistemology_101_for_Beginners
- http://lesswrong.ru/