mtr -rw -c 50 8.8.8.8
Покажет 50 запросов, каждый hop, потери (%) и задержку (ms).
Если видите 30–50% потерь на каком-то промежуточном IP - скорее всего, это и есть проблемный участок.
netstat. Помогает найти открытые порты, "зависшие" соединения и выяснить, какой процесс что слушает.
ss -tulpn
ss -ltnp | grep ':443'
ss -tan state close-wait
1. Сначала mtr до внешнего хоста - проверка трассировки и потерь.
2. Потом ss - смотрим, что на машине: может, переполнен backlog, слушающий порт не отвечает или слишком много соединений.
#mtr #ss #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2
Часто возникает ситуация: программа подвисает, работает странно или вообще не запускается. В таких случаях на помощь приходят два инструмента -
strace и ltrace. Оба они позволяют заглянуть внутрь процесса, но делают это на разных уровнях.
strace ls /nonexistent
Вывод покажет, что ls пытается открыть директорию и получает ENOENT (нет такого файла).
strace -p 1234
Теперь видно, чем занимается процесс с PID 1234.
strace -e open,read,write -p 1234
Будут показаны только вызовы open, read, write.
ltrace ls
Вы увидите вызовы функций вроде malloc(), strlen(), fopen().
ltrace -e malloc,free ./myprog
Будут показаны только вызовы функций управления памятью.
strace → понять, что происходит на уровне системных вызовов (например, программа не может открыть файл из-за прав).
ltrace → отследить логику внутри библиотек (например, неверно передаются параметры в функцию).
strace -p <PID>
Сразу видно, ждёт ли программа I/O или зациклилась.
strace ./prog 2>&1 | grep ENOENT
Можно увидеть, какой именно файл не удаётся открыть.
ltrace -e malloc,free ./prog
Если много malloc(), но мало free() - повод задуматься.
#linux #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Когда в скрипте что-то идет не так, часто хочется понять, какая команда выполнилась последней и какие значения получили переменные. Вместо того чтобы расставлять десятки echo, в bash есть встроенный инструмент -
set -x.Если указать его в начале скрипта, оболочка начнет печатать в консоль каждую выполняемую команду с подставленными значениями переменных. Перед строкой появляется символ +, что делает разбор вывода наглядным.
Создадим простой скрипт, который проверяет наличие файла и копирует его в директорию резервных копий:
#!/bin/bash
set -x
src="/etc/hosts"
dst="/tmp/backup"
mkdir -p "$dst"
timestamp=$(date +%Y%m%d_%H%M%S)
cp "$src" "$dst/hosts_$timestamp"
echo "Backup created: $dst/hosts_$timestamp"
Вывод консоли:
▶ Запуск
# ./backup.sh
+ src=/etc/hosts
+ dst=/tmp/backup
+ mkdir -p /tmp/backup
+ date +%Y%m%d_%H%M%S
+ timestamp=20251007_121330
+ cp /etc/hosts /tmp/backup/hosts_20251007_121330
+ echo 'Backup created: /tmp/backup/hosts_20251007_121330'
Backup created: /tmp/backup/hosts_20251007_121330
Мы видим каждое действие: какие переменные подставились, как отработала команда date, куда скопировался файл.
#linux #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4
Иногда нужно что-то быстро продебажить внутри контейнера: посмотреть процессы, сделать ping, проверить DNS или снять tcpdump. Но чаще всего внутри контейнера нет вообще ничего, кроме самого приложения.
В таких случаях идеально подходит специальный контейнер: Network-Multitool
Его также часто используют и в кубере - для отладки сетей, проверки маршрутов и соединений между подами.
docker run --name nginx -d -p 8080:80 nginx
docker exec -it nginx bash
ps axf
bash: ps: command not found
Теперь подключаем Network-Multitool к тому же namespace, где работает контейнер Nginx:
docker run --rm -it \
--network=container:nginx \
--pid container:nginx \
wbitt/network-multitool:alpine-extra bash
Проверим процессы:
ps axf
PID TTY STAT TIME COMMAND
47 pts/0 Ss 0:00 bash
60 pts/0 R+ 0:00 \_ ps axf
1 ? Ss 0:00 nginx: master process nginx -g daemon off;
29 ? S 0:00 nginx: worker process
30 ? S 0:00 nginx: worker process
Теперь у вас есть все необходимое: ping, dig, curl, tcpdump, netcat, iftop, mysql, git, tshark и многое другое.
alpine-extra - расширенная версия (максимум инструментов, включая tshark, ab, postgresql-client, git и др.).
alpine-minimal - легкая сборка, только базовые сетевые утилиты.
#docker #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5