Я работаю системным программистом в компании КриптоПро. Нередко мои задачи связаны с ошибками, которые лежат на самом нижнем уровне современных операционных систем, под которые мы пишем ПО. Я хочу поведать тебе, Хабр, об одной из таких ошибок и о том, как я жаловался на неё разработчикам.
Рубрика «deadlock»
Баг в ядре Linux и как правильно жаловаться
2022-03-26 в 19:10, admin, рубрики: C, deadlock, linux, open source, библиотека, блокировки, взаимные блокировки, многопоточность, параллельное программирование, системное программирование, ядроБезопасная многопоточность в Rust
2021-09-21 в 14:25, admin, рубрики: deadlock, Rust, гонка данных, компилятор, многопоточность, потоки, Программирование, Проектирование и рефакторинг, трейтыConcurrency и паттерны ошибок, скрытые в коде: Deadlock
2019-03-03 в 15:51, admin, рубрики: concurrency, deadlock, ПрограммированиеНаверняка, многие слышали, а кто-то встречал на практике, такие слова, как взаимные блокировки(deadlock) и гонках(race condition). Эти понятия относятся к разряду ошибок в использовании concurrency. Если я задам вам вопрос, что такое дедлок, вы с большой вероятностью без доли сомнения начнете рисовать классическую картинку дедлока или его представление в псевдокоде. Что-то вроде этого:
Эту информацию мы получаем в институте, можно найти в книжках и статьях на просторах интернета. Такой дедлок с использованием, например, двух мьютексов, во всей своей красе можно встретить в коде. Но в большинстве случаев не все так просто, и не каждый может увидеть классический паттерн ошибки в коде, если он представлен не в привычном виде.
Читать полностью »
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
2017-08-29 в 7:49, admin, рубрики: atlassian, deadlock, devops, jira, update, Блог компании Яндекс.Деньги, Серверная оптимизация, системное администрирование
В августе Яндекс.Деньги провели митап Jiramania. На нем разработчики и администраторы рассказали про отмычки и ноу-хау по работе с Jira.
Помимо неспешных бесед за кофе и круассанами, Гончик Цымжитов из ITIVITI поделился перцовыми пластырями от боли обновления Jira. После чего на сцену вышел Вадим Гаузяк из СберТеха с результатами своего исследования дедлока в agile-плагине Jira 7.
Но хватит интриг — под катом вы найдете оба доклада.Читать полностью »
Как мы ловим Deadlock`и на PostgreSQL и чиним их
2017-07-13 в 6:47, admin, рубрики: deadlock, postgresql, python, wargaming, Блог компании WargamingПредисловие
Ситуация: есть высоконагруженная мета-игра для наших танков под названием Глобальная карта. Эдакая пошаговая настолка для команд, где бои происходят в реальном танковом клиенте. В пиковые часы на карте несколько тысяч руководителей кланов производят игровые действия: атакуют друг друга, перемещают дивизии, покупают, продают, грабят корованы. Помимо этого, существует десяток сервисов, которые также могут вносить изменения в игровую ситуацию: подкидывают деньжат, штрафуют, добавляют игроков в клан и прочее.
Всё это неизбежно приводит к дэдлокам. Так вот, хочу вам поведать историю о том, как мы эти периодические проблемы держим в допустимых рамках.
Тестирование параллельных процессов
2017-04-25 в 6:07, admin, рубрики: deadlock, php, phpunit, sql, параллельное программирование, параллельные вычисления, Программирование, Тестирование IT-систем, тестирование приложений
Вы встречались с ошибками, которые возникают время от времени в продакшне, но никак не воспроизводятся локально? Бывает, изучаешь такой баг и вдруг понимаешь, что он проявляется только при одновременном параллельном выполнении скриптов. Изучив код, понимаешь как это исправить, чтобы такого больше не повторялось. Но на такое исправление хорошо бы написать тест…
В статье я расскажу о своем подходе к тестированию таких ситуаций. А также приведу несколько наглядных (и наверное даже классических) примеров багов, которые удобно протестировать с помощью этого подхода. Все примеры багов живые — то, что встречается в работе.
Забегая вперед сразу скажу, что в конце статьи будет ссылка на github, куда я выложил готовое решение, позволяющее тестировать параллельные консольные процессы легко и просто.
Читать полностью »
Класс дедлоков про дедлок классов
2015-04-07 в 7:36, admin, рубрики: class initialization, deadlock, hotspot, java, jvm bug, Блог компании Одноклассники, никому нельзя верить
Знаете ли вы, как избежать дедлоков в своей программе? Да, этому учат, про это спрашивают на собеседованиях… И тем не менее, взаимные блокировки встречаются даже в популярных проектах серьёзных компаний вроде Google. А в Java есть особый класс дедлоков, связанный с инициализацией классов, простите за каламбур. Такие ошибки легко допустить, но трудно поймать, тем более, что сама виртуальная машина вводит программиста в заблуждение.
Сегодня пойдёт речь про взаимные блокировки при инициализации классов. Я расскажу, что это такое, проиллюстрирую примерами из реальных проектов, попутно найду багу в JVM, и покажу, как не допустить такие блокировки в своём коде.
Боремся в deadlock-ами: паттерн unlocked callbacks
2013-04-04 в 8:05, admin, рубрики: deadlock, Mutex, pattern, thread, Блог компании Нордавинд, Проектирование и рефакторинг, метки: deadlock, mutex, pattern, threadСитуации взаимной блокировки
В Википедии дается следующее определение взаимной блокировки: «Взаимная блокировка (англ. deadlock) — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами».
Взаимные блокировки носят, как правило, динамический характер: их проявление зависит от таких факторов, как действия пользователя, доступность сетевых сервисов, позиционирование головки жесткого диска, переключение задач в системе с вытесняющей многозадачностью и т.п.
Классический пример взаимной блокировки: первый поток (A) захватывает мьютекс M1 и следом мьютекс M2. Второй поток (B) захватывает мьютекс M2, а уже после этого – мьютекс M1. Взаимная блокировка этих двух потоков может произойти следующим образом: поток A захватывает M1, поток B захватывает M2, после этого оба потока «обречены»: ни поток A не может захватить M2, ни поток B не может захватить M1; попытки захвата мьютексов заблокируют оба потока.
Описанная взаимная блокировка произойдет только в том случае, если оба потока успеют захватить ровно по одному мьютексу. В противном случае потоки продолжат свое выполнение.
Данная ситуация очень распространена в сложных многопоточных системах. Как правило, мьютексы-участники расположены далеко друг от друга (в различных компонентах системы), и выявить участников взаимной блокировки оказывается достаточно сложно.
Читать полностью »
Немного про Deadlock
2012-11-27 в 20:30, admin, рубрики: deadlock, mysql, sql, метки: deadlock, mysql, sqlЭто совсем краткий пост о причинах возникновения Deadlock
В более менее нагруженных проектах, использующих транзакции InnoDB, в любой момент может возникнуть ошибка вида
«Deadlock found when trying to get lock; try restarting transaction»
Главное не паниковать при виде этих страшных слов, сейчас мы разберемся почему это происходит.
Читать полностью »