Ответ
Для диагностики сетевой активности процессов я использую комбинацию инструментов, в зависимости от задачи: быстрая инвентаризация соединений или глубокий анализ трафика.
1. Быстрый обзор всех сетевых соединений:
ss -tunap
Флаги: -t (TCP), -u (UDP), -n (показывать адреса, а не имена), -a (все), -p (процессы). Это моя замена устаревшему netstat. Вывод показывает PID, процесс, локальный и удалённый адреса с портами.
2. Поиск по конкретному процессу или порту:
# Какие соединения у процесса с PID 1234?
lsof -i -a -p 1234
# Какой процесс слушает порт 8080?
lsof -i :8080
3. Мониторинг сетевой активности в реальном времени:
# Группировка трафика по процессам (удобно для поиска "пожирателей" полосы)
nethogs
# Более продвинутый мониторинг с `bpf`-инструментами из BCC:
bpftrace -e 'tracepoint:syscalls:sys_enter_connect { printf("%s -> %sn", comm, str(args->uservaddr)); }'
4. Глубокий анализ (отладка): Для отладки сложных проблем (например, с TLS или задержками) я использую:
strace -e trace=network -p <PID>— чтобы увидеть все сетевые системные вызовы (socket, connect, sendto).tcpdump -i any -n host <IP> -w capture.pcap— для захвата сырого трафика с последующим анализом в Wireshark.
В продакшн-средах с контейнерами (Docker/K8s) я сначала нахожу PID процесса в неймспейсе хоста с помощью nsenter или docker inspect, а затем применяю эти же инструменты.