Мини-интервью: Саша Гольдштейн

Снова публикуем интервью с прошлогоднего JPoint и смотрим, что изменилось за год: в этот раз вспоминаем разговор со специалистом по производительности Сашей Гольдштейном. Саша давно известен в .NET-мире, а на JPoint 2017 он неожиданно для многих выступил перед джавистами.

Что к этому интервью можно добавить спустя год? Во-первых, доклад оказался хорошо принят, и на JPoint 2018 Саша тоже выступит, теперь с темой «Linux container performance tools for JVM applications».

А во-вторых, отдельная интересная история вот в чём: в интервью Саша говорит, что послушал доклад Одноклассников о профилировании, а в итоге он стал одним контрибьюторов async-profiler, представленного в том докладе.

— Саша, вас знают, как .NET-эксперта, и вы внезапно на Java-конференции. Как так получилось?

— Совершенно случайно. Я уже выступал несколько раз на DotNext, даже состою в Программном комитете. Последние несколько лет я занимаюсь производительностью на Linux, где .NET пока что только делает первые шаги, в то время как Java доминирует. У меня есть большой опыт оптимизации, мониторинга, трейсинга на Linux, который не привязан к Java, но здесь, на JPoint, доклад получился как раз про Java-аспекты этого процесса, и как там, учитывая перформанс на Linux, получить информацию именно по Java-приложению.

— BPF, про который вы рассказываете в докладе, может настолько же хорошо подходить и для других языков?

— Да. Конечно, легче всего обрабатывать нативное приложение на C/C++, но для Java тоже получается довольно удачно, потому что есть адаптеры, с помощью которых можно получать Java method names, call stacks и всё, что нужно для оптимизации.

— Вы начали заниматься линуксовыми инструментами в связи с тем, что .NET уходит в кросс-платформу?

— .NET уходит в кросс-платформу только последние пару лет, а Linux с точки зрения перформанса я занимаюсь уже лет пять-шесть. А просто баловался Unix я ещё лет 15 назад.

— В процессе подготовки доклада узнали ли вы для себя много нового о Java?

— Возможно, что-то. В принципе, я уже имел какое-то понятие о том, как это всё работает. Другое дело, что пришлось писать новые примеры, демки, и там было кое-что интересное. Есть один пример, для которого я написал специальный тул. Это где Java-приложение разговаривает с MySQL-базой данных, мне было интересно получить с Java-стороны стек-трейс, где выполняется конкретный запрос. Не было ничего готового, и мне пришлось написать тул. Но вообще я, как и сказал, имел представление, как это складывается в Java.

— На конференции DotNext вы уже многократно выступали, на JPoint вы впервые. Как они для вас соотносятся, есть ли ощутимые отличия?

— Конференции похожи по хардкорности, участники задают хорошие вопросы. И на DotNext, и здесь обычно спрашивают по существу. Но на JPoint раза в два больше народу, чем на DotNext, так что сказал бы, что здесь динамичнее. Но на DotNext тоже хорошо.

— Сегодня утром мы общались с Алексеем Шипилёвым и Сергеем Куксенко, перформанс-инженерами из самого нутра Java, речь зашла о том, что оптимизация в том виде, в котором её обсуждают на конференциях, нужно лишь одному проценту пользователей и разработчиков в мире. Как вы считаете?

— Да, я тоже слушал сегодня утром кейноут Шипилёва. Какие-то хардкорные хаки, как оптимизировать какой-то определённый вызов метода в Java, это да, нужно одному проценту, и то, может быть, не обязательно. Это красная зона. Вообще, иметь представление о том, где приложение проводит время и сколько памяти оно использует, где я обращаюсь в базу данных, где я на диск пишу — это полезно. Может, не сто процентов для всех, но всё же многим. Это, на мой взгляд, не только для перформанс-инженеров, это для всех серьёзных разработчиков. На .NET, кстати, то же самое. На .NET-конференциях есть много докладов про низкоуровневые хаки, «как мы оптимизировали GC и сами переписали его на C++» и так далее. Но вообще перформанс-тулы нужны многим.

— Мы ещё вспоминали цитату Дональда Кнута про «преждевременную оптимизацию как корень всех зол», что вы думаете об этом?

