PostgreSQL: autovacuum — когда и почему убирает

Autovacuum срабатывает, когда количество мёртвых кортежей превышает порог: threshold + scale_factor × n_live_tup По умолчанию: 50 + 0.2 × размер_таблицы. Для большой таблицы это слишком много — bloat накапливается быстро. Настроить на уровне таблицы: ALTER TABLE orders SET ( autovacuum_vacuum_scale_factor = 0.01, autovacuum_vacuum_threshold = 100 ); Смотреть когда последний раз убиралось и сколько мёртвых кортежей сейчас: SELECT relname, n_dead_tup, last_autovacuum, last_autoanalyze FROM pg_stat_user_tables ORDER BY n_dead_tup DESC; autovacuum_naptime (по умолчанию 1 мин) — как часто демон проверяет таблицы. На нагруженных базах снизить до 15s. ...

1 июля 2026 г. · llexa

Современные ФС #3: btrfs — RAID и scrub

btrfs реализует RAID на уровне файловой системы — без mdadm. Создать том из двух дисков с зеркалированием: mkfs.btrfs -d raid1 -m raid1 /dev/sdb /dev/sdc mount /dev/sdb /mnt/data Флаг -d — профиль данных, -m — профиль метаданных. Для трёх+ дисков доступны raid5, raid6, raid10. Добавить диск к существующей ФС и перераспределить под новый профиль: btrfs device add /dev/sdd /mnt/data btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/data Проверка целостности — scrub читает все блоки и сверяет чексуммы: ...

1 июля 2026 г. · llexa

chattr и lsattr: защита файлов на уровне ФС

chattr +i /etc/resolv.conf — файл становится иммутабельным: даже root не может изменить, удалить или переименовать его до снятия атрибута. chattr +i /etc/resolv.conf # иммутабельный chattr +a /var/log/app.log # append-only: нельзя перезаписать или удалить chattr -i /etc/resolv.conf # снять атрибут lsattr /etc/resolv.conf # ----i---------e--- lsattr -R /etc/ # рекурсивно +a (append-only) — для лог-файлов: процесс пишет, но никто не сделает truncate или rm. Работает на ext2/3/4 и btrfs; на tmpfs и vfat атрибуты не поддерживаются. ...

30 июня 2026 г. · llexa

mapfile и readarray: файл в bash-массив

mapfile (alias readarray) читает строки в массив за один вызов — чище цикла while IFS= read -r line. mapfile -t lines < /etc/hosts # -t убирает \n в конце каждой строки echo "${#lines[@]}" # количество строк echo "${lines[0]}" # первая строка mapfile -t hosts < <(grep -v '^#' /etc/hosts) # из process substitution mapfile -t -n 10 head10 < bigfile # только первые 10 строк В отличие от arr=($(cat file)), не ломается на строках с пробелами и не делает glob-expansion. readarray — полный синоним. Требует bash 4.0+. ...

30 июня 2026 г. · llexa

traceroute и tracepath: маршрут до хоста

traceroute отправляет пакеты с нарастающим TTL — каждый роутер на пути отвечает ICMP Time Exceeded, так строится маршрут. traceroute -n google.com # без DNS-резолвинга, быстрее traceroute -T -p 443 google.com # TCP SYN вместо UDP — проходит через файрволы traceroute -I google.com # ICMP echo (нужен root) tracepath google.com # без root, находит MTU на каждом сегменте tracepath не требует root и параллельно определяет MTU пути (PMTUD) — полезно при проблемах с фрагментацией пакетов. Если нужен непрерывный мониторинг маршрута — mtr объединяет оба инструмента в реальном времени. ...

30 июня 2026 г. · llexa

bash best practices: пишем скрипты надёжно

Каждый скрипт начинается с set -euo pipefail — стоп при первой ошибке, незаданной переменной, упавшем пайпе. #!/bin/bash set -euo pipefail NAME="${1:-world}" # значение по умолчанию readonly LOG="/var/log/app.log" cleanup() { rm -f /tmp/app.lock; } trap cleanup EXIT [[ -f "$LOG" ]] && tail -n 100 "$LOG" [[ ]] вместо [ ] — нет сюрпризов с пробелами в переменных. readonly — защита от случайного переопределения. trap EXIT — очистка даже при ошибке. #bash #linux #sysadmin

29 июня 2026 г. · llexa

GNU parallel: xargs с параллелизмом и прогресс-баром

parallel — как xargs, но с явным числом потоков, progress-баром и --eta. Запустить команду для каждого аргумента: parallel -j4 gzip ::: file1.log file2.log file3.log parallel -j$(nproc) "convert {} {.}.webp" ::: *.png Читать список из файла и показывать прогресс: parallel -j8 --progress --eta curl -O {} :::: urls.txt Несколько групп аргументов — комбинации через :::: parallel echo {1}-{2} ::: A B C ::: 1 2 # A-1 A-2 B-1 B-2 C-1 C-2 xargs -P 4 проще для однострочников. parallel — когда нужен --eta, --joblog, --retry-failed. ...

29 июня 2026 г. · llexa

Murdle: детективная головоломка на каждый день

Murdle — сайт с детективными головоломками в духе «Достать ножи». Каждый день новый уникальный сценарий: нужно вычислить убийцу, орудие и место преступления. Только дедукция — подсказок нет. Интерфейс на русском. → https://mystery-o-matic.com/ru/ via https://t.me/naebnet/16274 #игра #детектив #головоломка

29 июня 2026 г. · llexa

nginx: map и geo — динамика без if

map и geo живут в http {} и вычисляются один раз на запрос — без if, без лишнего кода. geo $remote_addr $is_internal { default 0; 10.0.0.0/8 1; 192.168.0.0/16 1; } map $http_referer $bad_referer { default 0; ~*spam\.ru 1; } server { if ($bad_referer) { return 444; } if ($is_internal = 0) { return 403; } } geo — хэш по IP, без regex, очень быстро. map — regex по любому заголовку или переменной. Комбинируются свободно. #nginx #linux #sysadmin

29 июня 2026 г. · llexa

perf: от счётчиков CPU до flamegraph

perf stat ./program — счётчики ядра за один запуск: instructions, cycles, cache-misses, IPC. IPC < 1 — узкое место в CPU. Cache-miss rate > 10% — проблема с памятью. Live-профиль процесса без перезапуска: perf top -p $(pgrep nginx) Запись стеков и flamegraph: perf record -F 99 -g -p PID -- sleep 30 perf report --stdio perf script | stackcollapse-perf.pl | flamegraph.pl > out.svg Скрипты — github.com/brendangregg/FlameGraph. perf stat -a sleep 5 — счётчики всей системы за 5 секунд, без привязки к PID. ...

29 июня 2026 г. · llexa