Динамическое обнаружение гонок в многопоточных Java-программах


Скачать презентацию

Состояния гонки (data races) – одни из самых частых ошибок многопоточного программирования. Они возникают, когда несколько потоков обращаются к одному и тому же разделяемому участку памяти, причем одно из этих обращений – запись. Как правило, гонки опасны, поскольку они приводят к ошибкам в работе программы и повреждениям глобальных структур данных. Гонки очень сложно обнаружить вручную: их проявления не видны немедленно (в отличие, например, от взаимных блокировок – deadlocks) и они возникают только при специфическом чередовании операций в потоках.

В этом докладе мы расскажем о разработанном нами динамическом детекторе гонок, который во время работы программы собирает и анализирует информацию о ходе ее выполнения, обнаруживая гонки “на лету”. Попытки разработки подобных утилит уже неоднократно предпринимались в прошлом, однако до общедоступного, стабильного инструмента, который можно было бы использовать хотя бы на этапе промышленного тестирования (а в идеале – на нагруженных production-системах), дело не дошло. Основные причины этого заключаются в технической сложности задачи и необходимости обрабатывать большие объемы данных – грубо говоря, все обращения к разделяемым переменным/объектам и все синхронизационные операции.

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

  • Как искать гонки в программах
  • Как эффективно внедриться в ход работы Java-программы
  • С какими принципиальными техническими трудностями мы столкнулись
  • Как справиться с большим объемом данных.

Виталий Трифанов

Виталий ТрифановВиталий Трифанов

Старший разработчик компании “Devexperts”, работает в ней с 2007 года. Занимается разработкой внутренних систем и перспективных исследовательских проектов. Аспирант кафедры системного программирования математико-механического факультета СПбГУ. Ведет исследование в области динамического поиска гонок и эффективного применения техники манипулирования байт-кодом Java.

 

Дмитрий Цителов

Дмитрий ЦителовДмитрий Цителов

Ведущий разработчик компании “Devexperts”. С 2005 года возглавляет Evolution Lab – группу внутренних разработок. Группа занимается разработкой перспективных исследовательских проектов и инструментальных средств, оптимизацией технологических процессов. Основные интересы: анализ и оптимизация производительности, разработка высоконагруженных распределённых систем, исследования в области разработки и верификации параллельных структур данных и алгоритмов.

 


Оставить комментарий

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© CEE-SECR 2012 • Email:
Powered by WordPress. • Hosted by Hosting Community • Developed by i-Help