troubleshooting
32 commands
32 shown
CPU по потокам процесса
Загрузка CPU по потокам — находим горячий TID внутри процесса для jstack/perf
pidstat -t -p <pid> 1
Живой просмотр горячих потоков
Потоки процесса в реальном времени; горячий TID в hex (printf %x) сопоставляем с nid в jstack
top -H -p <pid>
Насыщение по ядрам CPU
По ядрам %usr/%sys/%iowait — ловим одно перегруженное ядро против равномерной нагрузки
mpstat -P ALL 1
Очередь выполнения и ядра
Колонка r в vmstat (готовые к запуску) выше nproc = насыщение CPU, а не просто высокий load
vmstat 1 5 | awk 'NR>2{print "runq="$1" blocked="$2}'; nproc
Число потоков процесса
Число потоков на процесс и в системе; утечка потоков исчерпывает kernel.pid_max
ps -o nlwp= -p <pid>; ps -eLf | wc -l
Рост RSS во времени
Снимаем RSS каждые 5с — подтверждаем реальную утечку (монотонный рост), а не обычную работу
while sleep 5; do ps -o rss= -p <pid> | awk '{print strftime("%T"),$1/1024"MB"}'; done
Быстрый итог по памяти
Итог Rss/Pss/Swap одной командой без разбора всего smaps; дёшево при больших картах памяти
cat /proc/<pid>/smaps_rollup
Крупнейшие отображения памяти
Топ отображений по RSS; находим утечку в куче, mmap или раздувшуюся библиотеку
pmap -x <pid> | sort -k3 -rn | head
Топ потребителей slab ядра
Slab-кэши по размеру; раздутые dentry/inode объясняют давление на память ядра
slabtop -o -s c | head -20
Освобождаемая память slab
Разделяем slab на освобождаемую и нет; большой SUnreclaim = реальная утечка в ядре
grep -E 'Slab|SReclaimable|SUnreclaim' /proc/meminfo
OOM killer в dmesg
Жертвы OOM с читаемым временем; -T убирает нечитаемые тики ядра
dmesg -T | grep -iE 'killed process|out of memory' | tail
OOM-оценка процесса
Выше oom_score = вероятнее жертва; oom_score_adj -1000 защищает процесс от OOM
cat /proc/<pid>/oom_score /proc/<pid>/oom_score_adj
OOM-события cgroup v2
Счётчики oom_kill/max по cgroup; под упирается в memory.max до OOM на уровне ноды
cat /sys/fs/cgroup/<name>/memory.events | grep -E 'oom|max'
Удалённые файлы держат диск
df полон, а du чист? Удалённые файлы держит открытый процесс; рестарт освобождает место
lsof +L1 | sort -k7 -rn | head
Насыщение по задержкам диска
%util около 100 и растущий await = устройство перегружено; связать с шумным процессом
iostat -x 1 | awk '$1!~/^$/{print $1, "util="$NF, "await="$(NF-2)}'
Топ блочного I/O по процессам
biotop из bcc: какой процесс грузит блочный I/O по байтам/задержке; modern: однострочники bpftrace
biotop-bpfcc -C 5 1
Проверка переполнения таблицы conntrack
Считает отслеживаемые соединения; -S показывает insert_failed/drop при переполнении таблицы
conntrack -L 2>/dev/null | wc -l; conntrack -S
Просмотр событий conntrack в реальном времени
Поток событий NEW/DESTROY вживую для отлова потерь NAT/таймаутов по порту
conntrack -E -p tcp --dport 443 -o timestamp
Исчерпание эфемерных портов
Считает сокеты TIME-WAIT против диапазона портов; note: включай tw_reuse, не tw_recycle
ss -tan state time-wait | wc -l; sysctl net.ipv4.ip_local_port_range
Сводная статистика сокетов
Сводка сокетов по состояниям; рост SYN-SENT указывает на потерю SYN или фаервол
ss -s; ss -tan state syn-sent | wc -l
Определение Path MTU
Ищет узел падения PMTU; ping -M do запрещает фрагментацию для поиска blackhole MTU
tracepath -n <host>; ping -M do -s 1472 -c2 <host>
Проверка маршрута и ARP
Показывает реальный src/интерфейс к адресу; записи FAILED означают проблему L2/ARP
ip route get <ip>; ip neigh show | grep -E 'FAILED|INCOMPLETE'
Доступность TCP-порта сквозь фаервол
TCP-SYN traceroute проходит фильтрацию ICMP; nc -zv подтверждает открытый порт
traceroute -T -p 443 <host>; nc -zv <host> 443
Обход DNS через curl --resolve
Привязывает хост к конкретному IP для теста бэкенда с сохранением SNI и Host
curl -sv --resolve <host>:443:<ip> https://<host>/healthz
Проверка DNS внутри кластера
Одноразовый под для резолва имён в кластере; проверяет CoreDNS и сервис kube-dns
kubectl run dnsutils --image=tutum/dnsutils -it --rm --restart=Never -- nslookup kubernetes.default
Прямой запрос к CoreDNS
Бьёт прямо в clusterIP CoreDNS; note: ndots:5 порождает лишние запросы для коротких имён
dig +short @$(kubectl -n kube-system get svc kube-dns -o jsonpath='{.spec.clusterIP}') <name>.<ns>.svc.cluster.local
Просмотр конфига и логов CoreDNS
Смотрит Corefile (forward/cache) и логи на предмет SERVFAIL и ошибок upstream
kubectl -n kube-system get cm coredns -o yaml; kubectl -n kube-system logs deploy/coredns --tail=50
Перечисление шифров и протоколов TLS
Оценивает поддерживаемые версии TLS и шифры; отмечает слабые и устаревшие наборы
nmap --script ssl-enum-ciphers -p 443 <host>
Проверка цепочки TLS и SNI
Показывает полную цепочку с верным SNI; строка Verify ловит отсутствие промежуточных
openssl s_client -connect <host>:443 -servername <host> -showcerts 2>/dev/null | grep -E 'Verify|s:|i:'
Пакетная проверка срока сертификатов
Перебирает много хостов и печатает notAfter; направь в sort для ближайших просрочек
for h in $(cat hosts.txt); do echo -n "$h "; echo | openssl s_client -connect $h:443 -servername $h 2>/dev/null | openssl x509 -noout -enddate; done
Декодирование claims JWT
Декодирует payload для проверки exp/iss/aud; note: чинит base64url, подпись не проверяет
cut -d. -f2 <<<"$JWT" | tr '_-' '/+' | base64 -d 2>/dev/null | jq .
Список gRPC-сервисов через рефлексию
Перечисляет сервисы и методы через рефлексию; -plaintext отключает TLS для отладки
grpcurl -plaintext <host>:<port> list; grpcurl -plaintext <host>:<port> describe <svc>
no commands match