— Насколько я понимаю эту цитату, в большинстве случаев преждевременная оптимизация не нужна, она нужна именно в тех конкретных местах в системе, где мы уже знаем, что нам это что-то даст. Если слепо оптимизировать всё подряд, то это просто не очень продуктивно. Может, что-то и будет немножко быстрее работать, но это будет очень непродуктивно. Например, в RavenDB, .NET Document Database, очень много своих изобретённых велосипедов (об этом уже несколько раз делали доклады на DotNext). Но они их не просто так изобретали. У них есть, например, свои custom streams, свой аллокатор. Они ими пользуются не везде, не на каждой группе HTTP request, а только там, где доказано профайлером, что это полезно. Если бы они всё это изобретали в процессе и не имели никакого обоснования, это была бы ужасная трата времени, потому что они потеряли многие месяцы на оптимизации такого типа.

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

— За эти годы у меня уже немного изменилась перспектива. В принципе, в первую очередь надо понять, где у приложения узкие места, понять, какие ресурсы оно использует: больше CPU, network, память или кэш. Должен быть какой-то базовый чек-лист, через который можно пройтись (за час-два или за три недели) и понять, куда уходит время и какие ресурсы мы используем, насколько мы их используем — на 32% или на 99,9%, и уже всё падает? С этого и надо начать. И потом уже есть специальные инструменты. Обычно, когда говорят про профилирование, это всегда CPU, потому что это самый главный ресурс, у всех суперсложные алгоритмы. Мне как консультанту по перформансу приходится оптимизировать CPU меньше, чем в половине случаев, потому что обычно это не CPU, а база данных, network, HTTP request, DNS и так далее. Мало кто, особенно в энтерпрайзе, пишет алгоритмы, которые на 100% завязаны на CPU.

— Вернёмся к теме DotNext и JPoint: когда вы, человек из .NET, приходите на Java-конференцию и смотрите на её программу, сколько вы видите докладов, интересных для себя?

— Довольно много. В каждом слоте я вижу что-то интересное, потому что это не просто Java-конференция о том, как использовать какой-нибудь Editor, это конференция про то, что мне интересно: про внутренности, перформанс, распределённые системы. Мне точно есть, куда пойти и что послушать.

— Запомнилось что-то из того, что вы уже увидели?

— Кейноут Шипилёва запомнился. Ещё я был на докладе ребят из Одноклассников, которые тоже рассказывали про профилирование. У меня ещё впереди целый день.

— Рассказав в своём докладе о том, что у perf есть недостатки, вы пошли на доклад ребят из Одноклассников, где тоже говорят про perf?

— Да, потому что у них свой подход, довольно интересный с технической точки зрения. Я не уверен на 100% в корректности, кто-то даже задал вопрос из зала про то, как происходит менеджинг этих стеков, но в целом это интересно. Даже если я этим вообще никогда не воспользуюсь, мне интересно, как они подошли к проблеме и как обошли её, как они справились с тем, что все существующие инструменты не давали им то, что нужно. Вот этот образ мышления перформанс-инженера, когда, если уж нет ничего готового, надо написать собственный тул — это хороший настрой. Многие так поступают, и правильно делают. Так и начинаются интересные проекты.

— По поводу написания своего тула: тулинг пока не идеальный? А в .NET тоже так? Я часто слышу, что в Java инструментов больше, чем в .NET.

— Да, но как раз с перформанс-тулами, конкретно на примере CPU-профайлера… То, что ребята из Одноклассников рассказывали, я тоже знаю пару лет, там ситуация просто дикая: большинство профайлеров врут и ничего об этом не говорят, включая коммерческие профайлеры, которые стоят немалых денег, это очень печально. В .NET, по крайней мере, на Windows, Microsoft сделал фреймворк, встроенный в Windows, который уже десять лет очень близко работает с .NET, и там можно делать CPU-профилирование на 100%. И вокруг этого есть куча инструментов. Фундаментально то, что для этого нужно, существует в самой операционной системе. А Java ведь не для одной системы, и получается, что тут это более-менее работает, здесь вообще не работает, там врёт немного и пытается своё придумать.

— Понятно. Можете порекомендовать какой-нибудь доклад из тех, что будут, на что вы точно пойдёте?

— На «Application Performance Monitoring» пойду. Spring мне менее интересен. А завтра, конечно же, на доклад про Shenandoah иду.

— Саша, спасибо большое!

Tags from the story