BitPage

Технический блог

BitPage

Технический блог о разработке и DevOps

18 статей
7 направлений
68 тегов

Свежее

Диск освободили, а ClickHouse продолжает его забивать: сломанный логгер и json-лог Docker без ротации

После No space left on device ClickHouse до 26.7 не восстанавливает файловый логгер: Poco бросает исключение из проверки ротации, минуя обработчик ENOSPC, и каждое сообщение уходит в stderr с полной трассой стека — на стенде 1 443 463 байта за 20 секунд. Докидывает Docker: драйвер json-file пишет stderr на тот же диск, его max-size по умолчанию -1, то есть без ограничения. Лечится без рестарта базы сигналом SIGHUP.

Peer certificate cannot be authenticated with known CA certificates: что значит эта строка и почему обновление ca-certificates не помогает

Слово «known» в этой строке выдаёт curl 7.21.6 и старше: в 7.21.7 (23 июня 2011) текст сменился на «given», а с 7.62.0 код 60 отдаёт уже другое сообщение. И причина отказа обычно не в том, что в бандле нет нового корня, а в том, что нужный корень изъяли: из 138 корней среза Mozilla от 17 января 2018 в срезе от 25 сентября 2026 остались 53.

Тест на длительность видео был зелёным при обрезанной картинке: ffprobe мерил контейнер, а не дорожку

format=duration в ffprobe — это длительность контейнера, то есть максимум по дорожкам, а не длина картинки. Если звук натянут на всю длину ролика источником тишины, укороченное видео это число не изменит: в намеренно сломанной сборке контейнер отдал 13,139 с при видеодорожке 11,833 с, и тест остался зелёным. Мерить надо -select_streams v:0 -show_entries stream=duration, а допуск выводить из частоты кадров самого файла.

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

Кэш ответов API с ключом на дату — это не «кэш плюс параметр», а несколько независимых потоков, которые экран обязан склеивать по ключу. Каждый шов даёт дефект: срок хранения, стирающий только что открытый день; init у ViewModel, который в стеке выполняется один раз за сессию; дата и данные из разных потоков. Триста с лишним зелёных тестов не поймали ни одного из них.

Место на диске съели индексы, а не данные: раздувание b-tree, которое autovacuum не лечит

Дисковый алерт на базе PostgreSQL чаще означает раздувание индексов, а не таблиц: b-tree не сливает полупустые страницы, и плотность вместо дефолтных 90% падает до 13–15%. Autovacuum тут бессилен by design — помогает только REINDEX, а VACUUM FULL при нехватке места опасен, потому что пишет вторую копию таблицы целиком.

Сервер не отвечает, но работает: беззнаковое вычитание в ZFS и systemd CrashAction=freeze

Массовые segfault'ы в несвязанных процессах и сервер, который не отвечает ни по одному порту, — это не битая память, а переполнение в zfs_fillpage(): при гонке mmap-чтения с усечением файла io_len = i_size - io_off уходит в минус, и dmu_read() забивает нулями чужую физическую память. Починено в OpenZFS 2.4.4 и 2.3.9 от 21 августа 2026, в 2.2.11 фикса нет. Отказ растягивает systemd: CrashAction по умолчанию freeze, PID 1 замирает навсегда.

Направления

Бэкенд

2

PHP, Laravel, GraphQL, Python, доменное моделирование, серверные архитектурные решения и тестирование пайплайнов. Из практики зрелых монолитов и гринфилдов.

Последняя: Тест на длительность видео был зелёным при обрезанной картинке: ffprobe мерил контейнер, а не дорожку

Базы данных

3

PostgreSQL, ClickHouse, MySQL. Миграции, оптимизация, разбор инцидентов, экранирование и типовые грабли.

Последняя: Место на диске съели индексы, а не данные: раздувание b-tree, которое autovacuum не лечит

Инфраструктура

1

Ansible, Terraform, Proxmox, libvirt, Docker, LXC, edge-прокси, сеть, DNS. Bare-metal без облаков.

Последняя: Как вывезти живой docker-проект с умирающего диска: стрим pg_dump, pull образов, якорный exclude

Инциденты

3

Post-mortems с полной диагностикой: гипотезы, тупики, root cause, конкретные цифры. Разбираем, как оно на самом деле ломается.

Последняя: Диск освободили, а ClickHouse продолжает его забивать: сломанный логгер и json-лог Docker без ротации

Безопасность

2

CrowdSec, SSH, TLS, secrets, hardening. Заменяем ритуальную защиту на настоящую.

Последняя: Peer certificate cannot be authenticated with known CA certificates: что значит эта строка и почему обновление ca-certificates не помогает

AI-native

6

Claude Code, MCP, память агентов, скилы-конвенции, workflows. Разработка в паре с AI как процесс.

Последняя: Какие нейросети потянет ваш компьютер — проверяем за минуту

Мобильная разработка

1

Android, Kotlin, Compose, iOS, SwiftUI. Кэш и потоки состояния, client-server API, живые интеграции с бэкендом.

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

Теги